1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2021 Google Inc. 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Workerimport("../../gn/skia.gni") 7*c8dee2aaSAndroid Build Coastguard Workerimport("../../third_party/icu/icu.gni") 8*c8dee2aaSAndroid Build Coastguard Workerimport("skunicode.gni") 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 11*c8dee2aaSAndroid Build Coastguard Worker skia_use_runtime_icu = false 12*c8dee2aaSAndroid Build Coastguard Worker skunicode_tests_enabled = true 13*c8dee2aaSAndroid Build Coastguard Worker} 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Workerif (skia_use_icu || skia_use_client_icu || skia_use_libgrapheme || 16*c8dee2aaSAndroid Build Coastguard Worker skia_use_icu4x) { 17*c8dee2aaSAndroid Build Coastguard Worker config("public_config") { 18*c8dee2aaSAndroid Build Coastguard Worker defines = [ "SK_UNICODE_AVAILABLE" ] 19*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu) { 20*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SK_UNICODE_ICU_IMPLEMENTATION" ] 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_client_icu) { 23*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SK_UNICODE_CLIENT_IMPLEMENTATION" ] 24*c8dee2aaSAndroid Build Coastguard Worker } 25*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_libgrapheme) { 26*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SK_UNICODE_LIBGRAPHEME_IMPLEMENTATION" ] 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu4x) { 29*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SK_UNICODE_ICU4X_IMPLEMENTATION" ] 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker config("cpp20") { 34*c8dee2aaSAndroid Build Coastguard Worker if (is_win) { 35*c8dee2aaSAndroid Build Coastguard Worker cflags_cc = [ "/std:c++20" ] 36*c8dee2aaSAndroid Build Coastguard Worker } else { 37*c8dee2aaSAndroid Build Coastguard Worker cflags_cc = [ "-std=c++20" ] 38*c8dee2aaSAndroid Build Coastguard Worker } 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker config("module") { 42*c8dee2aaSAndroid Build Coastguard Worker defines = [ "SKUNICODE_IMPLEMENTATION=1" ] 43*c8dee2aaSAndroid Build Coastguard Worker if (is_component_build) { 44*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SKUNICODE_DLL" ] 45*c8dee2aaSAndroid Build Coastguard Worker } 46*c8dee2aaSAndroid Build Coastguard Worker } 47*c8dee2aaSAndroid Build Coastguard Worker 48*c8dee2aaSAndroid Build Coastguard Worker component("skunicode_core") { 49*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 50*c8dee2aaSAndroid Build Coastguard Worker deps = [ "../..:skia" ] 51*c8dee2aaSAndroid Build Coastguard Worker configs += [ 52*c8dee2aaSAndroid Build Coastguard Worker ":module", 53*c8dee2aaSAndroid Build Coastguard Worker "../../:skia_private", 54*c8dee2aaSAndroid Build Coastguard Worker "../../third_party/icu/config:no_cxx", 55*c8dee2aaSAndroid Build Coastguard Worker ] 56*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_sources 57*c8dee2aaSAndroid Build Coastguard Worker } 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu) { 60*c8dee2aaSAndroid Build Coastguard Worker component("skunicode_icu") { 61*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 62*c8dee2aaSAndroid Build Coastguard Worker deps = [ 63*c8dee2aaSAndroid Build Coastguard Worker ":skunicode_core", 64*c8dee2aaSAndroid Build Coastguard Worker "../..:skia", 65*c8dee2aaSAndroid Build Coastguard Worker ] 66*c8dee2aaSAndroid Build Coastguard Worker configs += [ 67*c8dee2aaSAndroid Build Coastguard Worker ":module", 68*c8dee2aaSAndroid Build Coastguard Worker "../../:skia_private", 69*c8dee2aaSAndroid Build Coastguard Worker "../../third_party/icu/config:no_cxx", 70*c8dee2aaSAndroid Build Coastguard Worker ] 71*c8dee2aaSAndroid Build Coastguard Worker 72*c8dee2aaSAndroid Build Coastguard Worker # These are explicitly *not* public defines because we don't want them 73*c8dee2aaSAndroid Build Coastguard Worker # to leak to dependents. 74*c8dee2aaSAndroid Build Coastguard Worker defines = [ "U_USING_ICU_NAMESPACE=0" ] 75*c8dee2aaSAndroid Build Coastguard Worker if (!skia_use_system_icu) { 76*c8dee2aaSAndroid Build Coastguard Worker defines += [ "U_DISABLE_RENAMING=1" ] 77*c8dee2aaSAndroid Build Coastguard Worker } 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_icu_bidi_sources 80*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_bidi_full_sources 81*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_icu_sources 82*c8dee2aaSAndroid Build Coastguard Worker 83*c8dee2aaSAndroid Build Coastguard Worker # only available for Android at the moment 84*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_runtime_icu && (is_android || is_linux)) { 85*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_runtime_icu_sources 86*c8dee2aaSAndroid Build Coastguard Worker defines += [ "SK_UNICODE_RUNTIME_ICU_AVAILABLE" ] 87*c8dee2aaSAndroid Build Coastguard Worker deps += [ "//third_party/icu:headers" ] 88*c8dee2aaSAndroid Build Coastguard Worker } else { 89*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_builtin_icu_sources 90*c8dee2aaSAndroid Build Coastguard Worker deps += [ "//third_party/icu" ] 91*c8dee2aaSAndroid Build Coastguard Worker } 92*c8dee2aaSAndroid Build Coastguard Worker } 93*c8dee2aaSAndroid Build Coastguard Worker } 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_client_icu) { 96*c8dee2aaSAndroid Build Coastguard Worker component("skunicode_client_icu") { 97*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 98*c8dee2aaSAndroid Build Coastguard Worker deps = [ 99*c8dee2aaSAndroid Build Coastguard Worker ":skunicode_core", 100*c8dee2aaSAndroid Build Coastguard Worker "../..:skia", 101*c8dee2aaSAndroid Build Coastguard Worker ] 102*c8dee2aaSAndroid Build Coastguard Worker configs += [ 103*c8dee2aaSAndroid Build Coastguard Worker ":module", 104*c8dee2aaSAndroid Build Coastguard Worker "../../:skia_private", 105*c8dee2aaSAndroid Build Coastguard Worker "../../third_party/icu/config:no_cxx", 106*c8dee2aaSAndroid Build Coastguard Worker ] 107*c8dee2aaSAndroid Build Coastguard Worker defines = [ 108*c8dee2aaSAndroid Build Coastguard Worker # In order to use the bidi_subset at the same time as "full ICU", we must have 109*c8dee2aaSAndroid Build Coastguard Worker # compiled icu with the given defines also being set. This is to make sure the functions 110*c8dee2aaSAndroid Build Coastguard Worker # we call are given a suffix of "_skia" to prevent ODR violations if this "subset of ICU" 111*c8dee2aaSAndroid Build Coastguard Worker # is compiled alongside a full ICU build also. 112*c8dee2aaSAndroid Build Coastguard Worker # See https://chromium.googlesource.com/chromium/deps/icu.git/+/d94ab131bc8fef3bc17f356a628d8e4cd44d65d9/source/common/unicode/uversion.h 113*c8dee2aaSAndroid Build Coastguard Worker # for how these are used. 114*c8dee2aaSAndroid Build Coastguard Worker "U_DISABLE_RENAMING=0", 115*c8dee2aaSAndroid Build Coastguard Worker "U_USING_ICU_NAMESPACE=0", 116*c8dee2aaSAndroid Build Coastguard Worker "U_LIB_SUFFIX_C_NAME=_skia", 117*c8dee2aaSAndroid Build Coastguard Worker "U_HAVE_LIB_SUFFIX=1", 118*c8dee2aaSAndroid Build Coastguard Worker "U_DISABLE_VERSION_SUFFIX=1", 119*c8dee2aaSAndroid Build Coastguard Worker ] 120*c8dee2aaSAndroid Build Coastguard Worker 121*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_icu_bidi_sources 122*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_bidi_subset_sources 123*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_client_icu_sources 124*c8dee2aaSAndroid Build Coastguard Worker deps += [ skia_icu_bidi_third_party_dir ] 125*c8dee2aaSAndroid Build Coastguard Worker } 126*c8dee2aaSAndroid Build Coastguard Worker } 127*c8dee2aaSAndroid Build Coastguard Worker 128*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_libgrapheme) { 129*c8dee2aaSAndroid Build Coastguard Worker component("skunicode_libgrapheme") { 130*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 131*c8dee2aaSAndroid Build Coastguard Worker deps = [ 132*c8dee2aaSAndroid Build Coastguard Worker ":skunicode_core", 133*c8dee2aaSAndroid Build Coastguard Worker "../..:skia", 134*c8dee2aaSAndroid Build Coastguard Worker ] 135*c8dee2aaSAndroid Build Coastguard Worker configs += [ 136*c8dee2aaSAndroid Build Coastguard Worker ":module", 137*c8dee2aaSAndroid Build Coastguard Worker "../../:skia_private", 138*c8dee2aaSAndroid Build Coastguard Worker "../../third_party/icu/config:no_cxx", 139*c8dee2aaSAndroid Build Coastguard Worker ] 140*c8dee2aaSAndroid Build Coastguard Worker defines = [ 141*c8dee2aaSAndroid Build Coastguard Worker "U_DISABLE_RENAMING=0", 142*c8dee2aaSAndroid Build Coastguard Worker "U_USING_ICU_NAMESPACE=0", 143*c8dee2aaSAndroid Build Coastguard Worker "U_LIB_SUFFIX_C_NAME=_skia", 144*c8dee2aaSAndroid Build Coastguard Worker "U_HAVE_LIB_SUFFIX=1", 145*c8dee2aaSAndroid Build Coastguard Worker "U_DISABLE_VERSION_SUFFIX=1", 146*c8dee2aaSAndroid Build Coastguard Worker ] 147*c8dee2aaSAndroid Build Coastguard Worker 148*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_icu_bidi_sources 149*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_bidi_subset_sources 150*c8dee2aaSAndroid Build Coastguard Worker 151*c8dee2aaSAndroid Build Coastguard Worker sources += skia_unicode_libgrapheme_sources 152*c8dee2aaSAndroid Build Coastguard Worker deps += [ 153*c8dee2aaSAndroid Build Coastguard Worker skia_icu_bidi_third_party_dir, 154*c8dee2aaSAndroid Build Coastguard Worker skia_libgrapheme_third_party_dir, 155*c8dee2aaSAndroid Build Coastguard Worker ] 156*c8dee2aaSAndroid Build Coastguard Worker } 157*c8dee2aaSAndroid Build Coastguard Worker } 158*c8dee2aaSAndroid Build Coastguard Worker 159*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu4x) { 160*c8dee2aaSAndroid Build Coastguard Worker component("skunicode_icu4x") { 161*c8dee2aaSAndroid Build Coastguard Worker check_includes = false 162*c8dee2aaSAndroid Build Coastguard Worker deps = [ 163*c8dee2aaSAndroid Build Coastguard Worker ":skunicode_core", 164*c8dee2aaSAndroid Build Coastguard Worker "../..:skia", 165*c8dee2aaSAndroid Build Coastguard Worker ] 166*c8dee2aaSAndroid Build Coastguard Worker configs += [ 167*c8dee2aaSAndroid Build Coastguard Worker ":module", 168*c8dee2aaSAndroid Build Coastguard Worker "../../:skia_private", 169*c8dee2aaSAndroid Build Coastguard Worker "../../third_party/icu/config:no_cxx", 170*c8dee2aaSAndroid Build Coastguard Worker ] 171*c8dee2aaSAndroid Build Coastguard Worker 172*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_icu4x_sources 173*c8dee2aaSAndroid Build Coastguard Worker 174*c8dee2aaSAndroid Build Coastguard Worker deps += [ "//third_party/icu4x" ] 175*c8dee2aaSAndroid Build Coastguard Worker } 176*c8dee2aaSAndroid Build Coastguard Worker } 177*c8dee2aaSAndroid Build Coastguard Worker 178*c8dee2aaSAndroid Build Coastguard Worker group("skunicode") { 179*c8dee2aaSAndroid Build Coastguard Worker public_configs = [ ":public_config" ] 180*c8dee2aaSAndroid Build Coastguard Worker public_deps = [ ":skunicode_core" ] 181*c8dee2aaSAndroid Build Coastguard Worker 182*c8dee2aaSAndroid Build Coastguard Worker # We have these different flavors of skunicode as independent components because 183*c8dee2aaSAndroid Build Coastguard Worker # we have to set different defines for different builds of ICU. 184*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu) { 185*c8dee2aaSAndroid Build Coastguard Worker public_deps += [ ":skunicode_icu" ] 186*c8dee2aaSAndroid Build Coastguard Worker } 187*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_client_icu) { 188*c8dee2aaSAndroid Build Coastguard Worker public_deps += [ ":skunicode_client_icu" ] 189*c8dee2aaSAndroid Build Coastguard Worker } 190*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_libgrapheme) { 191*c8dee2aaSAndroid Build Coastguard Worker public_deps += [ ":skunicode_libgrapheme" ] 192*c8dee2aaSAndroid Build Coastguard Worker } 193*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_icu4x) { 194*c8dee2aaSAndroid Build Coastguard Worker public_deps += [ ":skunicode_icu4x" ] 195*c8dee2aaSAndroid Build Coastguard Worker } 196*c8dee2aaSAndroid Build Coastguard Worker } 197*c8dee2aaSAndroid Build Coastguard Worker 198*c8dee2aaSAndroid Build Coastguard Worker if (defined(is_skia_standalone) && skia_enable_tools) { 199*c8dee2aaSAndroid Build Coastguard Worker skia_source_set("tests") { 200*c8dee2aaSAndroid Build Coastguard Worker if (skunicode_tests_enabled && 201*c8dee2aaSAndroid Build Coastguard Worker (skia_use_icu || skia_use_libgrapheme || skia_use_icu4x)) { 202*c8dee2aaSAndroid Build Coastguard Worker testonly = true 203*c8dee2aaSAndroid Build Coastguard Worker deps = [ 204*c8dee2aaSAndroid Build Coastguard Worker ":skunicode", 205*c8dee2aaSAndroid Build Coastguard Worker "../..:skia", 206*c8dee2aaSAndroid Build Coastguard Worker "../..:test", 207*c8dee2aaSAndroid Build Coastguard Worker ] 208*c8dee2aaSAndroid Build Coastguard Worker sources = skia_unicode_tests 209*c8dee2aaSAndroid Build Coastguard Worker deps += [ skia_icu_bidi_third_party_dir ] 210*c8dee2aaSAndroid Build Coastguard Worker } else { 211*c8dee2aaSAndroid Build Coastguard Worker sources = [] 212*c8dee2aaSAndroid Build Coastguard Worker } 213*c8dee2aaSAndroid Build Coastguard Worker } 214*c8dee2aaSAndroid Build Coastguard Worker } 215*c8dee2aaSAndroid Build Coastguard Worker} else { 216*c8dee2aaSAndroid Build Coastguard Worker group("skunicode") { 217*c8dee2aaSAndroid Build Coastguard Worker } 218*c8dee2aaSAndroid Build Coastguard Worker group("tests") { 219*c8dee2aaSAndroid Build Coastguard Worker } 220*c8dee2aaSAndroid Build Coastguard Worker} 221