# Copyright (c) 2021-2024 Huawei Device Co., Ltd. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import("//build/ohos.gni") import("//foundation/graphic/graphic_2d/graphic_config.gni") import("$graphic_2d_root/rosen/modules/render_service_base/config.gni") config("render_service_link_config") { if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) { ldflags = [ "-Wl,--lto-O2", "-Wl,-mllvm", "-Wl,-wholeprogramdevirt-check=fallback", "-Wl,-Bsymbolic", ] if (graphic_2d_feature_enable_pgo && enable_enhanced_opt) { ldflags += [ "-Wl,--aarch64-inline-plt" ] } } } ## Build librender_service.so ohos_shared_library("librender_service") { branch_protector_ret = "pac_ret" sanitize = { cfi = true cfi_cross_dso = true cfi_vcall_icall_only = true debug = false } if (enhanced_opt) { configs = [ ":render_service_link_config" ] } defines = [] if (graphic_2d_feature_color_gamut_enable) { defines += [ "PADDING_HEIGHT_32" ] } else { defines += [] } if (use_musl) { defines += [ "FRAME_AWARE_TRACE" ] } if (use_video_processing_engine) { defines += [ "USE_VIDEO_PROCESSING_ENGINE" ] } defines += gpu_defines cflags = [ "-DIMAGE_COLORSPACE_FLAG" ] if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) { defines += [ "IS_OHOS" ] if (!use_libfuzzer) { cflags += [ "-flto=thin" ] } if (enhanced_opt) { if (!use_libfuzzer) { cflags += [ "-fwhole-program-vtables" ] } if (graphic_2d_feature_enable_pgo && graphic_2d_feature_product != "default") { cflags += [ "-fprofile-use=" + rebase_path( "${graphic_2d_feature_pgo_path}/librender_service.profdata", root_build_dir), "-Wno-error=backend-plugin", "-Wno-profile-instr-out-of-date", "-Wno-profile-instr-unprofiled", ] } if (graphic_2d_feature_product == "pc" && target_cpu == "arm64") { cflags += [ "-moutline-atomics" ] } } } sources = [ "core/memory/rs_memory_manager.cpp", "core/pipeline/round_corner_display/rs_rcd_render_listener.cpp", "core/pipeline/round_corner_display/rs_rcd_render_manager.cpp", "core/pipeline/round_corner_display/rs_rcd_render_visitor.cpp", "core/pipeline/round_corner_display/rs_rcd_surface_render_node.cpp", "core/pipeline/round_corner_display/rs_round_corner_config.cpp", "core/pipeline/round_corner_display/rs_round_corner_display.cpp", "core/pipeline/round_corner_display/rs_round_corner_display_manager.cpp", "core/pipeline/rs_base_render_engine.cpp", "core/pipeline/rs_base_render_util.cpp", "core/pipeline/rs_composer_adapter.cpp", "core/pipeline/rs_divided_render_util.cpp", "core/pipeline/rs_draw_frame.cpp", "core/pipeline/rs_hardware_thread.cpp", "core/pipeline/rs_main_thread.cpp", "core/pipeline/rs_physical_screen_processor.cpp", "core/pipeline/rs_pointer_window_manager.cpp", "core/pipeline/rs_processor.cpp", "core/pipeline/rs_processor_factory.cpp", "core/pipeline/rs_realtime_refresh_rate_manager.cpp", "core/pipeline/rs_render_engine.cpp", "core/pipeline/rs_render_service.cpp", "core/pipeline/rs_render_service_connection.cpp", "core/pipeline/rs_render_service_listener.cpp", "core/pipeline/rs_render_service_visitor.cpp", "core/pipeline/rs_surface_capture_task.cpp", "core/pipeline/rs_surface_capture_task_parallel.cpp", "core/pipeline/rs_ui_capture_task_parallel.cpp", "core/pipeline/rs_uifirst_manager.cpp", "core/pipeline/rs_uni_hwc_prevalidate_util.cpp", "core/pipeline/rs_uni_render_composer_adapter.cpp", "core/pipeline/rs_uni_render_engine.cpp", "core/pipeline/rs_uni_render_listener.cpp", "core/pipeline/rs_uni_render_processor.cpp", "core/pipeline/rs_uni_render_thread.cpp", "core/pipeline/rs_uni_render_util.cpp", "core/pipeline/rs_uni_render_virtual_processor.cpp", "core/pipeline/rs_uni_render_visitor.cpp", "core/pipeline/rs_uni_ui_capture.cpp", "core/pipeline/rs_unmarshal_thread.cpp", "core/pipeline/rs_vblank_idle_corrector.cpp", "core/pipeline/rs_virtual_screen_processor.cpp", "core/screen_manager/rs_screen.cpp", "core/screen_manager/rs_screen_manager.cpp", "core/system/rs_system_parameters.cpp", "core/transaction/rs_irender_service_connection_ipc_interface_code_access_verifier.cpp", "core/transaction/rs_irender_service_ipc_interface_code_access_verifier.cpp", "core/transaction/rs_render_service_connection_stub.cpp", "core/transaction/rs_render_service_security_utils.cpp", "core/transaction/rs_render_service_stub.cpp", ] #drawable sources += [ "core/drawable/rs_canvas_drawing_render_node_drawable.cpp", "core/drawable/rs_canvas_render_node_drawable.cpp", "core/drawable/rs_display_render_node_drawable.cpp", "core/drawable/rs_dma_buffer_surface_render_node_drawable.cpp", "core/drawable/rs_effect_render_node_drawable.cpp", "core/drawable/rs_render_node_drawable.cpp", "core/drawable/rs_render_node_drawable_autocache.cpp", "core/drawable/rs_root_render_node_drawable.cpp", "core/drawable/rs_surface_render_node_drawable.cpp", "core/drawable/rs_ui_first_surface_render_node_drawable.cpp", ] #dfx sources += [ "core/drawable/dfx/rs_dirty_rects_dfx.cpp", "core/drawable/dfx/rs_skp_capture_dfx.cpp", ] if (defined(input_ext_feature_magiccursor) && input_ext_feature_magiccursor) { sources += [ "core/pipeline/pointer_render/rs_pointer_render_manager.cpp" ] } if (rs_enable_eglimage) { sources += [ "core/pipeline/rs_egl_image_manager.cpp" ] } if (graphic_2d_feature_enable_vulkan) { sources += [ "core/pipeline/rs_vk_image_manager.cpp" ] } if (rs_enable_parallel_render && rs_enable_gpu) { sources += [ "core/pipeline/parallel_render/rs_render_task.cpp", "core/pipeline/parallel_render/rs_sub_thread.cpp", "core/pipeline/parallel_render/rs_sub_thread_manager.cpp", "core/pipeline/parallel_render/rs_ui_first_render_listener.cpp", ] } if (use_memmgr_plugin || use_memmgr) { sources += [ "core/memory/rs_app_state_listener.cpp" ] } if (tp_feature_enable) { sources += [ "core/touch_screen/touch_screen.cpp" ] } include_dirs = [ "core", "core/round_corner_display", "$graphic_2d_root/rosen/include", "$graphic_2d_root/rosen/modules/2d_graphics", "$graphic_2d_root/rosen/modules/composer/vsync/include", "$graphic_2d_root/rosen/modules/composer/hdi_backend/include", "$graphic_2d_root/rosen/modules/frame_report/include", "$graphic_2d_root/rosen/modules/render_frame_trace/include", "$graphic_2d_root/rosen/modules/render_service_base/include", "$graphic_2d_root/rosen/modules/render_service_base/src", "$graphic_2d_root/rosen/modules/utils", "$graphic_2d_root/utils/log", "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/config", "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/frame_rate_manager", "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/hgm_screen_manager", "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/utils", "$graphic_2d_root/rosen/modules/hyper_graphic_manager/frame_rate_vote", "$graphic_2d_root/rosen/modules/create_pixelmap_surface/include", "$graphic_2d_root/rosen/modules/graphics_effect/include", ] if (use_video_processing_engine) { include_dirs += [ "$video_processing_engine_root/interfaces/inner_api" ] } deps = [ "$graphic_2d_root/rosen/modules/composer:libcomposer", "$graphic_2d_root/rosen/modules/create_pixelmap_surface:create_pixelmap_surface", "$graphic_2d_root/rosen/modules/graphics_effect:libgraphics_effect", "$graphic_2d_root/rosen/modules/hyper_graphic_manager:libhyper_graphic_manager", "$graphic_2d_root/rosen/modules/render_frame_trace:render_frame_trace", "$graphic_2d_root/rosen/modules/render_service_base:librender_service_base", ] if (graphic_2d_feature_enable_chipset_vsync) { defines += [ "RS_ENABLE_CHIPSET_VSYNC" ] deps += [ "$graphic_2d_ext_root/chipset_vsync:libchipset_vsync" ] include_dirs += [ "$graphic_2d_ext_root/chipset_vsync/include" ] } if (rosen_is_ohos) { sources += [ "$rosen_root/modules/frame_report/src/rs_frame_report.cpp" ] } else if (!is_arkui_x) { sources += [ "$rosen_root/modules/frame_report/src/mingw/rs_frame_report.cpp" ] } #profiler if (rosen_is_ohos && graphic_2d_feature_rs_enable_profiler && player_framework_enable) { defines += [ "RS_PROFILER_ENABLED" ] sources += [ "$rosen_root/modules/render_service_profiler/rs_profiler.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_beta_recorder.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_capture_recorder.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_capturedata.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_file.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_network.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_packet.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_socket.cpp", "$rosen_root/modules/render_service_profiler/rs_profiler_telemetry.cpp", ] } include_dirs += [ "$graphic_2d_root/rosen/modules/render_service_profiler" ] public_external_deps = [ "skia:skia_canvaskit" ] if (defined(use_new_render_context) && use_new_render_context) { include_dirs += [ "$graphic_2d_root/rosen/modules/2d_graphics:2d_graphics" ] defines += [ "NEW_RENDER_CONTEXT" ] } if (defined(rs_enable_parallel_upload) && rs_enable_parallel_upload) { sources += [ "core/pipeline/parallel_render/resource/rs_upload_resource_thread.cpp", ] include_dirs += [ "$graphic_2d_root/rosen/modules/render_service/core/pipeline/parallel_render/resource" ] if (defined(use_rosen_drawing) && use_rosen_drawing) { sources += [ "core/pipeline/parallel_render/resource/rs_resource_helper_drawing.cpp", ] } else { sources += [ "core/pipeline/parallel_render/resource/rs_resource_helper_skia.cpp", ] } } if (rs_enable_gpu) { public_deps = [ "$graphic_2d_root:libvulkan" ] } if (defined(use_rosen_drawing) && use_rosen_drawing) { defines += [ "USE_ROSEN_DRAWING" ] if (rs_enable_gpu) { defines += [ "RS_ENABLE_GPU" ] } deps += [ "$rosen_root/modules/2d_graphics:2d_graphics" ] } public_external_deps += [ "libxml2:libxml2" ] external_deps = [ "ability_runtime:app_manager", "cJSON:cjson", "c_utils:utils", "drivers_interface_display:libdisplay_commontype_proxy_1.0", "eventhandler:libeventhandler", "ffrt:libffrt", "graphic_surface:frame_report", "graphic_surface:surface", "hicollie:libhicollie", "hilog:libhilog", "hisysevent:libhisysevent", "hitrace:hitrace_meter", "init:libbegetutil", "ipc:ipc_core", "libpng:libpng", "qos_manager:qos", "safwk:system_ability_fwk", "samgr:samgr_proxy", "window_manager:libwsutils", ] if (use_video_processing_engine) { external_deps += [ "video_processing_engine:videoprocessingengine" ] } if (defined(ddgr_ext_configs)) { libs = ddgr_ext_configs.ddgr_libs defines += ddgr_ext_configs.ddgr_defines sources += ddgr_ext_configs.libddgr_ext_adaptor_sources include_dirs += ddgr_ext_configs.libddgr_ext_adaptor_include_dirs } if (rosen_is_ohos) { external_deps += [ "image_framework:image_native" ] } if (defined(global_parts_info) && defined(global_parts_info.resourceschedule_soc_perf)) { external_deps += [ "soc_perf:socperf_client" ] defines += [ "SOC_PERF_ENABLE" ] } if (defined(global_parts_info) && defined(global_parts_info.resourceschedule_resource_schedule_service)) { external_deps += [ "resource_schedule_service:ressched_client" ] defines += [ "RES_SCHED_ENABLE" ] } if (defined(global_parts_info) && defined(global_parts_info.sensors_sensor)) { external_deps += [ "sensor:sensor_interface_native" ] defines += [ "RS_SUBSCRIBE_SENSOR_ENABLE" ] } if (accessibility_enable) { external_deps += [ "accessibility:accessibilityconfig" ] external_deps += [ "accessibility:accessibility_common" ] defines += accessibility_defines } if (use_memmgr_plugin) { external_deps += [ "memmgr:memmgrclient" ] } else if (use_memmgr) { external_deps += [ "memmgr:memmgrclient" ] } if (rosen_is_ohos && defined(enable_ipc_security) && enable_ipc_security) { defines += [ "ENABLE_IPC_SECURITY" ] external_deps += [ "access_token:libaccesstoken_sdk", "access_token:libtokenid_sdk", ] } if (rosen_is_ohos && defined(enable_ipc_security_access_counter) && enable_ipc_security_access_counter) { defines += [ "ENABLE_IPC_SECURITY_ACCESS_COUNTER" ] } if (tp_feature_enable) { defines += tp_defines } part_name = "graphic_2d" subsystem_name = "graphic" } ## Build render_service.bin ohos_executable("render_service") { branch_protector_ret = "pac_ret" sanitize = { cfi = true cfi_cross_dso = true cfi_vcall_icall_only = true debug = false if (rosen_is_ohos) { boundary_sanitize = true integer_overflow = true ubsan = true } } sources = [ "core/main.cpp" ] include_dirs = [ "core", "$graphic_2d_root/interfaces/inner_api/common", "$graphic_2d_root/utils/color_manager/export", ] deps = [ ":librender_service", "$graphic_2d_root/rosen/modules/composer:libcomposer", "$graphic_2d_root/rosen/modules/hyper_graphic_manager:libhyper_graphic_manager", "$graphic_2d_root/rosen/modules/render_service_base:librender_service_base", ] external_deps = [ "ability_runtime:app_manager", "c_utils:utils", "drivers_interface_display:libdisplay_commontype_proxy_1.0", "hilog:libhilog", "ipc:ipc_core", ] if (defined(global_parts_info) && defined(global_parts_info.sensors_sensor)) { external_deps += [ "sensor:sensor_interface_native" ] } part_name = "graphic_2d" subsystem_name = "graphic" }