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