xref: /aosp_15_r20/external/skia/modules/skunicode/BUILD.gn (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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