third_party.pigweed.src/pw_toolchain/host_clang.gni
Alexei Frolov 77af7193e0 Fix MacOS xcode sysroot command
The way in which the exec script receives arguments was recently
modified but the MacOS clang toolchain that calls it was not updated.
This change fixes that.

Fixes: 11
Change-Id: Ie41a1c62c9c9aa3b7e7d54d16b1f8096b9dbb559
2019-12-20 20:10:18 +00:00

198 lines
6.0 KiB
Plaintext

# Copyright 2019 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.
# Generates a host clang toolchain for a specific target.
#
# Args:
# toolchain_cflags: Additional C/C++ compiler flags for the target.
# toolchain_ldflags: Additional linker flags for the target.
template("host_clang") {
# Toolchain C flags
_cflags_list = [
# Colorize output. Ninja's Clang invocation disables color by default.
"-fdiagnostics-color",
]
if (defined(invoker.toolchain_cflags)) {
_cflags_list += invoker.toolchain_cflags
}
if (host_os == "mac") {
_xcode_sysroot = exec_script("$dir_pw_build/py/exec.py",
[
"--",
"/usr/bin/xcrun",
"--show-sdk-path",
],
"trim string")
_cflags_list += [ "--sysroot=$_xcode_sysroot" ]
}
_toolchain_cflags = string_join(" ", _cflags_list)
# Toolchain LD flags
_toolchain_ldflags = ""
if (defined(invoker.toolchain_ldflags)) {
_toolchain_ldflags = string_join(" ", invoker.toolchain_ldflags)
}
# Note: On macOS, there is no "llvm-ar", only "ar", which happens to be LLVM
# ar. This should get updated for linux systems.
_ar = "ar"
_cc = "clang"
_cxx = "clang++"
toolchain(target_name) {
tool("asm") {
depfile = "{{output}}.d"
command = string_join(" ",
[
"$_cc",
"-MMD -MF $depfile", # Write out dependencies.
"$_toolchain_cflags",
"{{defines}}",
"{{include_dirs}}",
"{{asmflags}}",
"-c {{source}}",
"-o {{output}}",
])
depsformat = "gcc"
description = "as {{output}}"
outputs = [
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
]
}
tool("cc") {
depfile = "{{output}}.d"
command = string_join(" ",
[
"$_cc",
"-MMD -MF $depfile", # Write out dependencies.
"$_toolchain_cflags",
"{{defines}}",
"{{include_dirs}}",
"{{cflags}}",
"{{cflags_c}}",
"-c {{source}}",
"-o {{output}}",
])
depsformat = "gcc"
description = "cc {{output}}"
outputs = [
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
]
}
tool("cxx") {
depfile = "{{output}}.d"
command = string_join(" ",
[
"$_cxx",
"-MMD -MF $depfile", # Write out dependencies.
"$_toolchain_cflags",
"{{defines}}",
"{{include_dirs}}",
"{{cflags}}",
"{{cflags_cc}}",
"-c {{source}}",
"-o {{output}}",
])
depsformat = "gcc"
description = "c++ {{output}}"
outputs = [
"{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o",
]
}
tool("alink") {
command = "rm -f {{output}} && $_ar rcs {{output}} {{inputs}}"
description = "ar {{target_output_name}}{{output_extension}}"
outputs = [
"{{target_out_dir}}/{{target_output_name}}{{output_extension}}",
]
default_output_extension = ".a"
}
lib_switch = "-l"
lib_dir_switch = "-L"
_link_outfile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
_link_flags = [
"$_cxx",
"{{ldflags}}",
"$_toolchain_cflags",
"$_toolchain_ldflags",
"{{inputs}}",
"{{libs}}",
"-o $_link_outfile",
]
_link_mapfile = "{{output_dir}}/{{target_output_name}}.map"
if (host_os == "linux") {
_link_flags += [
# Output a map file that shows symbols and their location.
"-Wl,-Map,$_link_mapfile",
# Delete unreferenced sections. Helpful with -ffunction-sections.
"-Wl,--gc-sections",
]
} else if (host_os == "mac") {
_link_flags += [
# Output a map file that shows symbols and their location.
"-Wl,-map,$_link_mapfile",
# Delete unreferenced sections. Helpful with -ffunction-sections.
"-Wl,-dead_strip",
]
}
_link_command = string_join(" ", _link_flags)
tool("link") {
command = _link_command
description = "ld $_link_outfile"
outputs = [
_link_outfile,
]
default_output_dir = "{{target_out_dir}}"
default_output_extension = ""
}
tool("solink") {
command = _link_command + " -shared"
description = "ld -shared $_link_outfile"
outputs = [
_link_outfile,
]
default_output_dir = "{{target_out_dir}}"
default_output_extension = ".so"
}
tool("stamp") {
command = "touch {{output}}"
description = "stamp {{output}}"
}
tool("copy") {
command = "cp -af {{source}} {{output}}"
description = "cp {{source}} {{output}}"
}
}
}