• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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