1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/utils/gn/build/symbol_exports.gni
Nico Weber 8a88013900 [gn build] Kind of port c7b3a91017d2 (libclang version script)
libclang is only built as static library in the GN build at the
moment, which means we now generate a .exports file form a version
script and then link.exe and ld64 inputs from the .exports file
but don't use the version script, but hey.
2021-07-26 22:12:06 -04:00

61 lines
1.9 KiB
Plaintext

# This file defines a template for using .export files.
#
# Parameters:
# exports_file (required)
# Path of the .exports file to use.
#
# Example use:
# symbol_exports("my_exports") {
# exports_file = "//foo/bar/my.exports"
# }
# ...
# shared_library("my_target") {
# deps = [ ":my_exports" ] # Adds correct ldflags.
# ...
# }
# Corresponds to add_llvm_symbol_exports() in the CMake build.
template("symbol_exports") {
# Create a platform-appropriate name for the temporary file.
linker_file = get_path_info(invoker.exports_file, "name")
if (current_os == "mac") {
linker_file = linker_file + "_symbols.txt"
} else if (current_os == "win") {
linker_file = linker_file + ".def"
} else {
linker_file = linker_file + ".script"
}
linker_file = "$target_gen_dir/$linker_file"
rebased_linker_file = rebase_path(linker_file, root_build_dir)
config_name = "${target_name}_config"
config(config_name) {
# FIXME: With this setup, targets are not relinked automatically
# when the input exports file is touched but nothing else changes.
# https://groups.google.com/a/chromium.org/g/gn-dev/c/sN09GYS1ufE
visibility = [ ":$target_name" ]
if (current_os == "mac") {
ldflags = [ "-Wl,-exported_symbols_list,$rebased_linker_file" ]
} else if (current_os == "win") {
ldflags = [ "/DEF:$rebased_linker_file" ]
} else {
ldflags = [ "-Wl,--version-script,$rebased_linker_file" ]
}
}
action(target_name) {
forward_variables_from(invoker, [ "deps" ])
script = "//llvm/utils/gn/build/symbol_exports.py"
inputs = [ invoker.exports_file ]
outputs = [ linker_file ]
args = [
"--format=" + current_os,
rebase_path(inputs[0], root_build_dir),
rebased_linker_file,
]
# Let targets depending on this receive the right ldflags.
public_configs = [ ":$config_name" ]
}
}