18bf80f4bSopenharmony_ci# Copyright (c) 2024 Huawei Device Co., Ltd.
28bf80f4bSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
38bf80f4bSopenharmony_ci# you may not use this file except in compliance with the License.
48bf80f4bSopenharmony_ci# You may obtain a copy of the License at
58bf80f4bSopenharmony_ci#
68bf80f4bSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
78bf80f4bSopenharmony_ci#
88bf80f4bSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
98bf80f4bSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
108bf80f4bSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
118bf80f4bSopenharmony_ci# See the License for the specific language governing permissions and
128bf80f4bSopenharmony_ci# limitations under the License.
138bf80f4bSopenharmony_ci
148bf80f4bSopenharmony_ciimport("//build/ohos.gni")
158bf80f4bSopenharmony_ciimport("//foundation/graphic/graphic_2d/graphic_config.gni")
168bf80f4bSopenharmony_ciimport("//foundation/graphic/graphic_3d/lume/lume_config.gni")
178bf80f4bSopenharmony_ci
188bf80f4bSopenharmony_cideclare_args() {
198bf80f4bSopenharmony_ci  CORE3D_EMBEDDED_ASSETS_ENABLED = true
208bf80f4bSopenharmony_ci  CORE3D_ROFS = "rofs3D"
218bf80f4bSopenharmony_ci}
228bf80f4bSopenharmony_ci
238bf80f4bSopenharmony_ciconfig("lume_3d_api") {
248bf80f4bSopenharmony_ci  include_dirs = [ "api" ]
258bf80f4bSopenharmony_ci}
268bf80f4bSopenharmony_ci
278bf80f4bSopenharmony_ciconfig("lume_3d_config") {
288bf80f4bSopenharmony_ci  include_dirs = [
298bf80f4bSopenharmony_ci    "3rdparty/",
308bf80f4bSopenharmony_ci    "src/",
318bf80f4bSopenharmony_ci    "assets/",
328bf80f4bSopenharmony_ci  ]
338bf80f4bSopenharmony_ci
348bf80f4bSopenharmony_ci  defines = [
358bf80f4bSopenharmony_ci    "__OHOS_PLATFORM__",
368bf80f4bSopenharmony_ci    "CORE3D_PUBLIC=__attribute__((visibility(\"default\")))",
378bf80f4bSopenharmony_ci    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
388bf80f4bSopenharmony_ci    "CORE3D_SHARED_LIBRARY=1",
398bf80f4bSopenharmony_ci    "CORE3D_VALIDATION_ENABLED=0",
408bf80f4bSopenharmony_ci    "CORE3D_TESTS_ENABLED=0",
418bf80f4bSopenharmony_ci    "CORE3D_DEV_ENABLED=${CORE_DEV_ENABLED}",
428bf80f4bSopenharmony_ci    "CORE3D_PUBLIC=__attribute__((visibility(\"default\")))",
438bf80f4bSopenharmony_ci    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
448bf80f4bSopenharmony_ci    "CORE_STATIC_PLUGIN_HEADER=${CORE_STATIC_PLUGIN_HEADER }",
458bf80f4bSopenharmony_ci  ]
468bf80f4bSopenharmony_ci
478bf80f4bSopenharmony_ci  if (LUME_OHOS_BUILD) {
488bf80f4bSopenharmony_ci    defines += [ "__OHOS_PLATFORM__" ]
498bf80f4bSopenharmony_ci  }
508bf80f4bSopenharmony_ci
518bf80f4bSopenharmony_ci  if (CORE3D_EMBEDDED_ASSETS_ENABLED) {
528bf80f4bSopenharmony_ci    defines += [ "CORE3D_EMBEDDED_ASSETS_ENABLED=1" ]
538bf80f4bSopenharmony_ci  }
548bf80f4bSopenharmony_ci}
558bf80f4bSopenharmony_ci
568bf80f4bSopenharmony_ciohos_source_set("lume_3d_src") {
578bf80f4bSopenharmony_ci  public_configs = [
588bf80f4bSopenharmony_ci    ":lume_3d_config",
598bf80f4bSopenharmony_ci    ":lume_3d_api",
608bf80f4bSopenharmony_ci    "${LUME_RENDER_PATH}:lume_render_api",
618bf80f4bSopenharmony_ci    "${LUME_CORE_PATH}:lume_base_api",
628bf80f4bSopenharmony_ci    "${LUME_CORE_PATH}:lume_engine_api",
638bf80f4bSopenharmony_ci    "${LUME_CORE_PATH}:lume_component_help_config",
648bf80f4bSopenharmony_ci    "${LUME_CORE_PATH}:lume_default",
658bf80f4bSopenharmony_ci  ]
668bf80f4bSopenharmony_ci
678bf80f4bSopenharmony_ci  sources = [
688bf80f4bSopenharmony_ci    "src/ecs/components/animation_component_manager.cpp",
698bf80f4bSopenharmony_ci    "src/ecs/components/animation_input_component_manager.cpp",
708bf80f4bSopenharmony_ci    "src/ecs/components/animation_output_component_manager.cpp",
718bf80f4bSopenharmony_ci    "src/ecs/components/animation_state_component_manager.cpp",
728bf80f4bSopenharmony_ci    "src/ecs/components/animation_track_component_manager.cpp",
738bf80f4bSopenharmony_ci    "src/ecs/components/camera_component_manager.cpp",
748bf80f4bSopenharmony_ci    "src/ecs/components/environment_component_manager.cpp",
758bf80f4bSopenharmony_ci    "src/ecs/components/fog_component_manager.cpp",
768bf80f4bSopenharmony_ci    "src/ecs/components/initial_transform_component.h",
778bf80f4bSopenharmony_ci    "src/ecs/components/initial_transform_component_manager.cpp",
788bf80f4bSopenharmony_ci    "src/ecs/components/joint_matrices_component_manager.cpp",
798bf80f4bSopenharmony_ci    "src/ecs/components/layer_component_manager.cpp",
808bf80f4bSopenharmony_ci    "src/ecs/components/layer_flag_bits_metadata.h",
818bf80f4bSopenharmony_ci    "src/ecs/components/light_component_manager.cpp",
828bf80f4bSopenharmony_ci    "src/ecs/components/local_matrix_component_manager.cpp",
838bf80f4bSopenharmony_ci    "src/ecs/components/material_component_manager.cpp",
848bf80f4bSopenharmony_ci    "src/ecs/components/material_extension_component_manager.cpp",
858bf80f4bSopenharmony_ci    "src/ecs/components/mesh_component_manager.cpp",
868bf80f4bSopenharmony_ci    "src/ecs/components/morph_component_manager.cpp",
878bf80f4bSopenharmony_ci    "src/ecs/components/name_component_manager.cpp",
888bf80f4bSopenharmony_ci    "src/ecs/components/node_component_manager.cpp",
898bf80f4bSopenharmony_ci    "src/ecs/components/physical_camera_component_manager.cpp",
908bf80f4bSopenharmony_ci    "src/ecs/components/planar_reflection_component_manager.cpp",
918bf80f4bSopenharmony_ci    "src/ecs/components/post_process_component_manager.cpp",
928bf80f4bSopenharmony_ci    "src/ecs/components/previous_joint_matrices_component_manager.cpp",
938bf80f4bSopenharmony_ci    "src/ecs/components/previous_world_matrix_component_manager.cpp",
948bf80f4bSopenharmony_ci    "src/ecs/components/render_configuration_component_manager.cpp",
958bf80f4bSopenharmony_ci    "src/ecs/components/render_handle_component_manager.cpp",
968bf80f4bSopenharmony_ci    "src/ecs/components/render_mesh_batch_component_manager.cpp",
978bf80f4bSopenharmony_ci    "src/ecs/components/render_mesh_component_manager.cpp",
988bf80f4bSopenharmony_ci    "src/ecs/components/rsdz_model_id_component_manager.cpp",
998bf80f4bSopenharmony_ci    "src/ecs/components/skin_component_manager.cpp",
1008bf80f4bSopenharmony_ci    "src/ecs/components/skin_ibm_component_manager.cpp",
1018bf80f4bSopenharmony_ci    "src/ecs/components/skin_joints_component_manager.cpp",
1028bf80f4bSopenharmony_ci    "src/ecs/components/transform_component_manager.cpp",
1038bf80f4bSopenharmony_ci    "src/ecs/components/uri_component_manager.cpp",
1048bf80f4bSopenharmony_ci    "src/ecs/components/world_matrix_component_manager.cpp",
1058bf80f4bSopenharmony_ci    "src/ecs/systems/animation_playback.cpp",
1068bf80f4bSopenharmony_ci    "src/ecs/systems/animation_playback.h",
1078bf80f4bSopenharmony_ci    "src/ecs/systems/animation_system.cpp",
1088bf80f4bSopenharmony_ci    "src/ecs/systems/animation_system.h",
1098bf80f4bSopenharmony_ci    "src/ecs/systems/local_matrix_system.cpp",
1108bf80f4bSopenharmony_ci    "src/ecs/systems/local_matrix_system.h",
1118bf80f4bSopenharmony_ci    "src/ecs/systems/morphing_system.cpp",
1128bf80f4bSopenharmony_ci    "src/ecs/systems/morphing_system.h",
1138bf80f4bSopenharmony_ci    "src/ecs/systems/node_system.cpp",
1148bf80f4bSopenharmony_ci    "src/ecs/systems/node_system.h",
1158bf80f4bSopenharmony_ci    "src/ecs/systems/render_preprocessor_system.cpp",
1168bf80f4bSopenharmony_ci    "src/ecs/systems/render_system.cpp",
1178bf80f4bSopenharmony_ci    "src/ecs/systems/render_system.h",
1188bf80f4bSopenharmony_ci    "src/ecs/systems/skinning_system.cpp",
1198bf80f4bSopenharmony_ci    "src/ecs/systems/skinning_system.h",
1208bf80f4bSopenharmony_ci    "src/gltf/data.h",
1218bf80f4bSopenharmony_ci    "src/gltf/gltf2.cpp",
1228bf80f4bSopenharmony_ci    "src/gltf/gltf2.h",
1238bf80f4bSopenharmony_ci    "src/gltf/gltf2_data_structures.h",
1248bf80f4bSopenharmony_ci    "src/gltf/gltf2_exporter.cpp",
1258bf80f4bSopenharmony_ci    "src/gltf/gltf2_exporter.h",
1268bf80f4bSopenharmony_ci    "src/gltf/gltf2_importer.cpp",
1278bf80f4bSopenharmony_ci    "src/gltf/gltf2_importer.h",
1288bf80f4bSopenharmony_ci    "src/gltf/gltf2_loader.cpp",
1298bf80f4bSopenharmony_ci    "src/gltf/gltf2_loader.h",
1308bf80f4bSopenharmony_ci    "src/gltf/gltf2_util.cpp",
1318bf80f4bSopenharmony_ci    "src/gltf/gltf2_util.h",
1328bf80f4bSopenharmony_ci    "src/graphics_context.cpp",
1338bf80f4bSopenharmony_ci    "src/graphics_context.h",
1348bf80f4bSopenharmony_ci    "src/loader/json_util.h",
1358bf80f4bSopenharmony_ci    "src/plugin/static_plugin.cpp",
1368bf80f4bSopenharmony_ci    "version.cpp",
1378bf80f4bSopenharmony_ci
1388bf80f4bSopenharmony_ci    #"src/plugin/static_registry.cpp",
1398bf80f4bSopenharmony_ci
1408bf80f4bSopenharmony_ci    "src/ecs/components/post_process_configuration_component_manager.cpp",
1418bf80f4bSopenharmony_ci    "src/property/property_handle.cpp",
1428bf80f4bSopenharmony_ci    "src/property/property_handle.h",
1438bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_camera.cpp",
1448bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_camera.h",
1458bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_light.cpp",
1468bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_light.h",
1478bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_material.cpp",
1488bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_material.h",
1498bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_scene.cpp",
1508bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_default_scene.h",
1518bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_morph.cpp",
1528bf80f4bSopenharmony_ci    "src/render/datastore/render_data_store_morph.h",
1538bf80f4bSopenharmony_ci    "src/render/node/render_copy_helper.cpp",
1548bf80f4bSopenharmony_ci    "src/render/node/render_copy_helper.h",
1558bf80f4bSopenharmony_ci    "src/render/node/render_light_helper.h",
1568bf80f4bSopenharmony_ci    "src/render/node/render_node_camera_cubemap.cpp",
1578bf80f4bSopenharmony_ci    "src/render/node/render_node_camera_cubemap.h",
1588bf80f4bSopenharmony_ci    "src/render/node/render_node_camera_single_post_process.cpp",
1598bf80f4bSopenharmony_ci    "src/render/node/render_node_camera_single_post_process.h",
1608bf80f4bSopenharmony_ci    "src/render/node/render_node_create_default_camera_gpu_images.cpp",
1618bf80f4bSopenharmony_ci    "src/render/node/render_node_create_default_camera_gpu_images.h",
1628bf80f4bSopenharmony_ci    "src/render/node/render_node_default_camera_controller.cpp",
1638bf80f4bSopenharmony_ci    "src/render/node/render_node_default_camera_controller.h",
1648bf80f4bSopenharmony_ci    "src/render/node/render_node_default_camera_post_process_controller.cpp",
1658bf80f4bSopenharmony_ci    "src/render/node/render_node_default_camera_post_process_controller.h",
1668bf80f4bSopenharmony_ci    "src/render/node/render_node_default_cameras.cpp",
1678bf80f4bSopenharmony_ci    "src/render/node/render_node_default_cameras.h",
1688bf80f4bSopenharmony_ci    "src/render/node/render_node_default_depth_render_slot.cpp",
1698bf80f4bSopenharmony_ci    "src/render/node/render_node_default_depth_render_slot.h",
1708bf80f4bSopenharmony_ci    "src/render/node/render_node_default_env.cpp",
1718bf80f4bSopenharmony_ci    "src/render/node/render_node_default_env.h",
1728bf80f4bSopenharmony_ci    "src/render/node/render_node_default_lights.cpp",
1738bf80f4bSopenharmony_ci    "src/render/node/render_node_default_lights.h",
1748bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_deferred_shading.cpp",
1758bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_deferred_shading.h",
1768bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_objects.cpp",
1778bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_objects.h",
1788bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_render_slot.cpp",
1798bf80f4bSopenharmony_ci    "src/render/node/render_node_default_material_render_slot.h",
1808bf80f4bSopenharmony_ci    "src/render/node/render_node_default_shadow_render_slot.cpp",
1818bf80f4bSopenharmony_ci    "src/render/node/render_node_default_shadow_render_slot.h",
1828bf80f4bSopenharmony_ci    "src/render/node/render_node_default_shadows_blur.cpp",
1838bf80f4bSopenharmony_ci    "src/render/node/render_node_default_shadows_blur.h",
1848bf80f4bSopenharmony_ci    "src/render/node/render_node_morph.cpp",
1858bf80f4bSopenharmony_ci    "src/render/node/render_node_morph.h",
1868bf80f4bSopenharmony_ci    "src/render/render_node_scene_util.cpp",
1878bf80f4bSopenharmony_ci    "src/render/render_node_scene_util.h",
1888bf80f4bSopenharmony_ci    "src/util/component_util_functions.h",
1898bf80f4bSopenharmony_ci    "src/util/linear_allocator.h",
1908bf80f4bSopenharmony_ci    "src/util/mesh_builder.cpp",
1918bf80f4bSopenharmony_ci    "src/util/mesh_builder.h",
1928bf80f4bSopenharmony_ci    "src/util/mesh_util.cpp",
1938bf80f4bSopenharmony_ci    "src/util/mesh_util.h",
1948bf80f4bSopenharmony_ci    "src/util/picking.cpp",
1958bf80f4bSopenharmony_ci    "src/util/picking.h",
1968bf80f4bSopenharmony_ci    "src/util/property_util.cpp",
1978bf80f4bSopenharmony_ci    "src/util/property_util.h",
1988bf80f4bSopenharmony_ci    "src/util/render_util.cpp",
1998bf80f4bSopenharmony_ci    "src/util/render_util.h",
2008bf80f4bSopenharmony_ci    "src/util/scene_util.cpp",
2018bf80f4bSopenharmony_ci    "src/util/scene_util.h",
2028bf80f4bSopenharmony_ci    "src/util/string_util.h",
2038bf80f4bSopenharmony_ci    "src/util/uri_lookup.cpp",
2048bf80f4bSopenharmony_ci    "src/util/uri_lookup.h",
2058bf80f4bSopenharmony_ci  ]
2068bf80f4bSopenharmony_ci
2078bf80f4bSopenharmony_ci  external_deps = [ "c_utils:utils" ]
2088bf80f4bSopenharmony_ci  part_name = "graphic_3d"
2098bf80f4bSopenharmony_ci  subsystem_name = "graphic"
2108bf80f4bSopenharmony_ci}
2118bf80f4bSopenharmony_ci
2128bf80f4bSopenharmony_cilume_compile_shader("lume_3d_compile_shader") {
2138bf80f4bSopenharmony_ci  script = "${LUME_CORE_PATH}/tools/CompilerShader.sh"
2148bf80f4bSopenharmony_ci  outputs = [ "$target_gen_dir" ]
2158bf80f4bSopenharmony_ci  tool_path = "$target_gen_dir"
2168bf80f4bSopenharmony_ci  dest_gen_path = "$target_gen_dir/assets"
2178bf80f4bSopenharmony_ci  asset_path = rebase_path("./assets/3d", root_build_dir)
2188bf80f4bSopenharmony_ci  shader_path = "${dest_gen_path}/shaders"
2198bf80f4bSopenharmony_ci  include_path = rebase_path("api", root_build_dir)
2208bf80f4bSopenharmony_ci  render_include_path = "${LUME_PATH}/${RENDER_DIR_NAME}/api/"
2218bf80f4bSopenharmony_ci  compileShader_deps =
2228bf80f4bSopenharmony_ci      [ "${LUME_BINARY_PATH}/LumeShaderCompiler:lume_binary_shader_compile" ]
2238bf80f4bSopenharmony_ci}
2248bf80f4bSopenharmony_ci
2258bf80f4bSopenharmony_cilume_rofs("lume_3d_rofs") {
2268bf80f4bSopenharmony_ci  output_obj = ""
2278bf80f4bSopenharmony_ci  if (target_cpu == "arm") {
2288bf80f4bSopenharmony_ci    output_obj = "${CORE3D_ROFS}_32.o"
2298bf80f4bSopenharmony_ci  }
2308bf80f4bSopenharmony_ci
2318bf80f4bSopenharmony_ci  if (target_cpu == "arm64") {
2328bf80f4bSopenharmony_ci    output_obj = "${CORE3D_ROFS}_64.o"
2338bf80f4bSopenharmony_ci  }
2348bf80f4bSopenharmony_ci
2358bf80f4bSopenharmony_ci  outputs = "${target_gen_dir}/assets/${output_obj}"
2368bf80f4bSopenharmony_ci
2378bf80f4bSopenharmony_ci  tool_path = "$target_gen_dir"
2388bf80f4bSopenharmony_ci  root = "/"
2398bf80f4bSopenharmony_ci  bin_name = "BINARY_DATA_FOR_3D"
2408bf80f4bSopenharmony_ci  size_name = "SIZE_OF_DATA_FOR_3D"
2418bf80f4bSopenharmony_ci  base_name = CORE3D_ROFS
2428bf80f4bSopenharmony_ci  script = "${LUME_CORE_PATH}/tools/CompilerAsset.sh"
2438bf80f4bSopenharmony_ci  copy_path = "$target_gen_dir/assets"
2448bf80f4bSopenharmony_ci  compileShader_deps = [
2458bf80f4bSopenharmony_ci    ":lume_3d_compile_shader",
2468bf80f4bSopenharmony_ci    "${LUME_BINARY_PATH}/lumeassetcompiler:lume_binary_assets_compile",
2478bf80f4bSopenharmony_ci  ]
2488bf80f4bSopenharmony_ci  file_extension = "\".spv;.json;.lsb;.shader;.shadergs;.shadervid;.shaderpl;.rng;.gl;.gles\""
2498bf80f4bSopenharmony_ci}
2508bf80f4bSopenharmony_ci
2518bf80f4bSopenharmony_cisource_set("lume_3d_rofs_obj") {
2528bf80f4bSopenharmony_ci  output_obj = ""
2538bf80f4bSopenharmony_ci  if (target_cpu == "arm") {
2548bf80f4bSopenharmony_ci    output_obj = "${CORE3D_ROFS}_32.o"
2558bf80f4bSopenharmony_ci  }
2568bf80f4bSopenharmony_ci
2578bf80f4bSopenharmony_ci  if (target_cpu == "arm64") {
2588bf80f4bSopenharmony_ci    output_obj = "${CORE3D_ROFS}_64.o"
2598bf80f4bSopenharmony_ci  }
2608bf80f4bSopenharmony_ci
2618bf80f4bSopenharmony_ci  sources = [ "${target_gen_dir}/assets/${output_obj}" ]
2628bf80f4bSopenharmony_ci  deps = [ ":lume_3d_rofs" ]
2638bf80f4bSopenharmony_ci}
2648bf80f4bSopenharmony_ci
2658bf80f4bSopenharmony_ciohos_static_library("libAGP3D") {
2668bf80f4bSopenharmony_ci  public_deps = [ ":lume_3d_src" ]
2678bf80f4bSopenharmony_ci
2688bf80f4bSopenharmony_ci  if (CORE3D_EMBEDDED_ASSETS_ENABLED) {
2698bf80f4bSopenharmony_ci    deps = [ ":lume_3d_rofs_obj" ]
2708bf80f4bSopenharmony_ci  }
2718bf80f4bSopenharmony_ci
2728bf80f4bSopenharmony_ci  part_name = "graphic_3d"
2738bf80f4bSopenharmony_ci  subsystem_name = "graphic"
2748bf80f4bSopenharmony_ci}
275