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.
13import("//build/ohos.gni")
14import("//foundation/graphic/graphic_2d/graphic_config.gni")
15import("//foundation/graphic/graphic_3d/lume/lume_config.gni")
16
17declare_args() {
18  RENDER_BUILD_GLES = true
19  RENDER_BUILD_VULKAN = true
20  RENDER_EMBEDDED_ASSETS_ENABLED = true
21  RENDER_ROFS = "rofsRndr"
22}
23
24config("lume_render_api") {
25  include_dirs = [ "api" ]
26
27  defines = []
28
29  if (BUILDTYPE == "Release") {
30    defines += [ "PLUGIN_LOG_NO_DEBUG=0" ]
31  }
32
33  if (BUILDTYPE == "MinSizeRel") {
34    defines += [ "PLUGIN_LOG_NO_DEBUG=0" ]
35  }
36
37  if (BUILDTYPE == "RelWithDebInfo") {
38    defines += [ "PLUGIN_LOG_NO_DEBUG=0" ]
39  }
40
41  if (LUME_OHOS_BUILD) {
42    defines += [ "__OHOS_PLATFORM__" ]
43  }
44
45  if (LUME_OHOS_BUILD && RENDER_BUILD_VULKAN) {
46    include_dirs += [
47      "src/vulkan/ohos",
48      #"//third_party/skia/third_party/vulkanmemoryallocator/include"
49    ]
50  }
51}
52
53config("lume_render_config") {
54  include_dirs = [
55    "3rdparty/",
56    "src/",
57  ]
58
59  defines = [
60    "RENDER_PUBLIC=__attribute__((visibility(\"default\")))",
61    "RENDER_DEV_ENABLED=0",
62    "RENDER_PERF_ENABLED=0",
63    "RENDER_TESTS_ENABLED=0",
64    "RENDER_LOG_TO_CONSOLE=1",
65    "RENDER_LOG_TO_FILE",
66    "RENDER_LOG_TO_DEBUG_OUTPUT=0",
67    "RENDER_VULKAN_VALIDATION_ENABLED=0",
68    "RENDER_DEBUG_GPU_RESOURCE_IDS=0",
69    "RENDER_DEBUG_MARKERS_ENABLED=0",
70    "RENDER_DEBUG_COMMAND_MARKERS_ENABLED=0",
71    "RENDER_GL_FLIP_Y_SWAPCHAIN=0",
72    "RENDER_GL_DEBUG=0",
73    "RENDER_GPU_TIMESTAMP_QUERIES_ENABLED=0",
74    "RENDER_VULKAN_RT_ENABLED=0",
75    "RENDER_BUILDTYPE=${BUILDTYPE}",
76    "CORE_USE_COMPILER_GENERATED_STATIC_LIST=1",
77    "CORE_STATIC_PLUGIN_HEADER=${CORE_STATIC_PLUGIN_HEADER}",
78  ]
79
80  if (RENDER_EMBEDDED_ASSETS_ENABLED) {
81    defines += [ "RENDER_EMBEDDED_ASSETS_ENABLED=1" ]
82  }
83
84  if (RENDER_BUILD_GLES) {
85    defines += [ "RENDER_HAS_GLES_BACKEND=1" ]
86  }
87
88  if (RENDER_BUILD_VULKAN) {
89    defines += [
90      "RENDER_HAS_VULKAN_BACKEND=1",
91      "VMA_STATS_STRING_ENABLED=0",
92      "VMA_STATIC_VULKAN_FUNCTIONS=0",
93
94      #"USE_NEW_VMA=0"
95    ]
96
97    if (LUME_OHOS_BUILD) {
98      defines += [ "RENDER_VULKAN_VALIDATION_ENABLE_WARNINGS=0" ]
99    }
100  }
101  defines += [ "RENDER_PUBLIC=__attribute__((visibility(\"default\")))" ]
102
103  ldflags = [ "-Wl,--undefined=AGPRender_StaticPlugin" ]
104
105  cflags = [
106    "-Wno-nullability-completeness",
107    "-Wno-ignored-qualifiers",
108    "-Wno-switch",
109  ]
110}
111group("libvulkan") {
112  #public_deps = [ "${LIB_VULKAN_3D}" ]
113  #public_deps = libvulkan3D
114  external_deps = [ "vulkan-loader:vulkan_loader" ]
115}
116
117ohos_source_set("lume_render_src") {
118  public_configs = [
119    ":lume_render_config",
120    ":lume_render_api",
121    "${LUME_CORE_PATH}:lume_base_api",
122    "${LUME_CORE_PATH}:lume_engine_api",
123    "${LUME_CORE_PATH}:lume_default",
124    "${LUME_CORE_PATH}:lume_component_help_config",
125  ]
126
127  sources = [
128    "src/default_engine_constants.h",
129    "src/device/device.cpp",
130    "src/device/device.h",
131
132    # "src/device/generic/platform_hardware_buffer.cpp",
133    "src/device/gpu_acceleration_structure.h",
134    "src/device/gpu_buffer.h",
135    "src/device/gpu_image.h",
136    "src/device/gpu_program.h",
137    "src/device/gpu_program_util.cpp",
138    "src/device/gpu_program_util.h",
139    "src/device/gpu_resource_cache.cpp",
140    "src/device/gpu_resource_cache.h",
141    "src/device/gpu_resource_desc_flag_validation.h",
142    "src/device/gpu_resource_handle_util.cpp",
143    "src/device/gpu_resource_handle_util.h",
144    "src/device/gpu_resource_manager.cpp",
145    "src/device/gpu_resource_manager.h",
146    "src/device/gpu_resource_manager_base.h",
147    "src/device/gpu_resource_manager_base.inl",
148    "src/device/gpu_resource_util.cpp",
149    "src/device/gpu_resource_util.h",
150    "src/device/gpu_sampler.h",
151    "src/device/gpu_semaphore.h",
152    "src/device/pipeline_state_object.h",
153    "src/device/render_frame_sync.h",
154    "src/device/shader_manager.cpp",
155    "src/device/shader_manager.h",
156    "src/device/shader_module.h",
157    "src/device/shader_pipeline_binder.cpp",
158    "src/device/shader_pipeline_binder.h",
159    "src/device/swapchain.h",
160    "src/loader/json_format_serialization.h",
161    "src/loader/json_util.h",
162    "src/loader/pipeline_layout_loader.cpp",
163    "src/loader/pipeline_layout_loader.h",
164    "src/loader/render_data_configuration_loader.cpp",
165    "src/loader/render_data_configuration_loader.h",
166    "src/loader/render_data_loader.cpp",
167    "src/loader/render_data_loader.h",
168    "src/loader/render_node_graph_loader.cpp",
169    "src/loader/render_node_graph_loader.h",
170    "src/loader/shader_data_loader.cpp",
171    "src/loader/shader_data_loader.h",
172    "src/loader/shader_loader.cpp",
173    "src/loader/shader_loader.h",
174    "src/loader/shader_state_loader.cpp",
175    "src/loader/shader_state_loader.h",
176    "src/loader/shader_state_loader_util.cpp",
177    "src/loader/shader_state_loader_util.h",
178    "src/loader/vertex_input_declaration_loader.cpp",
179    "src/loader/vertex_input_declaration_loader.h",
180    "src/perf/cpu_perf_scope.h",
181    "src/perf/cpu_timer.cpp",
182    "src/perf/cpu_timer.h",
183    "src/perf/gpu_query.h",
184    "src/perf/gpu_query_manager.cpp",
185    "src/perf/gpu_query_manager.h",
186    "src/plugin/static_plugin.cpp",
187    "src/render_backend.h",
188    "src/render_context.cpp",
189    "src/render_context.h",
190    "src/render_graph.cpp",
191    "src/render_graph.h",
192    "src/renderer.cpp",
193    "src/renderer.h",
194    "src/resource_handle_impl.cpp",
195    "src/resource_handle_impl.h",
196    "version.cpp",
197
198    #"src/plugin/static_registry.cpp",
199
200    "src/datastore/render_data_store_default_acceleration_structure_staging.cpp",
201    "src/datastore/render_data_store_default_acceleration_structure_staging.h",
202    "src/datastore/render_data_store_default_gpu_resource_data_copy.cpp",
203    "src/datastore/render_data_store_default_gpu_resource_data_copy.h",
204    "src/datastore/render_data_store_default_staging.cpp",
205    "src/datastore/render_data_store_default_staging.h",
206    "src/datastore/render_data_store_manager.cpp",
207    "src/datastore/render_data_store_manager.h",
208    "src/datastore/render_data_store_pod.cpp",
209    "src/datastore/render_data_store_pod.h",
210    "src/datastore/render_data_store_post_process.cpp",
211    "src/datastore/render_data_store_post_process.h",
212    "src/datastore/render_data_store_shader_passes.cpp",
213    "src/node/core_render_node_factory.cpp",
214    "src/node/core_render_node_factory.h",
215    "src/node/render_bloom.cpp",
216    "src/node/render_bloom.h",
217    "src/node/render_blur.cpp",
218    "src/node/render_blur.h",
219    "src/node/render_copy.cpp",
220    "src/node/render_copy.h",
221    "src/node/render_motion_blur.cpp",
222    "src/node/render_motion_blur.h",
223    "src/node/render_node_back_buffer.cpp",
224    "src/node/render_node_back_buffer.h",
225    "src/node/render_node_bloom.cpp",
226    "src/node/render_node_bloom.h",
227    "src/node/render_node_combined_post_process.cpp",
228    "src/node/render_node_combined_post_process.h",
229    "src/node/render_node_compute_generic.cpp",
230    "src/node/render_node_compute_generic.h",
231    "src/node/render_node_create_gpu_buffers.cpp",
232    "src/node/render_node_create_gpu_buffers.h",
233    "src/node/render_node_create_gpu_images.cpp",
234    "src/node/render_node_create_gpu_images.h",
235    "src/node/render_node_default_acceleration_structure_staging.cpp",
236    "src/node/render_node_default_acceleration_structure_staging.h",
237    "src/node/render_node_end_frame_staging.cpp",
238    "src/node/render_node_end_frame_staging.h",
239    "src/node/render_node_fullscreen_generic.cpp",
240    "src/node/render_node_fullscreen_generic.h",
241    "src/node/render_node_mip_chain_post_process.cpp",
242    "src/node/render_node_mip_chain_post_process.h",
243    "src/node/render_node_shader_passes_generic.cpp",
244    "src/node/render_node_shader_passes_generic.h",
245    "src/node/render_node_single_post_process.cpp",
246    "src/node/render_node_single_post_process.h",
247    "src/node/render_node_staging.cpp",
248    "src/node/render_node_staging.h",
249    "src/node/render_staging.cpp",
250    "src/node/render_staging.h",
251    "src/nodecontext/node_context_descriptor_set_manager.cpp",
252    "src/nodecontext/node_context_descriptor_set_manager.h",
253    "src/nodecontext/node_context_pool_manager.h",
254    "src/nodecontext/node_context_pso_manager.cpp",
255    "src/nodecontext/node_context_pso_manager.h",
256    "src/nodecontext/pipeline_descriptor_set_binder.cpp",
257    "src/nodecontext/pipeline_descriptor_set_binder.h",
258    "src/nodecontext/render_barrier_list.cpp",
259    "src/nodecontext/render_barrier_list.h",
260    "src/nodecontext/render_command_list.cpp",
261    "src/nodecontext/render_command_list.h",
262    "src/nodecontext/render_node_context_manager.cpp",
263    "src/nodecontext/render_node_context_manager.h",
264    "src/nodecontext/render_node_graph_manager.cpp",
265    "src/nodecontext/render_node_graph_manager.h",
266    "src/nodecontext/render_node_graph_node_store.h",
267    "src/nodecontext/render_node_graph_share_manager.cpp",
268    "src/nodecontext/render_node_graph_share_manager.h",
269    "src/nodecontext/render_node_manager.cpp",
270    "src/nodecontext/render_node_manager.h",
271    "src/nodecontext/render_node_parser_util.cpp",
272    "src/nodecontext/render_node_parser_util.h",
273    "src/nodecontext/render_node_post_process_util.cpp",
274    "src/nodecontext/render_node_post_process_util.h",
275    "src/nodecontext/render_node_util.cpp",
276    "src/nodecontext/render_node_util.h",
277    "src/util/linear_allocator.h",
278    "src/util/log.h",
279    "src/util/property_util.cpp",
280    "src/util/render_frame_util.cpp",
281    "src/util/render_frame_util.h",
282    "src/util/render_util.cpp",
283    "src/util/render_util.h",
284    "src/util/string_util.h",
285  ]
286
287  if (RENDER_BUILD_GLES) {
288    sources += [
289      "src/gles/device_gles.cpp",
290      "src/gles/device_gles.h",
291      "src/gles/egl_state.cpp",
292      "src/gles/egl_state.h",
293      "src/gles/generic/platform_device_gles.cpp",
294      "src/gles/gl_functions.h",
295      "src/gles/gpu_buffer_gles.cpp",
296      "src/gles/gpu_buffer_gles.h",
297      "src/gles/gpu_image_gles.cpp",
298      "src/gles/gpu_image_gles.h",
299      "src/gles/gpu_program_gles.cpp",
300      "src/gles/gpu_program_gles.h",
301      "src/gles/gpu_query_gles.cpp",
302      "src/gles/gpu_query_gles.h",
303      "src/gles/gpu_resource_util_gles.cpp",
304      "src/gles/gpu_resource_util_gles.h",
305      "src/gles/gpu_sampler_gles.cpp",
306      "src/gles/gpu_sampler_gles.h",
307      "src/gles/gpu_semaphore_gles.cpp",
308      "src/gles/node_context_descriptor_set_manager_gles.cpp",
309      "src/gles/node_context_descriptor_set_manager_gles.h",
310      "src/gles/node_context_pool_manager_gles.cpp",
311      "src/gles/node_context_pool_manager_gles.h",
312      "src/gles/pipeline_state_object_gles.cpp",
313      "src/gles/pipeline_state_object_gles.h",
314      "src/gles/render_backend_gles.cpp",
315      "src/gles/render_backend_gles.h",
316      "src/gles/render_frame_sync_gles.cpp",
317      "src/gles/render_frame_sync_gles.h",
318      "src/gles/shader_module_gles.cpp",
319      "src/gles/shader_module_gles.h",
320      "src/gles/spirv_cross_helper_structs_gles.h",
321      "src/gles/spirv_cross_helpers_gles.cpp",
322      "src/gles/spirv_cross_helpers_gles.h",
323      "src/gles/surface_information.h",
324      "src/gles/swapchain_gles.cpp",
325      "src/gles/swapchain_gles.h",
326      "src/gles/wgl_state.cpp",
327      "src/gles/wgl_state.h",
328    ]
329  }
330
331  if (RENDER_BUILD_VULKAN) {
332    sources += [
333      "src/vulkan/create_functions_vk.cpp",
334      "src/vulkan/create_functions_vk.h",
335      "src/vulkan/device_vk.cpp",
336      "src/vulkan/device_vk.h",
337      "src/vulkan/gpu_buffer_vk.cpp",
338      "src/vulkan/gpu_buffer_vk.h",
339      "src/vulkan/gpu_image_vk.cpp",
340      "src/vulkan/gpu_image_vk.h",
341      "src/vulkan/gpu_memory_allocator_vk.cpp",
342      "src/vulkan/gpu_memory_allocator_vk.h",
343      "src/vulkan/gpu_program_vk.cpp",
344      "src/vulkan/gpu_program_vk.h",
345      "src/vulkan/gpu_query_vk.cpp",
346      "src/vulkan/gpu_query_vk.h",
347      "src/vulkan/gpu_resource_util_vk.cpp",
348      "src/vulkan/gpu_resource_util_vk.h",
349      "src/vulkan/gpu_sampler_vk.cpp",
350      "src/vulkan/gpu_sampler_vk.h",
351      "src/vulkan/gpu_semaphore_vk.cpp",
352      "src/vulkan/gpu_semaphore_vk.h",
353      "src/vulkan/node_context_descriptor_set_manager_vk.cpp",
354      "src/vulkan/node_context_descriptor_set_manager_vk.h",
355      "src/vulkan/node_context_pool_manager_vk.cpp",
356      "src/vulkan/node_context_pool_manager_vk.h",
357      "src/vulkan/pipeline_create_functions_vk.cpp",
358      "src/vulkan/pipeline_create_functions_vk.h",
359      "src/vulkan/pipeline_state_object_vk.cpp",
360      "src/vulkan/pipeline_state_object_vk.h",
361      "src/vulkan/platform_hardware_buffer_util_vk.cpp",
362      "src/vulkan/platform_hardware_buffer_util_vk.h",
363      "src/vulkan/render_backend_vk.cpp",
364      "src/vulkan/render_backend_vk.h",
365      "src/vulkan/render_frame_sync_vk.cpp",
366      "src/vulkan/render_frame_sync_vk.h",
367      "src/vulkan/shader_module_vk.cpp",
368      "src/vulkan/shader_module_vk.h",
369      "src/vulkan/swapchain_vk.cpp",
370      "src/vulkan/swapchain_vk.h",
371      "src/vulkan/validate_vk.h",
372    ]
373
374    if (LUME_OHOS_BUILD) {
375      # platform source
376      sources += [
377        "src/device/ohos/platform_hardware_buffer.cpp",
378        "src/vulkan/ohos/platform_create_functions_vk.cpp",
379        "src/vulkan/ohos/platform_device_vk.cpp",
380        "src/vulkan/ohos/platform_gpu_image_vk.cpp",
381        "src/vulkan/ohos/platform_hardware_buffer_util.cpp",
382        "src/vulkan/ohos/platform_vk.cpp",
383        "src/vulkan/ohos/platform_vk.h",
384      ]
385    }
386  }
387  external_deps = [
388    "c_utils:utils",
389    "graphic_2d:EGL",
390    "graphic_2d:GLESv3",
391  ]
392
393  if (RENDER_BUILD_VULKAN) {
394    deps = [ ":libvulkan" ]
395
396    #public_deps = [ "//third_party/vulkan-headers:vulkan_headers" ]
397    external_deps += [ "vulkan-headers:vulkan_headers" ]
398  }
399
400  part_name = "graphic_3d"
401  subsystem_name = "graphic"
402}
403
404lume_compile_shader("lume_render_compile_shader") {
405  script = "${LUME_CORE_PATH}/tools/CompilerShader.sh"
406  outputs = [ "$target_gen_dir" ]
407  tool_path = "$target_gen_dir"
408  dest_gen_path = "$target_gen_dir/assets"
409  asset_path = rebase_path("./assets/render", root_build_dir)
410  shader_path = "${dest_gen_path}/shaders"
411  include_path = rebase_path("api", root_build_dir)
412  compileShader_deps =
413      [ "${LUME_BINARY_PATH}/LumeShaderCompiler:lume_binary_shader_compile" ]
414}
415
416lume_rofs("lume_render_rofs") {
417  output_obj = ""
418  if (target_cpu == "arm") {
419    output_obj = "${RENDER_ROFS}_32.o"
420  }
421
422  if (target_cpu == "arm64") {
423    output_obj = "${RENDER_ROFS}_64.o"
424  }
425
426  outputs = "${target_gen_dir}/assets/${output_obj}"
427
428  tool_path = "$target_gen_dir"
429  root = "/"
430  bin_name = "BINARYDATAFORRENDER"
431  size_name = "SIZEOFDATAFORRENDER"
432  base_name = RENDER_ROFS
433  script = "${LUME_CORE_PATH}/tools/CompilerAsset.sh"
434  copy_path = "$target_gen_dir/assets"
435  compileShader_deps = [
436    ":lume_render_compile_shader",
437    "${LUME_BINARY_PATH}/lumeassetcompiler:lume_binary_assets_compile",
438  ]
439  file_extension = "\".spv;.json;.lsb;.shader;.shadergs;.shadervid;.shaderpl;.rng;.gl;.gles\""
440}
441
442source_set("lume_render_rofs_obj") {
443  output_obj = ""
444  if (target_cpu == "arm") {
445    output_obj = "${RENDER_ROFS}_32.o"
446  }
447
448  if (target_cpu == "arm64") {
449    output_obj = "${RENDER_ROFS}_64.o"
450  }
451
452  sources = [ "${target_gen_dir}/assets/${output_obj}" ]
453  deps = [ ":lume_render_rofs" ]
454}
455
456ohos_static_library("libAGPRender") {
457  public_deps = [ ":lume_render_src" ]
458
459  if (RENDER_EMBEDDED_ASSETS_ENABLED) {
460    deps = [ ":lume_render_rofs_obj" ]
461  }
462  part_name = "graphic_3d"
463  subsystem_name = "graphic"
464}
465
466config("lume_render_plugin_config") {
467  defines = [ "CORE_PLUGIN=1" ]
468}
469
470ohos_source_set("lume_render_src_plugin") {
471  sources = [
472    "src/plugin/dynamic_plugin.cpp",
473    "src/plugin/dynamic_registry.cpp",
474    "src/util/json.cpp",
475  ]
476
477  configs = [
478    ":lume_render_plugin_config",
479    ":lume_render_api",
480    "${LUME_CORE_PATH}:lume_base_api",
481    "${LUME_CORE_PATH}:lume_engine_api",
482    "${LUME_CORE_PATH}:lume_default",
483  ]
484
485  part_name = "graphic_3d"
486  subsystem_name = "graphic"
487}
488
489ohos_shared_library(LIB_RENDER) {
490  public_deps = [
491    ":libAGPRender",
492    ":lume_render_src_plugin",
493  ]
494
495  part_name = "graphic_3d"
496  subsystem_name = "graphic"
497}
498