# Copyright 2021 Google Inc. # # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("../../gn/skia.gni") import("../../third_party/icu/icu.gni") import("skunicode.gni") declare_args() { skia_use_runtime_icu = false skunicode_tests_enabled = true } if (skia_use_icu || skia_use_client_icu || skia_use_libgrapheme || skia_use_icu4x) { config("public_config") { defines = [ "SK_UNICODE_AVAILABLE" ] if (skia_use_icu) { defines += [ "SK_UNICODE_ICU_IMPLEMENTATION" ] } if (skia_use_client_icu) { defines += [ "SK_UNICODE_CLIENT_IMPLEMENTATION" ] } if (skia_use_libgrapheme) { defines += [ "SK_UNICODE_LIBGRAPHEME_IMPLEMENTATION" ] } if (skia_use_icu4x) { defines += [ "SK_UNICODE_ICU4X_IMPLEMENTATION" ] } } config("cpp20") { if (is_win) { cflags_cc = [ "/std:c++20" ] } else { cflags_cc = [ "-std=c++20" ] } } config("module") { defines = [ "SKUNICODE_IMPLEMENTATION=1" ] if (is_component_build) { defines += [ "SKUNICODE_DLL" ] } } component("skunicode_core") { check_includes = false deps = [ "../..:skia" ] configs += [ ":module", "../../:skia_private", "../../third_party/icu/config:no_cxx", ] sources = skia_unicode_sources } if (skia_use_icu) { component("skunicode_icu") { check_includes = false deps = [ ":skunicode_core", "../..:skia", ] configs += [ ":module", "../../:skia_private", "../../third_party/icu/config:no_cxx", ] # These are explicitly *not* public defines because we don't want them # to leak to dependents. defines = [ "U_USING_ICU_NAMESPACE=0" ] if (!skia_use_system_icu) { defines += [ "U_DISABLE_RENAMING=1" ] } sources = skia_unicode_icu_bidi_sources sources += skia_unicode_bidi_full_sources sources += skia_unicode_icu_sources # only available for Android at the moment if (skia_use_runtime_icu && (is_android || is_linux)) { sources += skia_unicode_runtime_icu_sources defines += [ "SK_UNICODE_RUNTIME_ICU_AVAILABLE" ] deps += [ "//third_party/icu:headers" ] } else { sources += skia_unicode_builtin_icu_sources deps += [ "//third_party/icu" ] } } } if (skia_use_client_icu) { component("skunicode_client_icu") { check_includes = false deps = [ ":skunicode_core", "../..:skia", ] configs += [ ":module", "../../:skia_private", "../../third_party/icu/config:no_cxx", ] defines = [ # In order to use the bidi_subset at the same time as "full ICU", we must have # compiled icu with the given defines also being set. This is to make sure the functions # we call are given a suffix of "_skia" to prevent ODR violations if this "subset of ICU" # is compiled alongside a full ICU build also. # See https://chromium.googlesource.com/chromium/deps/icu.git/+/d94ab131bc8fef3bc17f356a628d8e4cd44d65d9/source/common/unicode/uversion.h # for how these are used. "U_DISABLE_RENAMING=0", "U_USING_ICU_NAMESPACE=0", "U_LIB_SUFFIX_C_NAME=_skia", "U_HAVE_LIB_SUFFIX=1", "U_DISABLE_VERSION_SUFFIX=1", ] sources = skia_unicode_icu_bidi_sources sources += skia_unicode_bidi_subset_sources sources += skia_unicode_client_icu_sources deps += [ skia_icu_bidi_third_party_dir ] } } if (skia_use_libgrapheme) { component("skunicode_libgrapheme") { check_includes = false deps = [ ":skunicode_core", "../..:skia", ] configs += [ ":module", "../../:skia_private", "../../third_party/icu/config:no_cxx", ] defines = [ "U_DISABLE_RENAMING=0", "U_USING_ICU_NAMESPACE=0", "U_LIB_SUFFIX_C_NAME=_skia", "U_HAVE_LIB_SUFFIX=1", "U_DISABLE_VERSION_SUFFIX=1", ] sources = skia_unicode_icu_bidi_sources sources += skia_unicode_bidi_subset_sources sources += skia_unicode_libgrapheme_sources deps += [ skia_icu_bidi_third_party_dir, skia_libgrapheme_third_party_dir, ] } } if (skia_use_icu4x) { component("skunicode_icu4x") { check_includes = false deps = [ ":skunicode_core", "../..:skia", ] configs += [ ":module", "../../:skia_private", "../../third_party/icu/config:no_cxx", ] sources = skia_unicode_icu4x_sources deps += [ "//third_party/icu4x" ] } } group("skunicode") { public_configs = [ ":public_config" ] public_deps = [ ":skunicode_core" ] # We have these different flavors of skunicode as independent components because # we have to set different defines for different builds of ICU. if (skia_use_icu) { public_deps += [ ":skunicode_icu" ] } if (skia_use_client_icu) { public_deps += [ ":skunicode_client_icu" ] } if (skia_use_libgrapheme) { public_deps += [ ":skunicode_libgrapheme" ] } if (skia_use_icu4x) { public_deps += [ ":skunicode_icu4x" ] } } if (defined(is_skia_standalone) && skia_enable_tools) { skia_source_set("tests") { if (skunicode_tests_enabled && (skia_use_icu || skia_use_libgrapheme || skia_use_icu4x)) { testonly = true deps = [ ":skunicode", "../..:skia", "../..:test", ] sources = skia_unicode_tests deps += [ skia_icu_bidi_third_party_dir ] } else { sources = [] } } } } else { group("skunicode") { } group("tests") { } }