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