• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2024-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_ndk_include_dir = "$rosen_root/modules/2d_graphics/drawing_ndk/include"
21drawing_ndk_src_dir = "$rosen_root/modules/2d_graphics/drawing_ndk/src"
22drawing_utils_root = "$rosen_root/modules/2d_graphics/drawing_ndk/drawing_utils"
23if (ohos_indep_compiler_enable) {
24  drawing_indep_build_path = [ "//binarys/third_party/icu/innerapis/shared_icuuc/includes/common" ]
25}
26
27config("export_config") {
28  include_dirs = [
29    "$drawing_ndk_include_dir",
30    "$rosen_text_root/interface/export/ndk_include",
31  ]
32}
33
34if (enable_text_gine) {
35  defines = []
36}
37
38template("drawing_ndk_source_set") {
39  forward_variables_from(invoker, "*")
40
41  ohos_source_set(target_name) {
42    defines += invoker.defines
43    cflags_cc += invoker.cflags_cc
44    if (use_skia_txt) {
45      defines += [ "USE_SKIA_TXT" ]
46    }
47
48    sanitize = {
49      cfi = true
50      cfi_cross_dso = true
51      cfi_vcall_icall_only = true
52      debug = false
53      blocklist = "./drawingndk_blocklist.txt"
54    }
55
56    include_dirs = []
57    if (ohos_indep_compiler_enable) {
58      include_dirs += drawing_indep_build_path
59    }
60    public_deps = [
61      "$drawing_root:2d_graphics",
62      "$graphic_2d_root/rosen/modules/render_service_base:librender_service_base",
63    ]
64    deps = [ "$rosen_text_root/interface/ndk_src:text_ndk" ]
65    public_external_deps = [ "jsoncpp:jsoncpp" ]
66    external_deps = [ "napi:ace_napi" ]
67    configs = [ ":export_config" ]
68    sources = [
69      "$drawing_ndk_src_dir/drawing_bitmap.cpp",
70      "$drawing_ndk_src_dir/drawing_brush.cpp",
71      "$drawing_ndk_src_dir/drawing_canvas.cpp",
72      "$drawing_ndk_src_dir/drawing_color.cpp",
73      "$drawing_ndk_src_dir/drawing_color_filter.cpp",
74      "$drawing_ndk_src_dir/drawing_color_space.cpp",
75      "$drawing_ndk_src_dir/drawing_error_code.cpp",
76      "$drawing_ndk_src_dir/drawing_filter.cpp",
77      "$drawing_ndk_src_dir/drawing_font.cpp",
78      "$drawing_ndk_src_dir/drawing_gpu_context.cpp",
79      "$drawing_ndk_src_dir/drawing_image.cpp",
80      "$drawing_ndk_src_dir/drawing_image_filter.cpp",
81      "$drawing_ndk_src_dir/drawing_mask_filter.cpp",
82      "$drawing_ndk_src_dir/drawing_matrix.cpp",
83      "$drawing_ndk_src_dir/drawing_memory_stream.cpp",
84      "$drawing_ndk_src_dir/drawing_path.cpp",
85      "$drawing_ndk_src_dir/drawing_path_effect.cpp",
86      "$drawing_ndk_src_dir/drawing_pen.cpp",
87      "$drawing_ndk_src_dir/drawing_pixel_map.cpp",
88      "$drawing_ndk_src_dir/drawing_point.cpp",
89      "$drawing_ndk_src_dir/drawing_record_cmd.cpp",
90      "$drawing_ndk_src_dir/drawing_rect.cpp",
91      "$drawing_ndk_src_dir/drawing_region.cpp",
92      "$drawing_ndk_src_dir/drawing_round_rect.cpp",
93      "$drawing_ndk_src_dir/drawing_sampling_options.cpp",
94      "$drawing_ndk_src_dir/drawing_shader_effect.cpp",
95      "$drawing_ndk_src_dir/drawing_shadow_layer.cpp",
96      "$drawing_ndk_src_dir/drawing_surface.cpp",
97      "$drawing_ndk_src_dir/drawing_text_blob.cpp",
98      "$drawing_ndk_src_dir/drawing_typeface.cpp",
99      "$drawing_utils_root/drawing_canvas_utils.cpp",
100      "$drawing_utils_root/drawing_font_utils.cpp",
101      "$drawing_utils_root/native_pixel_map_manager.cpp",
102    ]
103
104    if (is_arkui_x) {
105      defines += [ "CROSS_PLATFORM" ]
106    }
107    if (rs_enable_gpu) {
108      defines += [ "RS_ENABLE_GPU" ]
109      sources += [
110        "$drawing_utils_root/drawing_gpu_context_manager.cpp",
111        "$drawing_utils_root/drawing_surface_utils.cpp",
112      ]
113    }
114    if (is_emulator) {
115      defines += [ "ROSEN_EMULATOR" ]
116    }
117
118    include_dirs += [
119      "$drawing_utils_root",
120      "$graphic_2d_root/rosen/modules/render_service_base/include",
121      "$graphic_2d_root/rosen/modules/render_service_base/src",
122      "$rosen_text_root/service/texgine/src",
123      "$graphic_2d_root/interfaces/inner_api/color_manager",
124      "$graphic_2d_root/interfaces/kits/napi/graphic/color_manager/color_space_object_convertor",
125      "$graphic_2d_root/frameworks/text/service/global_config",
126    ]
127
128    if (enable_text_gine) {
129      include_dirs += [
130        "$rosen_text_root",
131        "$rosen_text_root/service",
132        "$rosen_text_root/adapter",
133        "$rosen_text_root/interface/export",
134      ]
135    } else {
136      include_dirs += [
137        "$ace_napi_frameworks/frameworks",
138        "$rosen_text_root",
139      ]
140    }
141
142    if (platform == "ohos" || platform == "ohos_ng") {
143      public_deps += ["$graphic_2d_root/utils/color_manager/ndk:libnative_color_space_manager"]
144      defines += [ "OHOS_PLATFORM" ]
145      external_deps += [
146        "bounds_checking_function:libsec_static",
147        "hilog:libhilog",
148        "icu:shared_icuuc",
149        "image_framework:image_native",
150        "image_framework:pixelmap",
151        "image_framework:pixelmap_ndk",
152      ]
153
154      remove_configs = [ "//build/config/compiler:default_include_dirs" ]
155    } else {
156      cflags = [ "-std=c++17" ]
157
158      if (!is_arkui_x) {
159        deps += [ "$rosen_root/modules/platform:hilog" ]
160      }
161
162      external_deps += [ "bounds_checking_function:libsec_static" ]
163      defines += [ "MODULE_DRAWING" ]
164    }
165    if (enable_text_gine) {
166      deps += [ "$rosen_text_root:rosen_text" ]
167      if (use_skia_txt) {
168        include_dirs += [ "$rosen_text_root/adapter/skia" ]
169      }
170    }
171    if (rosen_is_ohos) {
172      include_dirs += [ "$graphic_2d_root/interfaces/inner_api/surface" ]
173      external_deps += [ "c_utils:utils" ]
174    }
175
176    part_name = "graphic_2d"
177    subsystem_name = "graphic"
178  }
179}
180
181foreach(item, ace_platforms) {
182  drawing_ndk_source_set("drawing_ndk_source_" + item.name) {
183    platform = item.name
184    defines = []
185
186    if (defined(item.config)) {
187      config = item.config
188    } else {
189      config = {
190      }
191    }
192
193    if (defined(config.defines)) {
194      defines += config.defines
195    }
196
197    if (defined(config.cflags_cc)) {
198      cflags_cc = config.cflags_cc
199    } else {
200      cflags_cc = []
201    }
202  }
203}
204
205if (!is_arkui_x) {
206  ## Build native_drawing_ndk.so
207  ohos_shared_library("native_drawing_ndk") {
208    sanitize = {
209      cfi = true
210      cfi_cross_dso = true
211      cfi_vcall_icall_only = true
212      debug = false
213    }
214    platform = current_os
215    if (platform == "mingw") {
216      platform = "windows"
217    }
218    public_configs = [ ":export_config" ]
219    deps = [ "$drawing_root/drawing_ndk:drawing_ndk_source_$platform" ]
220    public_external_deps = [ "skia:skia_canvaskit" ]
221
222    if (platform == "ohos") {
223      version_script = "$drawing_root/2d_graphics.versionscript"
224      symlink_target_name = [ "libnative_drawing.so" ]
225      innerapi_tags = [ "platformsdk_indirect" ]
226    }
227
228    part_name = "graphic_2d"
229    subsystem_name = "graphic"
230  }
231}
232