1# Copyright (c) 2021-2023 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("$graphic_2d_root/rosen/modules/render_service_base/config.gni") 17 18config("render_service_link_config") { 19 if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) { 20 ldflags = [ 21 "-Wl,--lto-O2", 22 "-Wl,-mllvm", 23 "-Wl,-wholeprogramdevirt-check=fallback", 24 "-Wl,-Bsymbolic", 25 ] 26 } 27} 28 29## Build librender_service.so 30ohos_shared_library("librender_service") { 31 branch_protector_ret = "pac_ret" 32 sanitize = { 33 cfi = true 34 cfi_cross_dso = true 35 debug = false 36 } 37 if (enhanced_opt) { 38 configs = [ ":render_service_link_config" ] 39 } 40 defines = [] 41 if (graphic_2d_feature_color_gamut_enable) { 42 defines += [ "PADDING_HEIGHT_32" ] 43 } else { 44 defines += [] 45 } 46 if (use_musl) { 47 defines += [ "FRAME_AWARE_TRACE" ] 48 } 49 if (use_video_processing_engine) { 50 defines += [ "USE_VIDEO_PROCESSING_ENGINE" ] 51 } 52 defines += gpu_defines 53 if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) { 54 defines += [ "IS_OHOS" ] 55 cflags = [ "-flto=thin" ] 56 if (enhanced_opt) { 57 cflags += [ "-fwhole-program-vtables" ] 58 if (graphic_2d_feature_enable_pgo && 59 graphic_2d_feature_product != "default") { 60 cflags += [ 61 "-fprofile-use=" + rebase_path( 62 "${graphic_2d_feature_pgo_path}/librender_service.profdata", 63 root_build_dir), 64 "-Wno-error=backend-plugin", 65 "-Wno-profile-instr-out-of-date", 66 "-Wno-profile-instr-unprofiled", 67 ] 68 } 69 if (graphic_2d_feature_product == "pc" && target_cpu == "arm64") { 70 cflags += [ "-moutline-atomics" ] 71 } 72 } 73 } 74 75 sources = [ 76 "core/memory/rs_memory_manager.cpp", 77 "core/pipeline/round_corner_display/rs_rcd_render_listener.cpp", 78 "core/pipeline/round_corner_display/rs_rcd_render_manager.cpp", 79 "core/pipeline/round_corner_display/rs_rcd_render_visitor.cpp", 80 "core/pipeline/round_corner_display/rs_rcd_surface_render_node.cpp", 81 "core/pipeline/round_corner_display/rs_round_corner_config.cpp", 82 "core/pipeline/round_corner_display/rs_round_corner_display.cpp", 83 "core/pipeline/round_corner_display/rs_sub_thread_rcd.cpp", 84 "core/pipeline/rs_base_render_engine.cpp", 85 "core/pipeline/rs_base_render_util.cpp", 86 "core/pipeline/rs_composer_adapter.cpp", 87 "core/pipeline/rs_divided_render_util.cpp", 88 "core/pipeline/rs_hardware_thread.cpp", 89 "core/pipeline/rs_main_thread.cpp", 90 "core/pipeline/rs_physical_screen_processor.cpp", 91 "core/pipeline/rs_processor.cpp", 92 "core/pipeline/rs_processor_factory.cpp", 93 "core/pipeline/rs_qos_thread.cpp", 94 "core/pipeline/rs_realtime_refresh_rate_manager.cpp", 95 "core/pipeline/rs_render_engine.cpp", 96 "core/pipeline/rs_render_service.cpp", 97 "core/pipeline/rs_render_service_connection.cpp", 98 "core/pipeline/rs_render_service_listener.cpp", 99 "core/pipeline/rs_render_service_visitor.cpp", 100 "core/pipeline/rs_surface_capture_task.cpp", 101 "core/pipeline/rs_uni_render_composer_adapter.cpp", 102 "core/pipeline/rs_uni_render_engine.cpp", 103 "core/pipeline/rs_uni_render_listener.cpp", 104 "core/pipeline/rs_uni_render_processor.cpp", 105 "core/pipeline/rs_uni_render_util.cpp", 106 "core/pipeline/rs_uni_render_virtual_processor.cpp", 107 "core/pipeline/rs_uni_render_visitor.cpp", 108 "core/pipeline/rs_uni_ui_capture.cpp", 109 "core/pipeline/rs_unmarshal_thread.cpp", 110 "core/pipeline/rs_virtual_screen_processor.cpp", 111 "core/screen_manager/rs_screen.cpp", 112 "core/screen_manager/rs_screen_manager.cpp", 113 "core/system/rs_system_parameters.cpp", 114 "core/transaction/rs_irender_service_connection_ipc_interface_code_access_verifier.cpp", 115 "core/transaction/rs_irender_service_ipc_interface_code_access_verifier.cpp", 116 "core/transaction/rs_render_service_connection_stub.cpp", 117 "core/transaction/rs_render_service_security_utils.cpp", 118 "core/transaction/rs_render_service_stub.cpp", 119 ] 120 121 if (rs_enable_driven_render) { 122 sources += [ 123 "core/pipeline/driven_render/rs_driven_render_ext.cpp", 124 "core/pipeline/driven_render/rs_driven_render_listener.cpp", 125 "core/pipeline/driven_render/rs_driven_render_manager.cpp", 126 "core/pipeline/driven_render/rs_driven_render_visitor.cpp", 127 "core/pipeline/driven_render/rs_driven_surface_render_node.cpp", 128 ] 129 } 130 131 if (rs_enable_eglimage) { 132 sources += [ "core/pipeline/rs_egl_image_manager.cpp" ] 133 } 134 135 if (graphic_2d_feature_enable_vulkan) { 136 sources += [ "core/pipeline/rs_vk_image_manager.cpp" ] 137 } 138 139 if (rs_enable_parallel_render && rs_enable_gpu) { 140 sources += [ 141 "core/pipeline/parallel_render/rs_filter_sub_thread.cpp", 142 "core/pipeline/parallel_render/rs_node_cost_manager.cpp", 143 "core/pipeline/parallel_render/rs_parallel_hardware_composer.cpp", 144 "core/pipeline/parallel_render/rs_parallel_pack_visitor.cpp", 145 "core/pipeline/parallel_render/rs_parallel_render_manager.cpp", 146 "core/pipeline/parallel_render/rs_parallel_sub_thread.cpp", 147 "core/pipeline/parallel_render/rs_parallel_task_manager.cpp", 148 "core/pipeline/parallel_render/rs_render_task.cpp", 149 "core/pipeline/parallel_render/rs_sub_thread.cpp", 150 "core/pipeline/parallel_render/rs_sub_thread_manager.cpp", 151 ] 152 } 153 154 if (use_memmgr_plugin || use_memmgr) { 155 sources += [ "core/memory/rs_app_state_listener.cpp" ] 156 } 157 158 if (tp_feature_enable) { 159 sources += [ "core/touch_screen/touch_screen.cpp" ] 160 } 161 162 include_dirs = [ 163 "core", 164 "core/round_corner_display", 165 "$graphic_2d_root/frameworks/surface/include", 166 "$graphic_2d_root/interfaces/inner_api/surface", 167 "$graphic_2d_root/rosen/include", 168 "$graphic_2d_root/rosen/modules/2d_graphics", 169 "$graphic_2d_root/rosen/modules/composer/vsync/include", 170 "$graphic_2d_root/rosen/modules/composer/hdi_backend/include", 171 "$graphic_2d_root/rosen/modules/render_frame_trace/include", 172 "$graphic_2d_root/rosen/modules/render_service_base/include", 173 "$graphic_2d_root/rosen/modules/render_service_base/src", 174 "$graphic_2d_root/rosen/modules/utils", 175 "//commonlibrary/c_utils/base/include", 176 "//utils/system/safwk/native/include", 177 "$graphic_2d_root/utils/log", 178 "$graphic_2d_root/utils/frame_report", 179 "//foundation/barrierfree/accessibility/interfaces/innerkits/acfwk/include", 180 "$memmgr_root/interface/innerkits/include", 181 "$memmgr_root/services/memmgrservice/include/memory_level_manager", 182 "$memmgr_plugin_root/interface/innerkits/include", 183 "$memmgr_plugin_root/services/memmgrservice/include/memory_level_manager", 184 "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/config", 185 "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/frame_rate_manager", 186 "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/hgm_screen_manager", 187 "$graphic_2d_root/rosen/modules/hyper_graphic_manager/core/utils", 188 ] 189 if (use_video_processing_engine) { 190 include_dirs += [ "$video_processing_engine_root/interfaces/inner_api" ] 191 } 192 193 deps = [ 194 "$graphic_2d_root:libsurface", 195 "$graphic_2d_root/rosen/modules/composer:libcomposer", 196 "$graphic_2d_root/rosen/modules/hyper_graphic_manager:libhyper_graphic_manager", 197 "$graphic_2d_root/rosen/modules/render_frame_trace:render_frame_trace", 198 "$graphic_2d_root/rosen/modules/render_service_base:librender_service_base", 199 "$graphic_2d_root/utils:frame_report", 200 ] 201 202 if (rs_enable_recording_dcl && defined(use_rosen_drawing) && 203 use_rosen_drawing) { 204 deps += 205 [ "$graphic_2d_root/rosen/samples/2d_graphics:drawing_engine_sample" ] 206 } 207 208 public_deps = [ 209 "//third_party/libpng:libpng", 210 "//third_party/libxml2:libxml2", 211 ] 212 213 public_deps += [ "//third_party/skia:skia_ohos" ] 214 215 if (defined(use_new_render_context) && use_new_render_context) { 216 include_dirs += [ "$graphic_2d_root/rosen/modules/2d_graphics:2d_graphics" ] 217 defines += [ "NEW_RENDER_CONTEXT" ] 218 } 219 220 if (defined(rs_enable_parallel_upload) && rs_enable_parallel_upload) { 221 sources += [ 222 "core/pipeline/parallel_render/resource/rs_upload_resource_thread.cpp", 223 ] 224 include_dirs += [ "$graphic_2d_root/rosen/modules/render_service/core/pipeline/parallel_render/resource" ] 225 if (defined(use_rosen_drawing) && use_rosen_drawing) { 226 sources += [ 227 "core/pipeline/parallel_render/resource/rs_resource_helper_drawing.cpp", 228 ] 229 } else { 230 sources += [ 231 "core/pipeline/parallel_render/resource/rs_resource_helper_skia.cpp", 232 ] 233 } 234 } 235 236 if (rs_enable_gpu) { 237 public_deps += [ "$graphic_2d_root:libvulkan" ] 238 } 239 240 if (defined(use_rosen_drawing) && use_rosen_drawing) { 241 defines += [ "USE_ROSEN_DRAWING" ] 242 if (ace_enable_gpu) { 243 defines += [ "ACE_ENABLE_GPU" ] 244 } 245 deps += [ "$rosen_root/modules/2d_graphics:2d_graphics" ] 246 } 247 248 external_deps = [ 249 "c_utils:utils", 250 "drivers_interface_display:display_commontype_idl_headers", 251 "eventhandler:libeventhandler", 252 "hicollie:libhicollie", 253 "hilog:libhilog", 254 "hisysevent:libhisysevent", 255 "hitrace:hitrace_meter", 256 "init:libbegetutil", 257 "ipc:ipc_core", 258 "safwk:system_ability_fwk", 259 "samgr:samgr_proxy", 260 "window_manager:libwsutils", 261 ] 262 if (use_video_processing_engine) { 263 external_deps += [ "video_processing_engine:videoprocessingengine" ] 264 } 265 266 if (defined(ddgr_ext_configs)) { 267 libs = ddgr_ext_configs.ddgr_libs 268 defines += ddgr_ext_configs.ddgr_defines 269 sources += ddgr_ext_configs.libddgr_ext_adaptor_sources 270 include_dirs += ddgr_ext_configs.libddgr_ext_adaptor_include_dirs 271 } 272 273 if (rosen_is_ohos) { 274 external_deps += [ "image_framework:image_native" ] 275 } 276 277 if (defined(global_parts_info) && 278 defined(global_parts_info.resourceschedule_soc_perf)) { 279 external_deps += [ "soc_perf:socperf_client" ] 280 defines += [ "SOC_PERF_ENABLE" ] 281 } 282 283 if (defined(global_parts_info) && 284 defined(global_parts_info.resourceschedule_resource_schedule_service)) { 285 external_deps += [ "resource_schedule_service:ressched_client" ] 286 defines += [ "RES_SCHED_ENABLE" ] 287 } 288 289 if (defined(global_parts_info) && defined(global_parts_info.sensors_sensor)) { 290 external_deps += [ "sensor:sensor_interface_native" ] 291 defines += [ "RS_SUBSCRIBE_SENSOR_ENABLE" ] 292 } 293 294 if (accessibility_enable) { 295 external_deps += [ "accessibility:accessibilityconfig" ] 296 defines += accessibility_defines 297 } 298 299 if (use_memmgr_plugin) { 300 external_deps += [ "memmgr_plugin:memmgrclient" ] 301 } else if (use_memmgr) { 302 external_deps += [ "memmgr:memmgrclient" ] 303 } 304 305 if (rosen_is_ohos && defined(enable_ipc_security) && enable_ipc_security) { 306 defines += [ "ENABLE_IPC_SECURITY" ] 307 external_deps += [ 308 "access_token:libaccesstoken_sdk", 309 "access_token:libtokenid_sdk", 310 ] 311 } 312 313 if (rosen_is_ohos && defined(enable_ipc_security_access_counter) && 314 enable_ipc_security_access_counter) { 315 defines += [ "ENABLE_IPC_SECURITY_ACCESS_COUNTER" ] 316 } 317 318 if (tp_feature_enable) { 319 defines += tp_defines 320 } 321 322 part_name = "graphic_2d" 323 subsystem_name = "graphic" 324} 325 326## Build render_service.bin 327ohos_executable("render_service") { 328 branch_protector_ret = "pac_ret" 329 sanitize = { 330 cfi = true 331 cfi_cross_dso = true 332 debug = false 333 } 334 sources = [ "core/main.cpp" ] 335 336 include_dirs = [ 337 "core", 338 "//commonlibrary/c_utils/base/include", 339 "$graphic_2d_root/frameworks/surface/include", 340 "$graphic_2d_root/utils/color_manager/export", 341 ] 342 343 deps = [ 344 ":librender_service", 345 "$graphic_2d_root:libsurface", 346 "$graphic_2d_root/rosen/modules/composer:libcomposer", 347 "$graphic_2d_root/rosen/modules/hyper_graphic_manager:libhyper_graphic_manager", 348 "$graphic_2d_root/rosen/modules/render_service_base:librender_service_base", 349 ] 350 351 external_deps = [ 352 "c_utils:utils", 353 "drivers_interface_display:display_commontype_idl_headers", 354 "hilog:libhilog", 355 "ipc:ipc_core", 356 ] 357 358 if (defined(global_parts_info) && defined(global_parts_info.sensors_sensor)) { 359 external_deps += [ "sensor:sensor_interface_native" ] 360 } 361 362 part_name = "graphic_2d" 363 subsystem_name = "graphic" 364} 365