1# Copyright (c) 2024 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/ohos.gni")
15import("//foundation/graphic/graphic_2d/graphic_config.gni")
16import("//foundation/graphic/graphic_3d/lume/lume_config.gni")
17
18declare_args() {
19  CORE3D_EMBEDDED_ASSETS_ENABLED = true
20  CORE3D_ROFS = "rofs3D"
21}
22
23config("lume_3d_api") {
24  include_dirs = [ "api" ]
25}
26
27config("lume_3d_config") {
28  include_dirs = [
29    "3rdparty/",
30    "src/",
31    "assets/",
32  ]
33
34  defines = [
35    "__OHOS_PLATFORM__",
36    "CORE3D_PUBLIC=__attribute__((visibility(\"default\")))",
37    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
38    "CORE3D_SHARED_LIBRARY=1",
39    "CORE3D_VALIDATION_ENABLED=0",
40    "CORE3D_TESTS_ENABLED=0",
41    "CORE3D_DEV_ENABLED=${CORE_DEV_ENABLED}",
42    "CORE3D_PUBLIC=__attribute__((visibility(\"default\")))",
43    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
44    "CORE_STATIC_PLUGIN_HEADER=${CORE_STATIC_PLUGIN_HEADER }",
45  ]
46
47  if (LUME_OHOS_BUILD) {
48    defines += [ "__OHOS_PLATFORM__" ]
49  }
50
51  if (CORE3D_EMBEDDED_ASSETS_ENABLED) {
52    defines += [ "CORE3D_EMBEDDED_ASSETS_ENABLED=1" ]
53  }
54}
55
56ohos_source_set("lume_3d_src") {
57  public_configs = [
58    ":lume_3d_config",
59    ":lume_3d_api",
60    "${LUME_RENDER_PATH}:lume_render_api",
61    "${LUME_CORE_PATH}:lume_base_api",
62    "${LUME_CORE_PATH}:lume_engine_api",
63    "${LUME_CORE_PATH}:lume_component_help_config",
64    "${LUME_CORE_PATH}:lume_default",
65  ]
66
67  sources = [
68    "src/ecs/components/animation_component_manager.cpp",
69    "src/ecs/components/animation_input_component_manager.cpp",
70    "src/ecs/components/animation_output_component_manager.cpp",
71    "src/ecs/components/animation_state_component_manager.cpp",
72    "src/ecs/components/animation_track_component_manager.cpp",
73    "src/ecs/components/camera_component_manager.cpp",
74    "src/ecs/components/environment_component_manager.cpp",
75    "src/ecs/components/fog_component_manager.cpp",
76    "src/ecs/components/initial_transform_component.h",
77    "src/ecs/components/initial_transform_component_manager.cpp",
78    "src/ecs/components/joint_matrices_component_manager.cpp",
79    "src/ecs/components/layer_component_manager.cpp",
80    "src/ecs/components/layer_flag_bits_metadata.h",
81    "src/ecs/components/light_component_manager.cpp",
82    "src/ecs/components/local_matrix_component_manager.cpp",
83    "src/ecs/components/material_component_manager.cpp",
84    "src/ecs/components/material_extension_component_manager.cpp",
85    "src/ecs/components/mesh_component_manager.cpp",
86    "src/ecs/components/morph_component_manager.cpp",
87    "src/ecs/components/name_component_manager.cpp",
88    "src/ecs/components/node_component_manager.cpp",
89    "src/ecs/components/physical_camera_component_manager.cpp",
90    "src/ecs/components/planar_reflection_component_manager.cpp",
91    "src/ecs/components/post_process_component_manager.cpp",
92    "src/ecs/components/previous_joint_matrices_component_manager.cpp",
93    "src/ecs/components/previous_world_matrix_component_manager.cpp",
94    "src/ecs/components/render_configuration_component_manager.cpp",
95    "src/ecs/components/render_handle_component_manager.cpp",
96    "src/ecs/components/render_mesh_batch_component_manager.cpp",
97    "src/ecs/components/render_mesh_component_manager.cpp",
98    "src/ecs/components/rsdz_model_id_component_manager.cpp",
99    "src/ecs/components/skin_component_manager.cpp",
100    "src/ecs/components/skin_ibm_component_manager.cpp",
101    "src/ecs/components/skin_joints_component_manager.cpp",
102    "src/ecs/components/transform_component_manager.cpp",
103    "src/ecs/components/uri_component_manager.cpp",
104    "src/ecs/components/world_matrix_component_manager.cpp",
105    "src/ecs/systems/animation_playback.cpp",
106    "src/ecs/systems/animation_playback.h",
107    "src/ecs/systems/animation_system.cpp",
108    "src/ecs/systems/animation_system.h",
109    "src/ecs/systems/local_matrix_system.cpp",
110    "src/ecs/systems/local_matrix_system.h",
111    "src/ecs/systems/morphing_system.cpp",
112    "src/ecs/systems/morphing_system.h",
113    "src/ecs/systems/node_system.cpp",
114    "src/ecs/systems/node_system.h",
115    "src/ecs/systems/render_preprocessor_system.cpp",
116    "src/ecs/systems/render_system.cpp",
117    "src/ecs/systems/render_system.h",
118    "src/ecs/systems/skinning_system.cpp",
119    "src/ecs/systems/skinning_system.h",
120    "src/gltf/data.h",
121    "src/gltf/gltf2.cpp",
122    "src/gltf/gltf2.h",
123    "src/gltf/gltf2_data_structures.h",
124    "src/gltf/gltf2_exporter.cpp",
125    "src/gltf/gltf2_exporter.h",
126    "src/gltf/gltf2_importer.cpp",
127    "src/gltf/gltf2_importer.h",
128    "src/gltf/gltf2_loader.cpp",
129    "src/gltf/gltf2_loader.h",
130    "src/gltf/gltf2_util.cpp",
131    "src/gltf/gltf2_util.h",
132    "src/graphics_context.cpp",
133    "src/graphics_context.h",
134    "src/loader/json_util.h",
135    "src/plugin/static_plugin.cpp",
136    "version.cpp",
137
138    #"src/plugin/static_registry.cpp",
139
140    "src/ecs/components/post_process_configuration_component_manager.cpp",
141    "src/property/property_handle.cpp",
142    "src/property/property_handle.h",
143    "src/render/datastore/render_data_store_default_camera.cpp",
144    "src/render/datastore/render_data_store_default_camera.h",
145    "src/render/datastore/render_data_store_default_light.cpp",
146    "src/render/datastore/render_data_store_default_light.h",
147    "src/render/datastore/render_data_store_default_material.cpp",
148    "src/render/datastore/render_data_store_default_material.h",
149    "src/render/datastore/render_data_store_default_scene.cpp",
150    "src/render/datastore/render_data_store_default_scene.h",
151    "src/render/datastore/render_data_store_morph.cpp",
152    "src/render/datastore/render_data_store_morph.h",
153    "src/render/node/render_copy_helper.cpp",
154    "src/render/node/render_copy_helper.h",
155    "src/render/node/render_light_helper.h",
156    "src/render/node/render_node_camera_cubemap.cpp",
157    "src/render/node/render_node_camera_cubemap.h",
158    "src/render/node/render_node_camera_single_post_process.cpp",
159    "src/render/node/render_node_camera_single_post_process.h",
160    "src/render/node/render_node_create_default_camera_gpu_images.cpp",
161    "src/render/node/render_node_create_default_camera_gpu_images.h",
162    "src/render/node/render_node_default_camera_controller.cpp",
163    "src/render/node/render_node_default_camera_controller.h",
164    "src/render/node/render_node_default_camera_post_process_controller.cpp",
165    "src/render/node/render_node_default_camera_post_process_controller.h",
166    "src/render/node/render_node_default_cameras.cpp",
167    "src/render/node/render_node_default_cameras.h",
168    "src/render/node/render_node_default_depth_render_slot.cpp",
169    "src/render/node/render_node_default_depth_render_slot.h",
170    "src/render/node/render_node_default_env.cpp",
171    "src/render/node/render_node_default_env.h",
172    "src/render/node/render_node_default_lights.cpp",
173    "src/render/node/render_node_default_lights.h",
174    "src/render/node/render_node_default_material_deferred_shading.cpp",
175    "src/render/node/render_node_default_material_deferred_shading.h",
176    "src/render/node/render_node_default_material_objects.cpp",
177    "src/render/node/render_node_default_material_objects.h",
178    "src/render/node/render_node_default_material_render_slot.cpp",
179    "src/render/node/render_node_default_material_render_slot.h",
180    "src/render/node/render_node_default_shadow_render_slot.cpp",
181    "src/render/node/render_node_default_shadow_render_slot.h",
182    "src/render/node/render_node_default_shadows_blur.cpp",
183    "src/render/node/render_node_default_shadows_blur.h",
184    "src/render/node/render_node_morph.cpp",
185    "src/render/node/render_node_morph.h",
186    "src/render/render_node_scene_util.cpp",
187    "src/render/render_node_scene_util.h",
188    "src/util/component_util_functions.h",
189    "src/util/linear_allocator.h",
190    "src/util/mesh_builder.cpp",
191    "src/util/mesh_builder.h",
192    "src/util/mesh_util.cpp",
193    "src/util/mesh_util.h",
194    "src/util/picking.cpp",
195    "src/util/picking.h",
196    "src/util/property_util.cpp",
197    "src/util/property_util.h",
198    "src/util/render_util.cpp",
199    "src/util/render_util.h",
200    "src/util/scene_util.cpp",
201    "src/util/scene_util.h",
202    "src/util/string_util.h",
203    "src/util/uri_lookup.cpp",
204    "src/util/uri_lookup.h",
205  ]
206
207  external_deps = [ "c_utils:utils" ]
208  part_name = "graphic_3d"
209  subsystem_name = "graphic"
210}
211
212lume_compile_shader("lume_3d_compile_shader") {
213  script = "${LUME_CORE_PATH}/tools/CompilerShader.sh"
214  outputs = [ "$target_gen_dir" ]
215  tool_path = "$target_gen_dir"
216  dest_gen_path = "$target_gen_dir/assets"
217  asset_path = rebase_path("./assets/3d", root_build_dir)
218  shader_path = "${dest_gen_path}/shaders"
219  include_path = rebase_path("api", root_build_dir)
220  render_include_path = "${LUME_PATH}/${RENDER_DIR_NAME}/api/"
221  compileShader_deps =
222      [ "${LUME_BINARY_PATH}/LumeShaderCompiler:lume_binary_shader_compile" ]
223}
224
225lume_rofs("lume_3d_rofs") {
226  output_obj = ""
227  if (target_cpu == "arm") {
228    output_obj = "${CORE3D_ROFS}_32.o"
229  }
230
231  if (target_cpu == "arm64") {
232    output_obj = "${CORE3D_ROFS}_64.o"
233  }
234
235  outputs = "${target_gen_dir}/assets/${output_obj}"
236
237  tool_path = "$target_gen_dir"
238  root = "/"
239  bin_name = "BINARY_DATA_FOR_3D"
240  size_name = "SIZE_OF_DATA_FOR_3D"
241  base_name = CORE3D_ROFS
242  script = "${LUME_CORE_PATH}/tools/CompilerAsset.sh"
243  copy_path = "$target_gen_dir/assets"
244  compileShader_deps = [
245    ":lume_3d_compile_shader",
246    "${LUME_BINARY_PATH}/lumeassetcompiler:lume_binary_assets_compile",
247  ]
248  file_extension = "\".spv;.json;.lsb;.shader;.shadergs;.shadervid;.shaderpl;.rng;.gl;.gles\""
249}
250
251source_set("lume_3d_rofs_obj") {
252  output_obj = ""
253  if (target_cpu == "arm") {
254    output_obj = "${CORE3D_ROFS}_32.o"
255  }
256
257  if (target_cpu == "arm64") {
258    output_obj = "${CORE3D_ROFS}_64.o"
259  }
260
261  sources = [ "${target_gen_dir}/assets/${output_obj}" ]
262  deps = [ ":lume_3d_rofs" ]
263}
264
265ohos_static_library("libAGP3D") {
266  public_deps = [ ":lume_3d_src" ]
267
268  if (CORE3D_EMBEDDED_ASSETS_ENABLED) {
269    deps = [ ":lume_3d_rofs_obj" ]
270  }
271
272  part_name = "graphic_3d"
273  subsystem_name = "graphic"
274}
275