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"
|
||||
cxx = "c++"
|
||||
|
||||
|
@ -24,104 +130,10 @@ toolchain("unix") {
|
|||
cxx = "$goma_dir/gomacc $cxx"
|
||||
}
|
||||
|
||||
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",
|
||||
]
|
||||
}
|
||||
ar = "ar"
|
||||
|
||||
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 (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}}"
|
||||
toolchain_args = {
|
||||
current_os = host_os
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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