1# Copyright (C) 2022 Huawei Device Co., Ltd. 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("//third_party/sqlite/sqlite.gni") 16 17is_cross_platform_build = defined(is_arkui_x) && is_arkui_x 18sqlite_patched_dir = root_out_dir + "/patched_sqlite" 19 20# Lets callers do '#include <sqlite3.h>' 21config("sqlite_config") { 22 include_dirs = [ "$sqlite_patched_dir/include" ] 23} 24 25# This is the configuration used to build sqlite itself. 26# It should not be needed outside of this library. 27config("sqlite3_private_config") { 28 visibility = [ ":*" ] 29 include_dirs = [ "$sqlite_patched_dir/include" ] 30} 31 32group("libsqlite") { 33 public_deps = [ 34 ":sqlite", 35 ":sqliteicu" 36 ] 37 deps = [ 38 ":sqlitecompressvfs" 39 ] 40} 41 42ohos_shared_library("sqliteicu") { 43 branch_protector_ret = "pac_ret" 44 sources = [ "$sqlite_patched_dir/src/sqlite3icu.c" ] 45 46 defines = [ 47 "NDEBUG=1", 48 "SQLITE_EXPORT_SYMBOLS", 49 "SQLITE_ENABLE_FTS3", 50 "OS_FEATURE", 51 "SQLITE_ENABLE_ICU", 52 ] 53 cflags_c = [ 54 "-fvisibility=hidden", 55 "-Wno-implicit-fallthrough", 56 ] 57 if (target_os != "ios") { 58 ldflags = [ "-Wl,--exclude-libs,ALL" ] 59 } 60 deps = [ 61 ":sqlite", 62 "//third_party/sqlite/patch:apply_patch", 63 ] 64 public_configs = [ ":sqlite_config" ] 65 configs = [ ":sqlite3_private_config" ] 66 innerapi_tags = [ "platformsdk_indirect" ] 67 part_name = "sqlite" 68 subsystem_name = "thirdparty" 69 install_images = [ system_base_dir ] 70 relative_install_dir = "platformsdk" 71 external_deps = [] 72 if (is_cross_platform_build) { 73 if (target_os == "ios") { 74 deps += [ "//third_party/bounds_checking_function:libsec_shared" ] 75 } else { 76 deps += [ "//commonlibrary/c_utils/base:utils" ] 77 } 78 } else { 79 external_deps += [ "c_utils:utils" ] 80 } 81 external_deps += [ 82 "icu:shared_icui18n", 83 "icu:shared_icuuc", 84 ] 85} 86 87ohos_shared_library("sqlitecompressvfs") { 88 branch_protector_ret = "pac_ret" 89 sources = [ "$sqlite_patched_dir/src/compressvfs.c" ] 90 91 defines = [ 92 "NDEBUG=1", 93 "SQLITE_EXPORT_SYMBOLS", 94 "SQLITE_ENABLE_PAGE_COMPRESS", 95 "OS_FEATURE", 96 ] 97 cflags_c = [ 98 "-fvisibility=hidden", 99 "-Wno-implicit-fallthrough", 100 ] 101 if (target_os != "ios") { 102 ldflags = [ "-Wl,--exclude-libs,ALL" ] 103 } 104 deps = [ 105 ":sqlite", 106 "//third_party/sqlite/patch:apply_patch", 107 ] 108 public_configs = [ ":sqlite_config" ] 109 configs = [ ":sqlite3_private_config" ] 110 innerapi_tags = [ "platformsdk_indirect" ] 111 part_name = "sqlite" 112 subsystem_name = "thirdparty" 113 install_images = [ system_base_dir ] 114 relative_install_dir = "platformsdk" 115 external_deps = [] 116 if (is_cross_platform_build) { 117 if (target_os == "ios") { 118 deps += [ "//third_party/bounds_checking_function:libsec_shared" ] 119 } else { 120 deps += [ "//commonlibrary/c_utils/base:utils" ] 121 } 122 } else { 123 external_deps += [ "c_utils:utils" ] 124 } 125} 126 127ohos_shared_library("sqlite") { 128 branch_protector_ret = "pac_ret" 129 sources = [ 130 "$sqlite_patched_dir/src/sqlite3.c", 131 "$sqlite_patched_dir/ext/misc/cksumvfs.c", 132 ] 133 134 defines = [ 135 "NDEBUG=1", 136 "HAVE_USLEEP=1", 137 "SQLITE_HAVE_ISNAN", 138 "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576", 139 "SQLITE_THREADSAFE=2", 140 "SQLITE_TEMP_STORE=3", 141 "SQLITE_POWERSAFE_OVERWRITE=1", 142 "SQLITE_DEFAULT_FILE_FORMAT=4", 143 "SQLITE_DEFAULT_AUTOVACUUM=1", 144 "SQLITE_ENABLE_MEMORY_MANAGEMENT=1", 145 "SQLITE_ENABLE_LOAD_EXTENSION", 146 "SQLITE_ENABLE_FTS3", 147 "SQLITE_ENABLE_FTS3_TOKENIZER", 148 "SQLITE_ENABLE_FTS4", 149 "SQLITE_ENABLE_FTS5", 150 "SQLITE_OMIT_COMPILEOPTION_DIAGS", 151 "SQLITE_DEFAULT_FILE_PERMISSIONS=0660", 152 "SQLITE_SECURE_DELETE", 153 "SQLITE_ENABLE_BATCH_ATOMIC_WRITE", 154 "USE_PREAD64", 155 "fdatasync=fdatasync", 156 "HAVE_MALLOC_H=1", 157 "HAVE_MALLOC_USABLE_SIZE", 158 "SQLITE_DIRECT_OVERFLOW_READ", 159 "SQLITE_HAS_CODEC", 160 "SQLITE_EXPORT_SYMBOLS", 161 "SQLITE_SHARED_BLOCK_OPTIMIZATION", 162 "SQLITE_CODEC_ATTACH_CHANGED", 163 "SQLITE_ENABLE_DROPTABLE_CALLBACK", 164 "OPENSSL_SUPPRESS_DEPRECATED", 165 "LOG_DUMP", 166 "FDSAN_ENABLE", 167 "OS_FEATURE", 168 "SQLITE_HDR_CHECK", 169 "SQLITE_ENABLE_ICU", 170 "SQLITE_META_DWR", 171 "SQLITE_ENABLE_BINLOG", 172 "SQLITE_CKSUMVFS_STATIC", 173 "SQLITE_ENABLE_PAGE_COMPRESS", 174 ] 175 if (sqlite_support_check_pages) { 176 } 177 cflags_c = [ 178 "-fvisibility=hidden", 179 "-Wno-implicit-fallthrough", 180 ] 181 if (target_os != "ios") { 182 ldflags = [ "-Wl,--exclude-libs,ALL" ] 183 } 184 deps = [ "//third_party/sqlite/patch:apply_patch" ] 185 public_configs = [ ":sqlite_config" ] 186 public_external_deps = [ "c_utils:utils" ] 187 configs = [ ":sqlite3_private_config" ] 188 innerapi_tags = [ "platformsdk_indirect" ] 189 part_name = "sqlite" 190 subsystem_name = "thirdparty" 191 install_images = [ system_base_dir ] 192 relative_install_dir = "platformsdk" 193 if (is_cross_platform_build) { 194 if (target_os == "ios") { 195 deps += [ "//third_party/bounds_checking_function:libsec_shared" ] 196 } else { 197 external_deps = [ "c_utils:utils" ] 198 } 199 } else { 200 external_deps = [ 201 "c_utils:utils", 202 "openssl:libcrypto_shared", 203 ] 204 } 205 if (is_ohos && is_clang && enhanced_opt && 206 (target_cpu == "arm" || target_cpu == "arm64")) { 207 ldflags += [ "-Wl,-Bsymbolic" ] 208 if (sqlite_feature_enable_pgo) { 209 cflags_c += [ 210 "-fprofile-use=" + 211 rebase_path("${sqlite_feature_pgo_path}/libsqlite.profdata", 212 root_build_dir), 213 "-Wno-error=backend-plugin", 214 "-Wno-profile-instr-out-of-date", 215 "-Wno-profile-instr-unprofiled", 216 ] 217 if(target_cpu == "arm64" && enable_enhanced_opt) { 218 ldflags += [ "-Wl,--aarch64-inline-plt" ] 219 } 220 } 221 } 222} 223 224ohos_executable("sqlite3") { 225 include_dirs = [ "$sqlite_patched_dir/include" ] 226 sources = [ "$sqlite_patched_dir/src/shell.c" ] 227 228 defines = [ 229 "NDEBUG=1", 230 "HAVE_USLEEP=1", 231 "SQLITE_HAVE_ISNAN", 232 "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576", 233 "SQLITE_THREADSAFE=2", 234 "SQLITE_TEMP_STORE=3", 235 "SQLITE_POWERSAFE_OVERWRITE=1", 236 "SQLITE_DEFAULT_FILE_FORMAT=4", 237 "SQLITE_DEFAULT_AUTOVACUUM=1", 238 "SQLITE_ENABLE_MEMORY_MANAGEMENT=1", 239 "SQLITE_ENABLE_FTS3", 240 "SQLITE_ENABLE_FTS4", 241 "SQLITE_OMIT_COMPILEOPTION_DIAGS", 242 "SQLITE_DEFAULT_FILE_PERMISSIONS=0600", 243 "SQLITE_SECURE_DELETE", 244 "SQLITE_ENABLE_BATCH_ATOMIC_WRITE", 245 "USE_PREAD64", 246 "fdatasync=fdatasync", 247 "SQLITE_DIRECT_OVERFLOW_READ", 248 "SQLITE_SHARED_BLOCK_OPTIMIZATION", 249 "OPENSSL_SUPPRESS_DEPRECATED", 250 "LOG_DUMP", 251 "FDSAN_ENABLE", 252 "OS_FEATURE", 253 ] 254 255 cflags = [ 256 "-Wno-error=implicit-function-declaration", 257 "-Wno-macro-redefined", 258 "-Wno-implicit-fallthrough", 259 ] 260 261 deps = [ 262 ":sqlite", 263 "//third_party/sqlite/patch:apply_patch", 264 ] 265 266 public_configs = [ ":sqlite_config" ] 267 external_deps = [ "c_utils:utils" ] 268 configs = [ ":sqlite3_private_config" ] 269 part_name = "sqlite" 270 subsystem_name = "thirdparty" 271} 272 273if (is_mingw || is_mac) { 274 ohos_shared_library("sqlite_sdk") { 275 include_dirs = [ 276 "$sqlite_patched_dir/include", 277 "//third_party/bounds_checking_function/include", 278 ] 279 280 sources = [ "$sqlite_patched_dir/src/sqlite3.c" ] 281 282 defines = [ 283 "NDEBUG=1", 284 "HAVE_USLEEP=1", 285 "SQLITE_HAVE_ISNAN", 286 "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576", 287 "SQLITE_THREADSAFE=2", 288 "SQLITE_TEMP_STORE=3", 289 "SQLITE_POWERSAFE_OVERWRITE=1", 290 "SQLITE_DEFAULT_FILE_FORMAT=4", 291 "SQLITE_DEFAULT_AUTOVACUUM=1", 292 "SQLITE_ENABLE_MEMORY_MANAGEMENT=1", 293 "SQLITE_ENABLE_FTS3", 294 "SQLITE_ENABLE_FTS4", 295 "SQLITE_OMIT_COMPILEOPTION_DIAGS", 296 "SQLITE_DEFAULT_FILE_PERMISSIONS=0600", 297 "SQLITE_SECURE_DELETE", 298 "SQLITE_ENABLE_BATCH_ATOMIC_WRITE", 299 "USE_PREAD64", 300 "fdatasync=fdatasync", 301 "SQLITE_DIRECT_OVERFLOW_READ", 302 "SQLITE_HAS_CODEC", 303 "SQLITE_EXPORT_SYMBOLS", 304 "SQLITE_SHARED_BLOCK_OPTIMIZATION", 305 "OPENSSL_SUPPRESS_DEPRECATED", 306 ] 307 remove_configs = [ "//build/config/compiler:chromium_code" ] 308 deps = [ 309 "//third_party/bounds_checking_function:libsec_shared", 310 "//third_party/sqlite/patch:apply_patch", 311 ] 312 external_deps = [ "openssl:libcrypto_restool" ] 313 if (is_mingw) { 314 libs = [ "//prebuilts/mingw-w64/ohos/linux-x86_64/clang-mingw/x86_64-w64-mingw32/lib/libws2_32.a" ] 315 } 316 cflags = [ 317 "-Wno-error=implicit-function-declaration", 318 "-Wno-implicit-fallthrough", 319 ] 320 part_name = "sqlite" 321 subsystem_name = "thirdparty" 322 } 323} 324 325if (is_cross_platform_build) { 326 ohos_static_library("sqlite_static") { 327 visibility = [ "//foundation/distributeddatamgr/*" ] 328 visibility += [ "//foundation/multimodalinput/*" ] 329 visibility += 330 [ "//hit/fuzzing_test/projects/multimodal_InputService_fuzzer/*" ] 331 visibility += [ "//foundation/communication/*" ] 332 visibility += [ "//build/common/*" ] 333 visibility += [ ":*" ] 334 visibility += [ "//base/security/*" ] 335 visibility += [ "//third_party/libsoup/*" ] 336 visibility += 337 [ "//foundation/resourceschedule/resource_schedule_service/*" ] 338 visibility += [ "//foundation/bundlemanager/ecological_rule_mgr/*" ] 339 340 sources = [ "$sqlite_patched_dir/src/sqlite3.c" ] 341 342 defines = [ 343 "NDEBUG=1", 344 "HAVE_USLEEP=1", 345 "SQLITE_HAVE_ISNAN", 346 "SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT=1048576", 347 "SQLITE_THREADSAFE=2", 348 "SQLITE_TEMP_STORE=3", 349 "SQLITE_POWERSAFE_OVERWRITE=1", 350 "SQLITE_DEFAULT_FILE_FORMAT=4", 351 "SQLITE_DEFAULT_AUTOVACUUM=1", 352 "SQLITE_ENABLE_MEMORY_MANAGEMENT=1", 353 "SQLITE_ENABLE_FTS3", 354 "SQLITE_ENABLE_FTS4", 355 "SQLITE_ENABLE_FTS5", 356 "SQLITE_OMIT_COMPILEOPTION_DIAGS", 357 "SQLITE_DEFAULT_FILE_PERMISSIONS=0660", 358 "SQLITE_SECURE_DELETE", 359 "SQLITE_ENABLE_BATCH_ATOMIC_WRITE", 360 "USE_PREAD64", 361 "fdatasync=fdatasync", 362 "HAVE_MALLOC_H=1", 363 "HAVE_MALLOC_USABLE_SIZE", 364 "SQLITE_DIRECT_OVERFLOW_READ", 365 "SQLITE_HAS_CODEC", 366 "SQLITE_EXPORT_SYMBOLS", 367 "SQLITE_SHARED_BLOCK_OPTIMIZATION", 368 "SQLITE_CODEC_ATTACH_CHANGED", 369 "SQLITE_ENABLE_DROPTABLE_CALLBACK", 370 "OPENSSL_SUPPRESS_DEPRECATED", 371 ] 372 373 cflags_c = [ 374 "-fvisibility=hidden", 375 "-Wno-implicit-fallthrough", 376 ] 377 378 deps = [ 379 "//third_party/bounds_checking_function:libsec_static", 380 "//third_party/openssl:libcrypto_static", 381 "//third_party/sqlite/patch:apply_patch", 382 ] 383 public_configs = [ ":sqlite_config" ] 384 configs = [ ":sqlite3_private_config" ] 385 part_name = "sqlite" 386 subsystem_name = "thirdparty" 387 } 388} 389