| # Copyright 2022 Google LLC |
| # |
| # Use of this source code is governed by a ISC-License license that can be |
| # found in the LICENSE file. |
| |
| import("../third_party.gni") |
| |
| declare_args() { |
| UNICODE_VERSION = "15.0.0" |
| } |
| |
| config("c99") { |
| cflags_c = [] |
| if (is_win) { |
| cflags_c += [ "-std:c11" ] |
| } else { |
| cflags_c += [ "-std=c99" ] |
| } |
| } |
| |
| # Header generation only happens on the host. |
| # Ensure it will not be built for non-host even when implicitly building all targets. |
| if (current_toolchain == "//gn/toolchain:$host_toolchain") { |
| copy("copy_unicode_data") { |
| unicode_tools_dir = |
| "../externals/unicodetools/unicodetools/data/ucd/$UNICODE_VERSION" |
| sources = [ |
| "$unicode_tools_dir/BidiBrackets.txt", |
| "$unicode_tools_dir/BidiCharacterTest.txt", |
| "$unicode_tools_dir/BidiMirroring.txt", |
| "$unicode_tools_dir/BidiTest.txt", |
| "$unicode_tools_dir/DerivedCoreProperties.txt", |
| "$unicode_tools_dir/EastAsianWidth.txt", |
| "$unicode_tools_dir/LineBreak.txt", |
| "$unicode_tools_dir/SpecialCasing.txt", |
| "$unicode_tools_dir/UnicodeData.txt", |
| "$unicode_tools_dir/auxiliary/GraphemeBreakProperty.txt", |
| "$unicode_tools_dir/auxiliary/GraphemeBreakTest.txt", |
| "$unicode_tools_dir/auxiliary/LineBreakTest.txt", |
| "$unicode_tools_dir/auxiliary/SentenceBreakProperty.txt", |
| "$unicode_tools_dir/auxiliary/SentenceBreakTest.txt", |
| "$unicode_tools_dir/auxiliary/WordBreakProperty.txt", |
| "$unicode_tools_dir/auxiliary/WordBreakTest.txt", |
| "$unicode_tools_dir/emoji/emoji-data.txt", |
| "$unicode_tools_dir/extracted/DerivedBidiClass.txt", |
| ] |
| outputs = |
| [ "$root_gen_dir/third_party/libgrapheme/data/{{source_file_part}}" ] |
| } |
| |
| template("compile_tool") { |
| executable(target_name) { |
| forward_variables_from(invoker, "*", [ "deps" ]) |
| if (defined(invoker.deps)) { |
| deps += invoker.deps |
| } |
| configs += [ ":c99" ] |
| sources += [ "../externals/libgrapheme/gen/util.c" ] |
| } |
| } |
| |
| compile_tool("bidirectional") { |
| sources = [ "../externals/libgrapheme/gen/bidirectional.c" ] |
| } |
| |
| compile_tool("case") { |
| sources = [ "../externals/libgrapheme/gen/case.c" ] |
| } |
| |
| compile_tool("character") { |
| sources = [ "../externals/libgrapheme/gen/character.c" ] |
| } |
| |
| compile_tool("line") { |
| sources = [ "../externals/libgrapheme/gen/line.c" ] |
| } |
| |
| compile_tool("sentence") { |
| sources = [ "../externals/libgrapheme/gen/sentence.c" ] |
| } |
| |
| compile_tool("word") { |
| sources = [ "../externals/libgrapheme/gen/word.c" ] |
| } |
| |
| # Run an executable that will produce a header |
| action_foreach("generate_headers") { |
| script = "generate_headers.py" |
| cmd_dir = rebase_path(root_out_dir) |
| args = [ |
| "$cmd_dir/{{source_name_part}}", |
| rebase_path( |
| "$root_gen_dir/third_party/libgrapheme/gen/{{source_name_part}}.h", |
| root_build_dir), |
| rebase_path("$root_gen_dir/third_party/libgrapheme", root_build_dir), |
| ] |
| _src = "../externals/libgrapheme/gen" |
| sources = [ |
| "$_src/bidirectional.c", |
| "$_src/case.c", |
| "$_src/character.c", |
| "$_src/line.c", |
| "$_src/sentence.c", |
| "$_src/word.c", |
| ] |
| outputs = |
| [ "$root_gen_dir/third_party/libgrapheme/gen/{{source_name_part}}.h" ] |
| deps = [ |
| ":bidirectional", |
| ":case", |
| ":character", |
| ":copy_unicode_data", |
| ":line", |
| ":sentence", |
| ":word", |
| ] |
| } |
| } |
| |
| # libgrapheme is built for the target and so must be able to always see headers and headers_config. |
| config("headers_config") { |
| if (current_toolchain == "//gn/toolchain:$host_toolchain") { |
| include_dirs = [ "$root_gen_dir/third_party/libgrapheme/gen" ] |
| } |
| } |
| |
| source_set("headers") { |
| if (current_toolchain == "//gn/toolchain:$host_toolchain") { |
| # Prevent :generate_headers from being run when building all targets. |
| sources = get_target_outputs(":generate_headers") |
| |
| #get_target_outputs does not actually depend on the outputs |
| deps = [ ":generate_headers" ] |
| } |
| } |
| |
| third_party("libgrapheme") { |
| public_include_dirs = [ "../externals/libgrapheme" ] |
| _src = "../externals/libgrapheme/src" |
| |
| configs = [ |
| ":c99", |
| ":headers_config(//gn/toolchain:$host_toolchain)", |
| ] |
| |
| sources = [ |
| "$_src/bidirectional.c", |
| "$_src/case.c", |
| "$_src/character.c", |
| "$_src/line.c", |
| "$_src/sentence.c", |
| "$_src/utf8.c", |
| "$_src/util.c", |
| "$_src/word.c", |
| ] |
| |
| deps = [ ":headers(//gn/toolchain:$host_toolchain)" ] |
| } |