mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
8a88013900
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.
61 lines
1.9 KiB
Plaintext
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" ]
|
|
}
|
|
}
|