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