mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-09-21 14:16:26 +00:00
122 lines
3.9 KiB
Plaintext
122 lines
3.9 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 an arm-eabi-none gcc 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("arm_gcc_toolchain") {
|
||
|
_toolchain_cflags = ""
|
||
|
if (defined(invoker.toolchain_cflags)) {
|
||
|
foreach(flag, invoker.toolchain_cflags) {
|
||
|
_toolchain_cflags += " " + flag
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_toolchain_ldflags = ""
|
||
|
if (defined(invoker.toolchain_ldflags)) {
|
||
|
foreach(flag, invoker.toolchain_ldflags) {
|
||
|
_toolchain_ldflags += " " + flag
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# TODO(frolv): This assumes that the ARM gcc toolchain is in the PATH.
|
||
|
# It should be updated to point to the prebuilt path within the source tree
|
||
|
# once that is added.
|
||
|
_tool_name_root = "arm-none-eabi-"
|
||
|
|
||
|
_ar = _tool_name_root + "ar"
|
||
|
_cc = _tool_name_root + "gcc"
|
||
|
_cxx = _tool_name_root + "g++"
|
||
|
|
||
|
toolchain(target_name) {
|
||
|
tool("asm") {
|
||
|
depfile = "{{output}}.d"
|
||
|
command = "$_cc -MMD -MF $depfile $_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 = "$_cc -MMD -MF $depfile $_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 = "$_cxx -MMD -MF $depfile $_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_mapfile = "{{output_dir}}/{{target_output_name}}.map"
|
||
|
_link_command = "$_cxx {{ldflags}} -Wl,--gc-sections $_toolchain_cflags $_toolchain_ldflags -Wl,--start-group {{inputs}} -Wl,--end-group {{libs}} -Wl,-Map=$_link_mapfile -o $_link_outfile"
|
||
|
|
||
|
tool("link") {
|
||
|
command = _link_command
|
||
|
description = "ld $_link_outfile"
|
||
|
outputs = [
|
||
|
_link_outfile,
|
||
|
]
|
||
|
default_output_dir = "{{target_out_dir}}"
|
||
|
default_output_extension = ".elf"
|
||
|
}
|
||
|
|
||
|
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}}"
|
||
|
}
|
||
|
}
|
||
|
}
|