# Copyright 2016 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.gni")
import("icu.gni")

if (skia_use_system_icu) {
  system("icu") {
    libs = [ "icuuc" ]
    defines = [ "U_USING_ICU_NAMESPACE=0" ]
  }
} else {
  if (target_cpu == "wasm") {
    data_assembly = "$target_gen_dir/icudtl_dat.cpp"
  } else {
    data_assembly = "$target_gen_dir/icudtl_dat.S"
  }
  data_dir = "../externals/icu/"
  if (target_cpu == "wasm") {
    # Use a super super super stripped down version for wasm,
    # which is the same thing flutter is using.
    data_dir += "flutter"
  } else if (is_android) {
    data_dir += "android"
  } else if (is_ios) {
    data_dir += "ios"
  } else {
    data_dir += "common"
  }
  action("make_data_assembly") {
    if (target_cpu == "wasm") {
      _u_icu_version_major_num =
          "78"  # defined in source/common/unicode/uvernum.h
      script = "make_data_cpp.py"
      inputs = [ "$data_dir/icudtl.dat" ]
      outputs = [ data_assembly ]
      args = [
        "icudt${_u_icu_version_major_num}_dat",
        rebase_path(inputs[0], root_build_dir),
        rebase_path(data_assembly, root_build_dir),
      ]
    } else {
      script = "../externals/icu/scripts/make_data_assembly.py"
      inputs = [ "$data_dir/icudtl.dat" ]
      outputs = [ "$data_assembly" ]
      args = [
        rebase_path(inputs[0], root_build_dir),
        rebase_path(data_assembly, root_build_dir),
      ]
      if (is_mac || is_ios) {
        args += [ "--mac" ]
      }
    }
  }

  third_party("headers") {
    public_include_dirs = [
      "../externals/icu/source/common",
      "../externals/icu/source/i18n",
      ".",
    ]
  }

  third_party("icu") {
    public_include_dirs = [
      "../externals/icu/source/common",
      "../externals/icu/source/i18n",
      ".",
    ]
    public_defines = [ "SK_USING_THIRD_PARTY_ICU" ]
    configs = [ "//gn/portable:add_rtti" ]
    defines = [
      # http://userguide.icu-project.org/howtouseicu
      "U_COMMON_IMPLEMENTATION",
      "U_STATIC_IMPLEMENTATION",
      "U_ENABLE_DYLOAD=0",
      "U_I18N_IMPLEMENTATION",
      "U_DISABLE_RENAMING=1",
      "U_USING_ICU_NAMESPACE=0",

      # If we don't set this to zero, ICU will set it to 600,
      # which makes Macs set _POSIX_C_SOURCE=200112L,
      # which makes Macs set __DARWIN_C_LEVEL=_POSIX_C_SOURCE instead of =__DARWIN_C_FULL,
      # which makes <time.h> not expose timespec_get,
      # which makes recent libc++ <ctime> not #include-able with -std=c++17.
      "_XOPEN_SOURCE=0",
    ]
    if (target_cpu == "wasm") {
      # Tell ICU that we are a 32 bit platform, otherwise,
      # double-conversion-utils.h doesn't know how to operate.
      defines += [ "__i386__" ]
    }
    sources = icu_sources
    if (is_win) {
      deps = [ ":icudata" ]
      public_defines += [
        "U_NOEXCEPT=",
        "U_STATIC_IMPLEMENTATION",
      ]
      libs = [ "Advapi32.lib" ]
      sources += [
        "../externals/icu/source/stubdata/stubdata.cpp",
        "SkLoadICU.cpp",
      ]
    } else {
      sources += [ "$data_assembly" ]
      deps = [ ":make_data_assembly" ]
    }
  }

  copy("icudata") {
    sources = [ "../externals/icu/common/icudtl.dat" ]
    outputs = [ "$root_out_dir/icudtl.dat" ]
    data = [ "$root_out_dir/icudtl.dat" ]
  }
}
