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,7 +9,113 @@ declare_args() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
toolchain("unix") {
|
template("unix_toolchain") {
|
||||||
|
toolchain(target_name) {
|
||||||
|
forward_variables_from(invoker, "*")
|
||||||
|
|
||||||
|
tool("cc") {
|
||||||
|
depfile = "{{output}}.d"
|
||||||
|
command = "$cc -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}"
|
||||||
|
depsformat = "gcc"
|
||||||
|
description = "CC {{output}}"
|
||||||
|
outputs = [
|
||||||
|
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("cxx") {
|
||||||
|
depfile = "{{output}}.d"
|
||||||
|
command = "$cxx -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}"
|
||||||
|
depsformat = "gcc"
|
||||||
|
description = "CXX {{output}}"
|
||||||
|
outputs = [
|
||||||
|
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("alink") {
|
||||||
|
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}}"
|
||||||
|
}
|
||||||
|
description = "AR {{output}}"
|
||||||
|
outputs = [
|
||||||
|
"{{output_dir}}/{{target_output_name}}.a",
|
||||||
|
]
|
||||||
|
output_prefix = "lib"
|
||||||
|
default_output_dir = "{{root_out_dir}}/lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("solink") {
|
||||||
|
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||||
|
if (current_os == "mac") {
|
||||||
|
command = "$ld -shared {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
||||||
|
default_output_extension = ".dylib"
|
||||||
|
} else {
|
||||||
|
command =
|
||||||
|
"$ld -shared {{ldflags}} -Wl,-z,defs -o $outfile {{libs}} {{inputs}}"
|
||||||
|
default_output_extension = ".so"
|
||||||
|
}
|
||||||
|
description = "SOLINK $outfile"
|
||||||
|
outputs = [
|
||||||
|
outfile,
|
||||||
|
]
|
||||||
|
lib_switch = "-l"
|
||||||
|
output_prefix = "lib"
|
||||||
|
default_output_dir = "{{root_out_dir}}/lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("solink_module") {
|
||||||
|
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||||
|
if (current_os == "mac") {
|
||||||
|
command = "$ld -shared {{ldflags}} -Wl,-flat_namespace -Wl,-undefined,suppress -o $outfile {{libs}} {{inputs}}"
|
||||||
|
default_output_extension = ".dylib"
|
||||||
|
} else {
|
||||||
|
command = "$ld -shared {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
||||||
|
default_output_extension = ".so"
|
||||||
|
}
|
||||||
|
description = "SOLINK $outfile"
|
||||||
|
outputs = [
|
||||||
|
outfile,
|
||||||
|
]
|
||||||
|
lib_switch = "-l"
|
||||||
|
default_output_dir = "{{root_out_dir}}/lib"
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("link") {
|
||||||
|
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
||||||
|
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"
|
||||||
|
}
|
||||||
|
description = "LINK $outfile"
|
||||||
|
outputs = [
|
||||||
|
outfile,
|
||||||
|
]
|
||||||
|
lib_switch = "-l"
|
||||||
|
|
||||||
|
# Setting this allows targets to override the default executable output by
|
||||||
|
# setting output_dir.
|
||||||
|
default_output_dir = "{{root_out_dir}}/bin"
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("copy") {
|
||||||
|
command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
|
||||||
|
description = "COPY {{source}} {{output}}"
|
||||||
|
}
|
||||||
|
|
||||||
|
tool("stamp") {
|
||||||
|
command = "touch {{output}}"
|
||||||
|
description = "STAMP {{output}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unix_toolchain("unix") {
|
||||||
cc = "cc"
|
cc = "cc"
|
||||||
cxx = "c++"
|
cxx = "c++"
|
||||||
|
|
||||||
|
@ -24,104 +130,10 @@ toolchain("unix") {
|
||||||
cxx = "$goma_dir/gomacc $cxx"
|
cxx = "$goma_dir/gomacc $cxx"
|
||||||
}
|
}
|
||||||
|
|
||||||
tool("cc") {
|
ar = "ar"
|
||||||
depfile = "{{output}}.d"
|
|
||||||
command = "$cc -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}"
|
|
||||||
depsformat = "gcc"
|
|
||||||
description = "CC {{output}}"
|
|
||||||
outputs = [
|
|
||||||
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("cxx") {
|
toolchain_args = {
|
||||||
depfile = "{{output}}.d"
|
current_os = host_os
|
||||||
command = "$cxx -MMD -MF $depfile -o {{output}} -c {{source}} {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}"
|
|
||||||
depsformat = "gcc"
|
|
||||||
description = "CXX {{output}}"
|
|
||||||
outputs = [
|
|
||||||
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("alink") {
|
|
||||||
if (host_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}}"
|
|
||||||
}
|
|
||||||
description = "AR {{output}}"
|
|
||||||
outputs = [
|
|
||||||
"{{output_dir}}/{{target_output_name}}.a",
|
|
||||||
]
|
|
||||||
output_prefix = "lib"
|
|
||||||
default_output_dir = "{{root_out_dir}}/lib"
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("solink") {
|
|
||||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
|
||||||
if (host_os == "mac") {
|
|
||||||
command = "$ld -shared {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
|
||||||
default_output_extension = ".dylib"
|
|
||||||
} else {
|
|
||||||
command =
|
|
||||||
"$ld -shared {{ldflags}} -Wl,-z,defs -o $outfile {{libs}} {{inputs}}"
|
|
||||||
default_output_extension = ".so"
|
|
||||||
}
|
|
||||||
description = "SOLINK $outfile"
|
|
||||||
outputs = [
|
|
||||||
outfile,
|
|
||||||
]
|
|
||||||
lib_switch = "-l"
|
|
||||||
output_prefix = "lib"
|
|
||||||
default_output_dir = "{{root_out_dir}}/lib"
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("solink_module") {
|
|
||||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
|
||||||
if (host_os == "mac") {
|
|
||||||
command = "$ld -shared {{ldflags}} -Wl,-flat_namespace -Wl,-undefined,suppress -o $outfile {{libs}} {{inputs}}"
|
|
||||||
default_output_extension = ".dylib"
|
|
||||||
} else {
|
|
||||||
command = "$ld -shared {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
|
||||||
default_output_extension = ".so"
|
|
||||||
}
|
|
||||||
description = "SOLINK $outfile"
|
|
||||||
outputs = [
|
|
||||||
outfile,
|
|
||||||
]
|
|
||||||
lib_switch = "-l"
|
|
||||||
default_output_dir = "{{root_out_dir}}/lib"
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("link") {
|
|
||||||
outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
|
|
||||||
if (host_os == "mac") {
|
|
||||||
command = "$ld {{ldflags}} -o $outfile {{libs}} {{inputs}}"
|
|
||||||
} else {
|
|
||||||
command = "$ld {{ldflags}} -o $outfile {{libs}} -Wl,--start-group {{inputs}} -Wl,--end-group"
|
|
||||||
}
|
|
||||||
description = "LINK $outfile"
|
|
||||||
outputs = [
|
|
||||||
outfile,
|
|
||||||
]
|
|
||||||
lib_switch = "-l"
|
|
||||||
|
|
||||||
# Setting this allows targets to override the default executable output by
|
|
||||||
# setting output_dir.
|
|
||||||
default_output_dir = "{{root_out_dir}}/bin"
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("copy") {
|
|
||||||
command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
|
|
||||||
description = "COPY {{source}} {{output}}"
|
|
||||||
}
|
|
||||||
|
|
||||||
tool("stamp") {
|
|
||||||
command = "touch {{output}}"
|
|
||||||
description = "STAMP {{output}}"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,4 +240,8 @@ toolchain("win") {
|
||||||
command = "cmd /c type nul > {{output}}"
|
command = "cmd /c type nul > {{output}}"
|
||||||
description = "STAMP {{output}}"
|
description = "STAMP {{output}}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toolchain_args = {
|
||||||
|
current_os = "win"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue