xref: /aosp_15_r20/external/skia/third_party/libgrapheme/BUILD.gn (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2022 Google LLC
2*c8dee2aaSAndroid Build Coastguard Worker#
3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a ISC-License license that can be
4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
5*c8dee2aaSAndroid Build Coastguard Worker
6*c8dee2aaSAndroid Build Coastguard Workerimport("../third_party.gni")
7*c8dee2aaSAndroid Build Coastguard Worker
8*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
9*c8dee2aaSAndroid Build Coastguard Worker  UNICODE_VERSION = "15.0.0"
10*c8dee2aaSAndroid Build Coastguard Worker}
11*c8dee2aaSAndroid Build Coastguard Worker
12*c8dee2aaSAndroid Build Coastguard Workerconfig("c99") {
13*c8dee2aaSAndroid Build Coastguard Worker  cflags_c = []
14*c8dee2aaSAndroid Build Coastguard Worker  if (is_win) {
15*c8dee2aaSAndroid Build Coastguard Worker    cflags_c += [ "-std:c11" ]
16*c8dee2aaSAndroid Build Coastguard Worker  } else {
17*c8dee2aaSAndroid Build Coastguard Worker    cflags_c += [ "-std=c99" ]
18*c8dee2aaSAndroid Build Coastguard Worker  }
19*c8dee2aaSAndroid Build Coastguard Worker}
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker# Header generation only happens on the host.
22*c8dee2aaSAndroid Build Coastguard Worker# Ensure it will not be built for non-host even when implicitly building all targets.
23*c8dee2aaSAndroid Build Coastguard Workerif (current_toolchain == "//gn/toolchain:$host_toolchain") {
24*c8dee2aaSAndroid Build Coastguard Worker  copy("copy_unicode_data") {
25*c8dee2aaSAndroid Build Coastguard Worker    unicode_tools_dir =
26*c8dee2aaSAndroid Build Coastguard Worker        "../externals/unicodetools/unicodetools/data/ucd/$UNICODE_VERSION"
27*c8dee2aaSAndroid Build Coastguard Worker    sources = [
28*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/BidiBrackets.txt",
29*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/BidiCharacterTest.txt",
30*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/BidiMirroring.txt",
31*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/BidiTest.txt",
32*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/DerivedCoreProperties.txt",
33*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/EastAsianWidth.txt",
34*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/LineBreak.txt",
35*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/SpecialCasing.txt",
36*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/UnicodeData.txt",
37*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/GraphemeBreakProperty.txt",
38*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/GraphemeBreakTest.txt",
39*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/LineBreakTest.txt",
40*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/SentenceBreakProperty.txt",
41*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/SentenceBreakTest.txt",
42*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/WordBreakProperty.txt",
43*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/auxiliary/WordBreakTest.txt",
44*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/emoji/emoji-data.txt",
45*c8dee2aaSAndroid Build Coastguard Worker      "$unicode_tools_dir/extracted/DerivedBidiClass.txt",
46*c8dee2aaSAndroid Build Coastguard Worker    ]
47*c8dee2aaSAndroid Build Coastguard Worker    outputs =
48*c8dee2aaSAndroid Build Coastguard Worker        [ "$root_gen_dir/third_party/libgrapheme/data/{{source_file_part}}" ]
49*c8dee2aaSAndroid Build Coastguard Worker  }
50*c8dee2aaSAndroid Build Coastguard Worker
51*c8dee2aaSAndroid Build Coastguard Worker  template("compile_tool") {
52*c8dee2aaSAndroid Build Coastguard Worker    executable(target_name) {
53*c8dee2aaSAndroid Build Coastguard Worker      forward_variables_from(invoker, "*", [ "deps" ])
54*c8dee2aaSAndroid Build Coastguard Worker      if (defined(invoker.deps)) {
55*c8dee2aaSAndroid Build Coastguard Worker        deps += invoker.deps
56*c8dee2aaSAndroid Build Coastguard Worker      }
57*c8dee2aaSAndroid Build Coastguard Worker      configs += [ ":c99" ]
58*c8dee2aaSAndroid Build Coastguard Worker      sources += [ "../externals/libgrapheme/gen/util.c" ]
59*c8dee2aaSAndroid Build Coastguard Worker    }
60*c8dee2aaSAndroid Build Coastguard Worker  }
61*c8dee2aaSAndroid Build Coastguard Worker
62*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("bidirectional") {
63*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/bidirectional.c" ]
64*c8dee2aaSAndroid Build Coastguard Worker  }
65*c8dee2aaSAndroid Build Coastguard Worker
66*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("case") {
67*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/case.c" ]
68*c8dee2aaSAndroid Build Coastguard Worker  }
69*c8dee2aaSAndroid Build Coastguard Worker
70*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("character") {
71*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/character.c" ]
72*c8dee2aaSAndroid Build Coastguard Worker  }
73*c8dee2aaSAndroid Build Coastguard Worker
74*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("line") {
75*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/line.c" ]
76*c8dee2aaSAndroid Build Coastguard Worker  }
77*c8dee2aaSAndroid Build Coastguard Worker
78*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("sentence") {
79*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/sentence.c" ]
80*c8dee2aaSAndroid Build Coastguard Worker  }
81*c8dee2aaSAndroid Build Coastguard Worker
82*c8dee2aaSAndroid Build Coastguard Worker  compile_tool("word") {
83*c8dee2aaSAndroid Build Coastguard Worker    sources = [ "../externals/libgrapheme/gen/word.c" ]
84*c8dee2aaSAndroid Build Coastguard Worker  }
85*c8dee2aaSAndroid Build Coastguard Worker
86*c8dee2aaSAndroid Build Coastguard Worker  # Run an executable that will produce a header
87*c8dee2aaSAndroid Build Coastguard Worker  action_foreach("generate_headers") {
88*c8dee2aaSAndroid Build Coastguard Worker    script = "generate_headers.py"
89*c8dee2aaSAndroid Build Coastguard Worker    cmd_dir = rebase_path(root_out_dir)
90*c8dee2aaSAndroid Build Coastguard Worker    args = [
91*c8dee2aaSAndroid Build Coastguard Worker      "$cmd_dir/{{source_name_part}}",
92*c8dee2aaSAndroid Build Coastguard Worker      rebase_path(
93*c8dee2aaSAndroid Build Coastguard Worker          "$root_gen_dir/third_party/libgrapheme/gen/{{source_name_part}}.h",
94*c8dee2aaSAndroid Build Coastguard Worker          root_build_dir),
95*c8dee2aaSAndroid Build Coastguard Worker      rebase_path("$root_gen_dir/third_party/libgrapheme", root_build_dir),
96*c8dee2aaSAndroid Build Coastguard Worker    ]
97*c8dee2aaSAndroid Build Coastguard Worker    _src = "../externals/libgrapheme/gen"
98*c8dee2aaSAndroid Build Coastguard Worker    sources = [
99*c8dee2aaSAndroid Build Coastguard Worker      "$_src/bidirectional.c",
100*c8dee2aaSAndroid Build Coastguard Worker      "$_src/case.c",
101*c8dee2aaSAndroid Build Coastguard Worker      "$_src/character.c",
102*c8dee2aaSAndroid Build Coastguard Worker      "$_src/line.c",
103*c8dee2aaSAndroid Build Coastguard Worker      "$_src/sentence.c",
104*c8dee2aaSAndroid Build Coastguard Worker      "$_src/word.c",
105*c8dee2aaSAndroid Build Coastguard Worker    ]
106*c8dee2aaSAndroid Build Coastguard Worker    outputs =
107*c8dee2aaSAndroid Build Coastguard Worker        [ "$root_gen_dir/third_party/libgrapheme/gen/{{source_name_part}}.h" ]
108*c8dee2aaSAndroid Build Coastguard Worker    deps = [
109*c8dee2aaSAndroid Build Coastguard Worker      ":bidirectional",
110*c8dee2aaSAndroid Build Coastguard Worker      ":case",
111*c8dee2aaSAndroid Build Coastguard Worker      ":character",
112*c8dee2aaSAndroid Build Coastguard Worker      ":copy_unicode_data",
113*c8dee2aaSAndroid Build Coastguard Worker      ":line",
114*c8dee2aaSAndroid Build Coastguard Worker      ":sentence",
115*c8dee2aaSAndroid Build Coastguard Worker      ":word",
116*c8dee2aaSAndroid Build Coastguard Worker    ]
117*c8dee2aaSAndroid Build Coastguard Worker  }
118*c8dee2aaSAndroid Build Coastguard Worker}
119*c8dee2aaSAndroid Build Coastguard Worker
120*c8dee2aaSAndroid Build Coastguard Worker# libgrapheme is built for the target and so must be able to always see headers and headers_config.
121*c8dee2aaSAndroid Build Coastguard Workerconfig("headers_config") {
122*c8dee2aaSAndroid Build Coastguard Worker  if (current_toolchain == "//gn/toolchain:$host_toolchain") {
123*c8dee2aaSAndroid Build Coastguard Worker    include_dirs = [ "$root_gen_dir/third_party/libgrapheme/gen" ]
124*c8dee2aaSAndroid Build Coastguard Worker  }
125*c8dee2aaSAndroid Build Coastguard Worker}
126*c8dee2aaSAndroid Build Coastguard Worker
127*c8dee2aaSAndroid Build Coastguard Workersource_set("headers") {
128*c8dee2aaSAndroid Build Coastguard Worker  if (current_toolchain == "//gn/toolchain:$host_toolchain") {
129*c8dee2aaSAndroid Build Coastguard Worker    # Prevent :generate_headers from being run when building all targets.
130*c8dee2aaSAndroid Build Coastguard Worker    sources = get_target_outputs(":generate_headers")
131*c8dee2aaSAndroid Build Coastguard Worker
132*c8dee2aaSAndroid Build Coastguard Worker    #get_target_outputs does not actually depend on the outputs
133*c8dee2aaSAndroid Build Coastguard Worker    deps = [ ":generate_headers" ]
134*c8dee2aaSAndroid Build Coastguard Worker  }
135*c8dee2aaSAndroid Build Coastguard Worker}
136*c8dee2aaSAndroid Build Coastguard Worker
137*c8dee2aaSAndroid Build Coastguard Workerthird_party("libgrapheme") {
138*c8dee2aaSAndroid Build Coastguard Worker  public_include_dirs = [ "../externals/libgrapheme" ]
139*c8dee2aaSAndroid Build Coastguard Worker  _src = "../externals/libgrapheme/src"
140*c8dee2aaSAndroid Build Coastguard Worker
141*c8dee2aaSAndroid Build Coastguard Worker  configs = [
142*c8dee2aaSAndroid Build Coastguard Worker    ":c99",
143*c8dee2aaSAndroid Build Coastguard Worker    ":headers_config(//gn/toolchain:$host_toolchain)",
144*c8dee2aaSAndroid Build Coastguard Worker  ]
145*c8dee2aaSAndroid Build Coastguard Worker
146*c8dee2aaSAndroid Build Coastguard Worker  sources = [
147*c8dee2aaSAndroid Build Coastguard Worker    "$_src/bidirectional.c",
148*c8dee2aaSAndroid Build Coastguard Worker    "$_src/case.c",
149*c8dee2aaSAndroid Build Coastguard Worker    "$_src/character.c",
150*c8dee2aaSAndroid Build Coastguard Worker    "$_src/line.c",
151*c8dee2aaSAndroid Build Coastguard Worker    "$_src/sentence.c",
152*c8dee2aaSAndroid Build Coastguard Worker    "$_src/utf8.c",
153*c8dee2aaSAndroid Build Coastguard Worker    "$_src/util.c",
154*c8dee2aaSAndroid Build Coastguard Worker    "$_src/word.c",
155*c8dee2aaSAndroid Build Coastguard Worker  ]
156*c8dee2aaSAndroid Build Coastguard Worker
157*c8dee2aaSAndroid Build Coastguard Worker  deps = [ ":headers(//gn/toolchain:$host_toolchain)" ]
158*c8dee2aaSAndroid Build Coastguard Worker}
159