xref: /aosp_15_r20/external/skia/third_party/icu/BUILD.gn (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 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.gni")
8*c8dee2aaSAndroid Build Coastguard Workerimport("icu.gni")
9*c8dee2aaSAndroid Build Coastguard Worker
10*c8dee2aaSAndroid Build Coastguard Workerif (skia_use_system_icu) {
11*c8dee2aaSAndroid Build Coastguard Worker  system("icu") {
12*c8dee2aaSAndroid Build Coastguard Worker    libs = [ "icuuc" ]
13*c8dee2aaSAndroid Build Coastguard Worker    defines = [ "U_USING_ICU_NAMESPACE=0" ]
14*c8dee2aaSAndroid Build Coastguard Worker  }
15*c8dee2aaSAndroid Build Coastguard Worker} else {
16*c8dee2aaSAndroid Build Coastguard Worker  if (target_cpu == "wasm") {
17*c8dee2aaSAndroid Build Coastguard Worker    data_assembly = "$target_gen_dir/icudtl_dat.cpp"
18*c8dee2aaSAndroid Build Coastguard Worker  } else {
19*c8dee2aaSAndroid Build Coastguard Worker    data_assembly = "$target_gen_dir/icudtl_dat.S"
20*c8dee2aaSAndroid Build Coastguard Worker  }
21*c8dee2aaSAndroid Build Coastguard Worker  data_dir = "../externals/icu/"
22*c8dee2aaSAndroid Build Coastguard Worker  if (target_cpu == "wasm") {
23*c8dee2aaSAndroid Build Coastguard Worker    # Use a super super super stripped down version for wasm,
24*c8dee2aaSAndroid Build Coastguard Worker    # which is the same thing flutter is using.
25*c8dee2aaSAndroid Build Coastguard Worker    data_dir += "flutter"
26*c8dee2aaSAndroid Build Coastguard Worker  } else if (is_android) {
27*c8dee2aaSAndroid Build Coastguard Worker    data_dir += "android"
28*c8dee2aaSAndroid Build Coastguard Worker  } else if (is_ios) {
29*c8dee2aaSAndroid Build Coastguard Worker    data_dir += "ios"
30*c8dee2aaSAndroid Build Coastguard Worker  } else {
31*c8dee2aaSAndroid Build Coastguard Worker    data_dir += "common"
32*c8dee2aaSAndroid Build Coastguard Worker  }
33*c8dee2aaSAndroid Build Coastguard Worker  action("make_data_assembly") {
34*c8dee2aaSAndroid Build Coastguard Worker    if (target_cpu == "wasm") {
35*c8dee2aaSAndroid Build Coastguard Worker      _u_icu_version_major_num =
36*c8dee2aaSAndroid Build Coastguard Worker          "74"  # defined in source/common/unicode/uvernum.h
37*c8dee2aaSAndroid Build Coastguard Worker      script = "make_data_cpp.py"
38*c8dee2aaSAndroid Build Coastguard Worker      inputs = [ "$data_dir/icudtl.dat" ]
39*c8dee2aaSAndroid Build Coastguard Worker      outputs = [ data_assembly ]
40*c8dee2aaSAndroid Build Coastguard Worker      args = [
41*c8dee2aaSAndroid Build Coastguard Worker        "icudt${_u_icu_version_major_num}_dat",
42*c8dee2aaSAndroid Build Coastguard Worker        rebase_path(inputs[0], root_build_dir),
43*c8dee2aaSAndroid Build Coastguard Worker        rebase_path(data_assembly, root_build_dir),
44*c8dee2aaSAndroid Build Coastguard Worker      ]
45*c8dee2aaSAndroid Build Coastguard Worker    } else {
46*c8dee2aaSAndroid Build Coastguard Worker      script = "../externals/icu/scripts/make_data_assembly.py"
47*c8dee2aaSAndroid Build Coastguard Worker      inputs = [ "$data_dir/icudtl.dat" ]
48*c8dee2aaSAndroid Build Coastguard Worker      outputs = [ "$data_assembly" ]
49*c8dee2aaSAndroid Build Coastguard Worker      args = [
50*c8dee2aaSAndroid Build Coastguard Worker        rebase_path(inputs[0], root_build_dir),
51*c8dee2aaSAndroid Build Coastguard Worker        rebase_path(data_assembly, root_build_dir),
52*c8dee2aaSAndroid Build Coastguard Worker      ]
53*c8dee2aaSAndroid Build Coastguard Worker      if (is_mac || is_ios) {
54*c8dee2aaSAndroid Build Coastguard Worker        args += [ "--mac" ]
55*c8dee2aaSAndroid Build Coastguard Worker      }
56*c8dee2aaSAndroid Build Coastguard Worker    }
57*c8dee2aaSAndroid Build Coastguard Worker  }
58*c8dee2aaSAndroid Build Coastguard Worker
59*c8dee2aaSAndroid Build Coastguard Worker  third_party("headers") {
60*c8dee2aaSAndroid Build Coastguard Worker    public_include_dirs = [
61*c8dee2aaSAndroid Build Coastguard Worker      "../externals/icu/source/common",
62*c8dee2aaSAndroid Build Coastguard Worker      "../externals/icu/source/i18n",
63*c8dee2aaSAndroid Build Coastguard Worker      ".",
64*c8dee2aaSAndroid Build Coastguard Worker    ]
65*c8dee2aaSAndroid Build Coastguard Worker  }
66*c8dee2aaSAndroid Build Coastguard Worker
67*c8dee2aaSAndroid Build Coastguard Worker  third_party("icu") {
68*c8dee2aaSAndroid Build Coastguard Worker    public_include_dirs = [
69*c8dee2aaSAndroid Build Coastguard Worker      "../externals/icu/source/common",
70*c8dee2aaSAndroid Build Coastguard Worker      "../externals/icu/source/i18n",
71*c8dee2aaSAndroid Build Coastguard Worker      ".",
72*c8dee2aaSAndroid Build Coastguard Worker    ]
73*c8dee2aaSAndroid Build Coastguard Worker    public_defines = [ "SK_USING_THIRD_PARTY_ICU" ]
74*c8dee2aaSAndroid Build Coastguard Worker    configs = [ "//gn/portable:add_rtti" ]
75*c8dee2aaSAndroid Build Coastguard Worker    defines = [
76*c8dee2aaSAndroid Build Coastguard Worker      # http://userguide.icu-project.org/howtouseicu
77*c8dee2aaSAndroid Build Coastguard Worker      "U_COMMON_IMPLEMENTATION",
78*c8dee2aaSAndroid Build Coastguard Worker      "U_STATIC_IMPLEMENTATION",
79*c8dee2aaSAndroid Build Coastguard Worker      "U_ENABLE_DYLOAD=0",
80*c8dee2aaSAndroid Build Coastguard Worker      "U_I18N_IMPLEMENTATION",
81*c8dee2aaSAndroid Build Coastguard Worker      "U_DISABLE_RENAMING=1",
82*c8dee2aaSAndroid Build Coastguard Worker      "U_USING_ICU_NAMESPACE=0",
83*c8dee2aaSAndroid Build Coastguard Worker
84*c8dee2aaSAndroid Build Coastguard Worker      # If we don't set this to zero, ICU will set it to 600,
85*c8dee2aaSAndroid Build Coastguard Worker      # which makes Macs set _POSIX_C_SOURCE=200112L,
86*c8dee2aaSAndroid Build Coastguard Worker      # which makes Macs set __DARWIN_C_LEVEL=_POSIX_C_SOURCE instead of =__DARWIN_C_FULL,
87*c8dee2aaSAndroid Build Coastguard Worker      # which makes <time.h> not expose timespec_get,
88*c8dee2aaSAndroid Build Coastguard Worker      # which makes recent libc++ <ctime> not #include-able with -std=c++17.
89*c8dee2aaSAndroid Build Coastguard Worker      "_XOPEN_SOURCE=0",
90*c8dee2aaSAndroid Build Coastguard Worker    ]
91*c8dee2aaSAndroid Build Coastguard Worker    if (target_cpu == "wasm") {
92*c8dee2aaSAndroid Build Coastguard Worker      # Tell ICU that we are a 32 bit platform, otherwise,
93*c8dee2aaSAndroid Build Coastguard Worker      # double-conversion-utils.h doesn't know how to operate.
94*c8dee2aaSAndroid Build Coastguard Worker      defines += [ "__i386__" ]
95*c8dee2aaSAndroid Build Coastguard Worker    }
96*c8dee2aaSAndroid Build Coastguard Worker    sources = icu_sources
97*c8dee2aaSAndroid Build Coastguard Worker    if (is_win) {
98*c8dee2aaSAndroid Build Coastguard Worker      deps = [ ":icudata" ]
99*c8dee2aaSAndroid Build Coastguard Worker      public_defines += [
100*c8dee2aaSAndroid Build Coastguard Worker        "U_NOEXCEPT=",
101*c8dee2aaSAndroid Build Coastguard Worker        "U_STATIC_IMPLEMENTATION",
102*c8dee2aaSAndroid Build Coastguard Worker      ]
103*c8dee2aaSAndroid Build Coastguard Worker      libs = [ "Advapi32.lib" ]
104*c8dee2aaSAndroid Build Coastguard Worker      sources += [
105*c8dee2aaSAndroid Build Coastguard Worker        "../externals/icu/source/stubdata/stubdata.cpp",
106*c8dee2aaSAndroid Build Coastguard Worker        "SkLoadICU.cpp",
107*c8dee2aaSAndroid Build Coastguard Worker      ]
108*c8dee2aaSAndroid Build Coastguard Worker    } else {
109*c8dee2aaSAndroid Build Coastguard Worker      sources += [ "$data_assembly" ]
110*c8dee2aaSAndroid Build Coastguard Worker      deps = [ ":make_data_assembly" ]
111*c8dee2aaSAndroid Build Coastguard Worker    }
112*c8dee2aaSAndroid Build Coastguard Worker  }
113*c8dee2aaSAndroid Build Coastguard Worker
114*c8dee2aaSAndroid Build Coastguard Worker  copy("icudata") {
115*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/icu/common/icudtl.dat" ]
116*c8dee2aaSAndroid Build Coastguard Worker    outputs = [ "$root_out_dir/icudtl.dat" ]
117*c8dee2aaSAndroid Build Coastguard Worker    data = [ "$root_out_dir/icudtl.dat" ]
118*c8dee2aaSAndroid Build Coastguard Worker  }
119*c8dee2aaSAndroid Build Coastguard Worker}
120