mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-25 00:50:22 +00:00
Meta: Add compiled_action from LLVM, use it to generate TZDB sources
This commit is contained in:
parent
0e24bfb464
commit
b1e94a02fe
Notes:
sideshowbarker
2024-07-17 00:47:29 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/b1e94a02fe Pull-request: https://github.com/SerenityOS/serenity/pull/18663 Reviewed-by: https://github.com/BenWiederhake Reviewed-by: https://github.com/BertalanD Reviewed-by: https://github.com/nico
3 changed files with 112 additions and 2 deletions
77
Meta/gn/build/compiled_action.gni
Normal file
77
Meta/gn/build/compiled_action.gni
Normal file
|
@ -0,0 +1,77 @@
|
|||
# Defines compiled_action().
|
||||
#
|
||||
# compiled_action() is like action(), except that it runs a built binary
|
||||
# instead of a script.
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# tool (required)
|
||||
# [label] Label of the tool to run. This should be an executable, and
|
||||
# this label should not include a toolchain (anything in parens). This
|
||||
# tool will be built for the host.
|
||||
#
|
||||
# outputs (required)
|
||||
# [list of files] Same meaning as for action().
|
||||
#
|
||||
# args (required)
|
||||
# [list of strings] Flags to pass to the built binary. Almost identical
|
||||
# to action()'s `args`, except that `tool` is implicitly added as first
|
||||
# element.
|
||||
#
|
||||
# depfile
|
||||
# inputs
|
||||
# public_configs
|
||||
# visibility (all optional)
|
||||
# Same meaning as for action().
|
||||
#
|
||||
# Example use:
|
||||
#
|
||||
# compiled_action("run_my_tool") {
|
||||
# tool = "//tools/something:mytool"
|
||||
# inputs = [ "my_input_file.txt" ]
|
||||
# outputs = [ "$target_gen_dir/mysource.inc" ]
|
||||
# args = [
|
||||
# rebase_path(inputs[0], root_build_dir),
|
||||
# rebase_path(outputs[0], root_build_dir),
|
||||
# ]
|
||||
# }
|
||||
#
|
||||
# You would typically declare your tool like this:
|
||||
# if (host_toolchain == current_toolchain) {
|
||||
# executable("mytool") {
|
||||
# ...
|
||||
# }
|
||||
# }
|
||||
# The if statement around the executable is optional. It means "I only care
|
||||
# about this target in the host toolchain". Usually this is what you want, and
|
||||
# saves unnecessarily compiling your tool for the target platform. If you
|
||||
# need a target build of your tool as well, omit the if statement.
|
||||
|
||||
template("compiled_action") {
|
||||
assert(defined(invoker.args), "must set 'args' in $target_name")
|
||||
assert(defined(invoker.outputs), "must set 'outputs' in $target_name")
|
||||
assert(defined(invoker.tool), "must set 'tool' in $target_name")
|
||||
assert(!defined(invoker.sources),
|
||||
"use 'inputs' instead of 'sources' in $target_name")
|
||||
|
||||
action(target_name) {
|
||||
forward_variables_from(invoker,
|
||||
[
|
||||
"depfile",
|
||||
"inputs",
|
||||
"outputs",
|
||||
"public_configs",
|
||||
"testonly",
|
||||
"visibility",
|
||||
])
|
||||
host_tool = invoker.tool + "($host_toolchain)"
|
||||
host_executable = get_label_info(host_tool, "root_out_dir") + "/bin/" +
|
||||
get_label_info(host_tool, "name")
|
||||
deps = [ host_tool ]
|
||||
if (defined(invoker.deps)) {
|
||||
deps += invoker.deps
|
||||
}
|
||||
script = "//Meta/gn/build/run_compiled_binary.py"
|
||||
args = [ rebase_path(host_executable, root_build_dir) ] + invoker.args
|
||||
}
|
||||
}
|
8
Meta/gn/build/run_compiled_binary.py
Normal file
8
Meta/gn/build/run_compiled_binary.py
Normal file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Runs a built binary."""
|
||||
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
# Prefix with ./ to run built binary, not arbitrary stuff from PATH.
|
||||
sys.exit(subprocess.call(['./' + sys.argv[1]] + sys.argv[2:]))
|
|
@ -39,11 +39,35 @@ if (enable_timezone_database_download) {
|
|||
"southamerica",
|
||||
]
|
||||
}
|
||||
compiled_action("generate_timezone_sources") {
|
||||
tool = "//Meta/Lagom/Tools/CodeGenerators/LibTimeZone:GenerateTimeZoneData"
|
||||
deps = [ ":timezone_database_files" ]
|
||||
inputs = get_target_outputs(":timezone_database_files")
|
||||
outputs = [
|
||||
"$target_gen_dir/TimeZoneData.h",
|
||||
"$target_gen_dir/TimeZoneData.cpp",
|
||||
]
|
||||
args = [
|
||||
"-h",
|
||||
rebase_path(outputs[0], root_build_dir),
|
||||
"-c",
|
||||
rebase_path(outputs[1], root_build_dir),
|
||||
"-z",
|
||||
|
||||
# NOTE: Coordinates file must be inputs[0]
|
||||
]
|
||||
foreach(data_file, inputs) {
|
||||
args += [ rebase_path(data_file, root_build_dir) ]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
source_set("LibTimeZone") {
|
||||
output_name = "timezone"
|
||||
include_dirs = [ "//Userland/Libraries" ]
|
||||
include_dirs = [
|
||||
"//Userland/Libraries",
|
||||
"$target_gen_dir/..",
|
||||
]
|
||||
sources = [
|
||||
"Forward.h",
|
||||
"TimeZone.cpp",
|
||||
|
@ -54,6 +78,7 @@ source_set("LibTimeZone") {
|
|||
"//Userland/Libraries/LibCore",
|
||||
]
|
||||
if (enable_timezone_database_download) {
|
||||
deps += [ ":timezone_database_files" ]
|
||||
deps += [ ":generate_timezone_sources" ]
|
||||
sources += get_target_outputs(":generate_timezone_sources")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue