# Copyright 2023 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. load( "@pw_toolchain//cc_toolchain:defs.bzl", "pw_cc_action_config", "pw_cc_action_files", "pw_cc_tool", ) package(default_visibility = ["//visibility:public"]) licenses(["notice"]) # This build file defines a complete set of tools for an arm-none-eabi GNU # binutils-based toolchain. exports_files(glob(["**"])) pw_cc_action_files( name = "all", actions = ["@pw_toolchain//actions:all_actions"], srcs = glob(["**"]), visibility = ["//visibility:public"], ) pw_cc_tool( name = "arm-none-eabi-ar_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-ar.exe", "//conditions:default": "//:bin/arm-none-eabi-ar", }), ) pw_cc_action_config( name = "arm-none-eabi-ar", action_names = ["@pw_toolchain//actions:all_ar_actions"], # Unlike most legacy features required to compile code, these features # aren't enabled by default, and are instead only implied by the built-in # action configs. We imply the features here to match the behavior of the # built-in action configs so flags are actually passed to `ar`. implies = [ "@pw_toolchain//features/legacy:archiver_flags", "@pw_toolchain//features/legacy:linker_param_file", ], tools = [":arm-none-eabi-ar_tool"], ) pw_cc_tool( name = "arm-none-eabi-g++_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-g++.exe", "//conditions:default": "//:bin/arm-none-eabi-g++", }), additional_files = glob([ "**/*.spec", "**/*.specs", "arm-none-eabi/include/**", "lib/gcc/arm-none-eabi/*/include/**", "lib/gcc/arm-none-eabi/*/include-fixed/**", "libexec/**", ]), ) pw_cc_action_config( name = "arm-none-eabi-g++", action_names = ["@pw_toolchain//actions:all_cpp_compiler_actions"], tools = [":arm-none-eabi-g++_tool"], ) pw_cc_tool( name = "arm-none-eabi-gcc_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-gcc.exe", "//conditions:default": "//:bin/arm-none-eabi-gcc", }), additional_files = glob([ "**/*.spec", "**/*.specs", "arm-none-eabi/include/**", "lib/gcc/arm-none-eabi/*/include/**", "lib/gcc/arm-none-eabi/*/include-fixed/**", "libexec/**", ]) + # The assembler needs to be explicilty added. Note that the path is # intentionally different here as `as` is called from arm-none-eabi-gcc. # `arm-none-eabi-as` will not suffice for this context. select({ "@platforms//os:windows": ["//:arm-none-eabi/bin/as.exe"], "//conditions:default": ["//:arm-none-eabi/bin/as"], }), ) pw_cc_action_config( name = "arm-none-eabi-gcc", action_names = [ "@pw_toolchain//actions:all_asm_actions", "@pw_toolchain//actions:all_c_compiler_actions", ], tools = [":arm-none-eabi-gcc_tool"], ) # This tool is actually just g++ under the hood, we just enumerate this # tool differently to specify a different set of additional files. pw_cc_tool( name = "arm-none-eabi-ld_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-g++.exe", "//conditions:default": "//:bin/arm-none-eabi-g++", }), additional_files = glob([ "**/*.a", "**/*.ld", "**/*.o", "**/*.spec", "**/*.specs", "**/*.so", "libexec/**", ]), ) pw_cc_action_config( name = "arm-none-eabi-ld", action_names = ["@pw_toolchain//actions:all_link_actions"], tools = [":arm-none-eabi-ld_tool"], ) pw_cc_tool( name = "arm-none-eabi-gcov_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-gcov.exe", "//conditions:default": "//:bin/arm-none-eabi-gcov", }), ) pw_cc_action_config( name = "arm-none-eabi-gcov", action_names = ["@pw_toolchain//actions:all_coverage_actions"], tools = [":arm-none-eabi-gcov_tool"], ) pw_cc_tool( name = "arm-none-eabi-objcopy_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-objcopy.exe", "//conditions:default": "//:bin/arm-none-eabi-objcopy", }), ) pw_cc_action_config( name = "arm-none-eabi-objcopy", action_names = ["@pw_toolchain//actions:all_objcopy_actions"], tools = [":arm-none-eabi-objcopy_tool"], ) pw_cc_tool( name = "arm-none-eabi-objdump_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-objdump.exe", "//conditions:default": "//:bin/arm-none-eabi-objdump", }), ) pw_cc_action_config( name = "arm-none-eabi-objdump", action_names = ["@pw_toolchain//actions:all_objdump_actions"], tools = [":arm-none-eabi-objdump_tool"], ) pw_cc_tool( name = "arm-none-eabi-strip_tool", tool = select({ "@platforms//os:windows": "//:bin/arm-none-eabi-strip.exe", "//conditions:default": "//:bin/arm-none-eabi-strip", }), ) pw_cc_action_config( name = "arm-none-eabi-strip", action_names = ["@pw_toolchain//actions:all_strip_actions"], tools = [":arm-none-eabi-strip_tool"], )