forked from OSchip/llvm-project
gn build: Create a template for unix toolchains.
Also change the toolchain description to use current_os instead of host_os so that the template can be used for cross builds, and add a current_os to the win toolchain to match the unix toolchain. Differential Revision: https://reviews.llvm.org/D56576 llvm-svn: 350977
This commit is contained in:
parent
7d7e3256cd
commit
ad7f1d605c
|
@ -9,20 +9,9 @@ declare_args() {
|
|||
}
|
||||
}
|
||||
|
||||
toolchain("unix") {
|
||||
cc = "cc"
|
||||
cxx = "c++"
|
||||
|
||||
if (clang_base_path != "") {
|
||||
cc = "$clang_base_path/bin/clang"
|
||||
cxx = "$clang_base_path/bin/clang++"
|
||||
}
|
||||
|
||||
ld = cxx # Don't use goma wrapper for linking.
|
||||
if (use_goma) {
|
||||
cc = "$goma_dir/gomacc $cc"
|
||||
cxx = "$goma_dir/gomacc $cxx"
|
||||
}
|
||||
template("unix_toolchain") {
|
||||
toolchain(target_name) {
|
||||
forward_variables_from(invoker, "*")
|
||||
|
||||
tool("cc") {
|
||||
depfile = "{{output}}.d"
|
||||
|
@ -45,12 +34,12 @@ toolchain("unix") {
|
|||
}
|
||||
|
||||
tool("alink") {
|
||||
if (host_os == "mac") {
|
||||
if (current_os == "mac") {
|
||||
command = "libtool -static -no_warning_for_no_symbols {{arflags}} -o {{output}} {{inputs}}"
|
||||
} else {
|
||||
# Remove the output file first so that ar doesn't try to modify the
|
||||
# existing file.
|
||||
command = "rm -f {{output}} && ar rcsDT {{arflags}} {{output}} {{inputs}}"
|
||||
command = "rm -f {{output}} && $ar rcsDT {{arflags}} {{output}} {{inputs}}"
|
||||
}
|
||||
description = "AR {{output}}"
|
||||
outputs = [
|
||||
|
@ -62,7 +51,7 @@ toolchain("unix") {
|
|||
|
||||
tool("solink") {
|
||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||
if (host_os == "mac") {
|
||||
if (current_os == "mac") {
|
||||
command = "$ld -shared {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
||||
default_output_extension = ".dylib"
|
||||
} else {
|
||||
|
@ -81,7 +70,7 @@ toolchain("unix") {
|
|||
|
||||
tool("solink_module") {
|
||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||
if (host_os == "mac") {
|
||||
if (current_os == "mac") {
|
||||
command = "$ld -shared {{ldflags}} -Wl,-flat_namespace -Wl,-undefined,suppress -o $outfile {{libs}} {{inputs}}"
|
||||
default_output_extension = ".dylib"
|
||||
} else {
|
||||
|
@ -98,7 +87,7 @@ toolchain("unix") {
|
|||
|
||||
tool("link") {
|
||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||
if (host_os == "mac") {
|
||||
if (current_os == "mac") {
|
||||
command = "$ld {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
||||
} else {
|
||||
command = "$ld {{ldflags}} -o $outfile {{libs}} -Wl,--start-group {{inputs}} -Wl,--end-group"
|
||||
|
@ -124,6 +113,29 @@ toolchain("unix") {
|
|||
description = "STAMP {{output}}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
unix_toolchain("unix") {
|
||||
cc = "cc"
|
||||
cxx = "c++"
|
||||
|
||||
if (clang_base_path != "") {
|
||||
cc = "$clang_base_path/bin/clang"
|
||||
cxx = "$clang_base_path/bin/clang++"
|
||||
}
|
||||
|
||||
ld = cxx # Don't use goma wrapper for linking.
|
||||
if (use_goma) {
|
||||
cc = "$goma_dir/gomacc $cc"
|
||||
cxx = "$goma_dir/gomacc $cxx"
|
||||
}
|
||||
|
||||
ar = "ar"
|
||||
|
||||
toolchain_args = {
|
||||
current_os = host_os
|
||||
}
|
||||
}
|
||||
|
||||
toolchain("win") {
|
||||
cl = "cl"
|
||||
|
@ -228,4 +240,8 @@ toolchain("win") {
|
|||
command = "cmd /c type nul > {{output}}"
|
||||
description = "STAMP {{output}}"
|
||||
}
|
||||
|
||||
toolchain_args = {
|
||||
current_os = "win"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue