1# Copyright (c) 2022-2025 Huawei Device Co., Ltd.. All rights reserved. 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/ace_platforms.gni") 16import("//foundation/graphic/graphic_2d/frameworks/text/config.gni") 17import("//foundation/graphic/graphic_2d/graphic_config.gni") 18 19drawing_root = "$rosen_root/modules/2d_graphics" 20drawing_core_include_dir = "$rosen_root/modules/2d_graphics/include" 21drawing_core_src_dir = "$rosen_root/modules/2d_graphics/src/drawing" 22src_dir = "$rosen_root/modules/2d_graphics/src" 23platform_dir = "$rosen_root/modules/platform" 24 25if (ohos_indep_compiler_enable) { 26 drawing_indep_build_path = [ "//binarys/third_party/icu/innerapis/shared_icuuc/includes/common" ] 27} 28 29config("2d_graphics_config") { 30 include_dirs = [ 31 "$drawing_core_include_dir", 32 "$src_dir", 33 "$drawing_core_src_dir", 34 "$drawing_core_src_dir/engine_adapter", 35 "$platform_dir/image_native", 36 "$rosen_root/modules/render_service_base/include", 37 ] 38} 39 40config("export_config") { 41 include_dirs = [ 42 "$drawing_core_include_dir", 43 "$src_dir", 44 "$drawing_core_src_dir", 45 "$drawing_core_src_dir/engine_adapter", 46 "$graphic_2d_root/utils/color_manager/export", 47 "$rosen_root/modules/render_service_base/include", 48 "$rosen_text_root/interface/export", 49 "$rosen_text_root/interface/export/rosen_text", 50 "$rosen_text_root/service", 51 ] 52 53 if (rs_enable_gpu) { 54 defines = [ "RS_ENABLE_GPU" ] 55 } 56} 57 58if (enable_text_gine) { 59 defines = [] 60} 61 62template("graphics2d_source_set") { 63 forward_variables_from(invoker, "*") 64 65 ohos_source_set(target_name) { 66 defines += invoker.defines 67 cflags_cc += invoker.cflags_cc 68 if (use_skia_txt) { 69 defines += [ "USE_SKIA_TXT" ] 70 } 71 72 public_deps = [] 73 external_deps = [ "napi:ace_napi" ] 74 public_external_deps = [] 75 sources = [ 76 "$drawing_core_src_dir/draw/OpListHandle.cpp", 77 "$drawing_core_src_dir/draw/brush.cpp", 78 "$drawing_core_src_dir/config/DrawingConfig.cpp", 79 "$drawing_core_src_dir/draw/canvas.cpp", 80 "$drawing_core_src_dir/draw/color.cpp", 81 "$drawing_core_src_dir/draw/core_canvas.cpp", 82 "$drawing_core_src_dir/draw/paint.cpp", 83 "$drawing_core_src_dir/draw/path.cpp", 84 "$drawing_core_src_dir/draw/path_iterator.cpp", 85 "$drawing_core_src_dir/draw/pen.cpp", 86 "$drawing_core_src_dir/draw/surface.cpp", 87 "$drawing_core_src_dir/effect/blender.cpp", 88 "$drawing_core_src_dir/effect/blur_draw_looper.cpp", 89 "$drawing_core_src_dir/effect/color_filter.cpp", 90 "$drawing_core_src_dir/effect/color_matrix.cpp", 91 "$drawing_core_src_dir/effect/color_space.cpp", 92 "$drawing_core_src_dir/effect/filter.cpp", 93 "$drawing_core_src_dir/effect/image_filter.cpp", 94 "$drawing_core_src_dir/effect/mask_filter.cpp", 95 "$drawing_core_src_dir/effect/path_effect.cpp", 96 "$drawing_core_src_dir/effect/runtime_blender_builder.cpp", 97 "$drawing_core_src_dir/effect/runtime_effect.cpp", 98 "$drawing_core_src_dir/effect/runtime_shader_builder.cpp", 99 "$drawing_core_src_dir/effect/blend_shader_obj.cpp", 100 "$drawing_core_src_dir/effect/blur_image_filter_obj.cpp", 101 "$drawing_core_src_dir/effect/color_filter_image_filter_obj.cpp", 102 "$drawing_core_src_dir/effect/image_filter_lazy.cpp", 103 "$drawing_core_src_dir/effect/offset_image_filter_obj.cpp", 104 "$drawing_core_src_dir/effect/shader_effect.cpp", 105 "$drawing_core_src_dir/effect/shader_effect_lazy.cpp", 106 "$drawing_core_src_dir/effect/shader_image_filter_obj.cpp", 107 "$drawing_core_src_dir/engine_adapter/impl_factory.cpp", 108 "$drawing_core_src_dir/engine_adapter/skia_adapter/rs_skia_memory_tracer.cpp", 109 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_bitmap.cpp", 110 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_blender.cpp", 111 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_camera.cpp", 112 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_canvas.cpp", 113 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_canvas_autocache.cpp", 114 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_color_filter.cpp", 115 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_color_space.cpp", 116 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_data.cpp", 117 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_document.cpp", 118 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_file_w_stream.cpp", 119 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_font.cpp", 120 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_font_mgr.cpp", 121 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_font_style_set.cpp", 122 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_graphics.cpp", 123 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_helper.cpp", 124 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_hm_symbol.cpp", 125 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_image.cpp", 126 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_image_filter.cpp", 127 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_impl_factory.cpp", 128 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_mask_filter.cpp", 129 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_matrix.cpp", 130 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_matrix44.cpp", 131 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_memory_stream.cpp", 132 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_paint.cpp", 133 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_path.cpp", 134 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_path_effect.cpp", 135 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_path_iterator.cpp", 136 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_picture.cpp", 137 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_picture_recorder.cpp", 138 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_pixmap.cpp", 139 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_region.cpp", 140 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_runtime_blender_builder.cpp", 141 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_runtime_effect.cpp", 142 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_runtime_shader_builder.cpp", 143 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_serial_procs.cpp", 144 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_shader_effect.cpp", 145 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_sharing_serial_context.cpp", 146 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_static_factory.cpp", 147 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_surface.cpp", 148 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_text_blob.cpp", 149 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_text_blob_builder.cpp", 150 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_texture_info.cpp", 151 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_trace_memory_dump.cpp", 152 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_typeface.cpp", 153 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_utils.cpp", 154 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_vertices.cpp", 155 "$drawing_core_src_dir/engine_adapter/static_factory.cpp", 156 "$drawing_core_src_dir/engine_adapter/utils/utils_path.cpp", 157 "$drawing_core_src_dir/image/bitmap.cpp", 158 "$drawing_core_src_dir/image/image.cpp", 159 "$drawing_core_src_dir/image/picture.cpp", 160 "$drawing_core_src_dir/image/pixmap.cpp", 161 "$drawing_core_src_dir/image/trace_memory_dump.cpp", 162 "$drawing_core_src_dir/recording/cmd_list.cpp", 163 "$drawing_core_src_dir/recording/cmd_list_helper.cpp", 164 "$drawing_core_src_dir/recording/draw_cmd.cpp", 165 "$drawing_core_src_dir/recording/draw_cmd_list.cpp", 166 "$drawing_core_src_dir/recording/mask_cmd_list.cpp", 167 "$drawing_core_src_dir/recording/mem_allocator.cpp", 168 "$drawing_core_src_dir/recording/record_cmd.cpp", 169 "$drawing_core_src_dir/recording/recording_canvas.cpp", 170 "$drawing_core_src_dir/text/font.cpp", 171 "$drawing_core_src_dir/text/font_harfbuzz.cpp", 172 "$drawing_core_src_dir/text/font_mgr.cpp", 173 "$drawing_core_src_dir/text/font_style_set.cpp", 174 "$drawing_core_src_dir/text/hm_symbol.cpp", 175 "$drawing_core_src_dir/text/text.cpp", 176 "$drawing_core_src_dir/text/text_blob.cpp", 177 "$drawing_core_src_dir/text/text_blob_builder.cpp", 178 "$drawing_core_src_dir/text/typeface.cpp", 179 "$drawing_core_src_dir/utils/camera3d.cpp", 180 "$drawing_core_src_dir/utils/colorspace_convertor.cpp", 181 "$drawing_core_src_dir/utils/data.cpp", 182 "$drawing_core_src_dir/utils/document.cpp", 183 "$drawing_core_src_dir/utils/file_w_stream.cpp", 184 "$drawing_core_src_dir/utils/matrix.cpp", 185 "$drawing_core_src_dir/utils/matrix44.cpp", 186 "$drawing_core_src_dir/utils/memory_stream.cpp", 187 "$drawing_core_src_dir/utils/object_mgr.cpp", 188 "$drawing_core_src_dir/utils/perfmonitor_reporter.cpp", 189 "$drawing_core_src_dir/utils/performanceCaculate.cpp", 190 "$drawing_core_src_dir/utils/picture_recorder.cpp", 191 "$drawing_core_src_dir/utils/region.cpp", 192 "$drawing_core_src_dir/utils/resource_holder.cpp", 193 "$drawing_core_src_dir/utils/round_rect.cpp", 194 "$drawing_core_src_dir/utils/serial_procs.cpp", 195 "$drawing_core_src_dir/utils/sharing_serial_context.cpp", 196 "$drawing_core_src_dir/utils/string_util.cpp", 197 "$drawing_core_src_dir/utils/vertices.cpp", 198 "$drawing_core_src_dir/utils/canvas_utils.cpp", 199 "$drawing_core_src_dir/utils/object_helper.cpp", 200 ] 201 202 if (platform == "ohos" || platform == "ohos_ng") { 203 sanitize = { 204 boundary_sanitize = true 205 integer_overflow = true 206 ubsan = true 207 cfi = true 208 cfi_cross_dso = true 209 cfi_no_nvcall = true 210 cfi_vcall_icall_only = true 211 debug = false 212 } 213 external_deps += [ "init:libbegetutil" ] 214 sources += [ "$drawing_core_src_dir/utils/system_properties.cpp" ] 215 if (defined( 216 graphic_2d_platform_configs.system_graphic_properties_sources)) { 217 sources += graphic_2d_platform_configs.system_graphic_properties_sources 218 } else { 219 sources += 220 [ "$drawing_core_src_dir/utils/system_graphic_properties.cpp" ] 221 } 222 } 223 if (is_emulator) { 224 defines += [ "ROSEN_EMULATOR" ] 225 } 226 227 include_dirs = [ 228 "$drawing_core_include_dir", 229 "$src_dir", 230 "$drawing_core_src_dir", 231 "$drawing_core_src_dir/engine_adapter", 232 "$graphic_2d_root/utils/color_manager/export", 233 "$rosen_root/modules/render_service_base/include", 234 "$rosen_text_root/texgine/src", 235 "$rosen_root/../interfaces/kits/napi/graphic/drawing/common_napi", 236 ] 237 238 external_deps += [ "skia:skia_canvaskit" ] 239 if (graphic_2d_feature_upgrade_skia) { 240 defines += [ "USE_M133_SKIA" ] 241 } 242 243 if (defined(graphic_2d_feature_enable_sdf) && 244 graphic_2d_feature_enable_sdf) { 245 deps += [ "graphic_2d_ext:libsdf" ] 246 include_dirs += [ "$graphic_2d_ext_root/sdf/include" ] 247 defines += [ "RS_ENABLE_SDF" ] 248 } 249 250 if (rs_enable_gpu) { 251 sources += [ 252 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_gpu_context.cpp", 253 "$drawing_core_src_dir/engine_adapter/skia_adapter/skia_task_executor.cpp", 254 "$drawing_core_src_dir/image/gpu_context.cpp", 255 ] 256 defines += [ "RS_ENABLE_GPU" ] 257 258 if (!is_emulator && !build_ohos_sdk && !is_arkui_x) { 259 external_deps += [ "qos_manager:qos" ] 260 defines += [ "SKIA_PRIO_SCHED_ENABLE" ] 261 } 262 263 if (!build_ohos_sdk && !is_arkui_x) { 264 defines += [ "RES_SCHED_ENABLE" ] 265 include_dirs += [ "$rosen_root/modules/frame_report/include" ] 266 if (rosen_is_ohos) { 267 sources += 268 [ "$rosen_root/modules/frame_report/src/rs_frame_report.cpp" ] 269 } else { 270 sources += [ 271 "$rosen_root/modules/frame_report/src/mingw/rs_frame_report.cpp", 272 ] 273 } 274 } 275 } 276 277 if (is_arkui_x) { 278 configs = [ "//third_party/jsoncpp:jsoncpp_public_config" ] 279 defines += [ "ROSEN_ARKUI_X" ] 280 } else { 281 external_deps += [ "jsoncpp:jsoncpp" ] 282 } 283 284 defines += [ "USE_ACE_SKIA" ] 285 286 if (defined(ddgr_ext_configs) && 287 (current_os == "linux" || current_os == "mingw") && 288 ddgr_ext_configs.ddgr_feature_cross_compile) { 289 public_deps += [ 290 "$graphic_2d_ext_root/ddgr/tools/playbackengine:libplaybackengine", 291 "$rosen_root/modules/2d_engine/ddgr:libddgr", 292 ] 293 } 294 cflags = [] 295 296 if (defined(graphic_2d_ext_feature_enable_ddgr) && 297 graphic_2d_ext_feature_enable_ddgr) { 298 sources += ddgr_adapter_opt_set.drawing_ddgr_adapter_src_set 299 include_dirs += ddgr_adapter_opt_set.drawing_ddgr_adapter_include_set 300 public_deps += [ "$rosen_root/modules/2d_engine/ddgr:libddgr" ] 301 cflags += [ 302 "-fprofile-use=" + 303 rebase_path("${ddgr_feature_pgo_path}libddgr.profdata", 304 root_build_dir), 305 "-Wno-error=backend-plugin", 306 "-Wno-profile-instr-out-of-date", 307 "-Wno-profile-instr-unprofiled", 308 ] 309 external_deps += [ "freetype:freetype_static" ] 310 } 311 312 if (enable_text_gine) { 313 include_dirs += [ 314 "$rosen_text_root", 315 "$rosen_text_root/service", 316 "$rosen_text_root/interface/export", 317 "$platform_dir/image_native", 318 ] 319 defines += [ "NEW_SKIA" ] 320 } 321 if (graphic_2d_feature_enable_vulkan) { 322 defines += [ "RS_ENABLE_VK" ] 323 public_external_deps += [ "vulkan-headers:vulkan_headers" ] 324 } 325 if (platform == "ohos" || platform == "ohos_ng") { 326 if (ohos_indep_compiler_enable) { 327 include_dirs += drawing_indep_build_path 328 } 329 external_deps += [ 330 "bounds_checking_function:libsec_static", 331 "hilog:libhilog", 332 "hitrace:hitrace_meter", 333 "icu:shared_icuuc", 334 "skia:skia_canvaskit", 335 ] 336 337 deps = [] 338 defines += [ "ENABLE_OHOS_ENHANCE" ] 339 defines += [ "OHOS_TEXT_ENABLE" ] 340 defines += [ 341 "SUPPORT_OHOS_PIXMAP", 342 "ROSEN_OHOS", 343 ] 344 345 } else { 346 deps = [] 347 cflags += [ "-std=c++17" ] 348 349 deps += [ "$rosen_root/modules/platform:hilog" ] 350 351 if (is_arkui_x) { 352 deps += [ 353 "//third_party/bounds_checking_function:libsec_static", 354 "//third_party/skia:skia_$platform", 355 ] 356 } else { 357 external_deps += [ 358 "bounds_checking_function:libsec_static", 359 "icu:shared_icuuc", 360 "skia:skia_canvaskit", 361 ] 362 } 363 364 deps += [ "$graphic_2d_root/utils:sandbox_utils" ] 365 defines += [ "MODULE_DRAWING" ] 366 if (is_arkui_x) { 367 defines += [ "CROSS_PLATFORM" ] 368 deps += [ "//third_party/icu/icu4c:static_icuuc" ] 369 } 370 } 371 if (enable_text_gine && !is_arkui_x) { 372 deps += [ "$rosen_text_root/adapter/skia:font_asset" ] 373 } 374 include_dirs += [ "$rosen_text_root/adapter/skia" ] 375 if (rosen_is_ohos) { 376 defines += gpu_defines 377 if (rs_enable_gpu) { 378 defines += [ 379 "GL_GLEXT_PROTOTYPES", 380 "EGL_EGLEXT_PROTOTYPES", 381 ] 382 } 383 public_deps += [ 384 "$graphic_2d_root/frameworks/opengl_wrapper:EGL", 385 "$graphic_2d_root/frameworks/opengl_wrapper:GLESv3", 386 ] 387 external_deps += [ "c_utils:utils" ] 388 public_external_deps += [ 389 "graphic_surface:surface", 390 "icu:shared_icuuc", 391 ] 392 deps += [ "$graphic_2d_root/utils/color_manager:color_manager"] 393 } 394 395 part_name = "graphic_2d" 396 subsystem_name = "graphic" 397 } 398} 399 400foreach(item, ace_platforms) { 401 graphics2d_source_set("2d_graphics_source_" + item.name) { 402 platform = item.name 403 defines = [] 404 405 if (defined(item.config)) { 406 config = item.config 407 } else { 408 config = { 409 } 410 } 411 412 if (defined(config.defines)) { 413 defines += config.defines 414 } 415 416 if (defined(config.cflags_cc)) { 417 cflags_cc = config.cflags_cc 418 } else { 419 cflags_cc = [] 420 } 421 } 422} 423 424if (!is_arkui_x) { 425 ## Build 2d_graphics.so 426 ohos_shared_library("2d_graphics") { 427 branch_protector_ret = "pac_ret" 428 sanitize = { 429 cfi = true 430 cfi_cross_dso = true 431 cfi_no_nvcall = true 432 cfi_vcall_icall_only = true 433 debug = false 434 } 435 platform = current_os 436 if (platform == "mingw") { 437 platform = "windows" 438 } 439 deps = [ ":2d_graphics_source_$platform" ] 440 441 external_deps = [ "bounds_checking_function:libsec_static" ] 442 public_external_deps = [ 443 "hilog:libhilog", 444 "skia:skia_canvaskit", 445 ] 446 447 public_configs = [ ":export_config" ] 448 449 if (platform == "ohos") { 450 version_script = "2d_graphics.versionscript" 451 } 452 453 part_name = "graphic_2d" 454 subsystem_name = "graphic" 455 } 456} else { 457 ohos_source_set("2d_graphics") { 458 platform = current_os 459 460 deps = [ ":2d_graphics_source_$platform" ] 461 462 if (is_arkui_x) { 463 include_dirs = [ "//third_party/bounds_checking_function/include" ] 464 deps += [ "//third_party/bounds_checking_function:libsec_static" ] 465 } else { 466 external_deps += [ "bounds_checking_function:libsec_static" ] 467 } 468 public_configs = [ ":export_config" ] 469 part_name = "graphic_2d" 470 subsystem_name = "graphic" 471 } 472} 473 474group("2d_graphics_packages") { 475 deps = [ 476 "$drawing_root:2d_graphics", 477 "$drawing_root/drawing_ndk:native_drawing_ndk", 478 ] 479} 480