blob: cfc6f7c5342ef16da89bf8e308772d32a39efe49 [file] [log] [blame]
# Copyright 2022 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_flag_set",
"pw_cc_toolchain",
)
licenses(["notice"])
cc_library(
name = "newlib_os_interface_stubs",
srcs = ["newlib_os_interface_stubs.cc"],
linkopts = [
"-Wl,--wrap=__sread",
"-Wl,--wrap=__swrite",
"-Wl,--wrap=__sseek",
"-Wl,--wrap=__sclose",
],
visibility = ["//visibility:public"],
deps = ["//pw_assert"],
alwayslink = 1,
)
cc_library(
name = "arm_none_eabi_gcc_support",
visibility = ["//visibility:public"],
deps = [
":newlib_os_interface_stubs",
"//pw_toolchain:wrap_abort",
],
)
# Although we use similar warnings for clang and arm_gcc, we don't have one
# centralized list, since we might want to use different warnings based on the
# compiler in the future.
pw_cc_flag_set(
name = "warnings",
actions = [
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
],
flags = [
"-Wall",
"-Wextra",
# Make all warnings errors, except for the exemptions below.
"-Werror",
"-Wno-error=cpp", # preprocessor #warning statement
"-Wno-error=deprecated-declarations", # [[deprecated]] attribute
"-Wno-psabi", # Silence the really verbose ARM warnings.
],
)
pw_cc_flag_set(
name = "thumb_abi",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mabi=aapcs",
"-mthumb",
],
)
# This flag prevents Arm GCC from printing the resolved paths of symlinks,
# which prevents compilation actions from being hermetic. See
# https://github.com/bazelbuild/bazel/issues/21981 and
# https://pwbug.dev/319665090.
pw_cc_flag_set(
name = "no_canonical_system_headers",
actions = [
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
],
flags = [
"-fno-canonical-system-headers",
],
)
pw_cc_flag_set(
name = "cortex_common",
actions = [
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
],
flags = [
"-ffreestanding",
"-specs=nano.specs",
"-specs=nosys.specs",
],
)
pw_cc_flag_set(
name = "cortex_common_link",
actions = ["@pw_toolchain//actions:all_link_actions"],
flags = [
"-Wl,--gc-sections",
"-specs=nano.specs",
"-specs=nosys.specs",
"-lstdc++",
"-lnosys",
"-lc",
"-lm",
"-Wl,--no-warn-rwx-segment",
],
)
pw_cc_flag_set(
name = "cortex-m0",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m0",
"-mfloat-abi=soft",
],
)
pw_cc_flag_set(
name = "cortex-m3",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m3",
"-mfloat-abi=soft",
],
)
pw_cc_flag_set(
name = "cortex-m4",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m4",
"-mfloat-abi=hard",
],
)
pw_cc_flag_set(
name = "cortex-m4+nofp",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m4+nofp",
"-mfloat-abi=soft",
],
)
pw_cc_flag_set(
name = "cortex-m7",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m7",
"-mfloat-abi=hard",
],
)
pw_cc_flag_set(
name = "cortex-m33",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m33",
"-mfloat-abi=hard",
],
)
pw_cc_flag_set(
name = "cortex-m33+nofp",
actions = [
"@pw_toolchain//actions:all_asm_actions",
"@pw_toolchain//actions:all_c_compiler_actions",
"@pw_toolchain//actions:all_cpp_compiler_actions",
"@pw_toolchain//actions:all_link_actions",
],
flags = [
"-mcpu=cortex-m33+nofp",
"-mfloat-abi=soft",
],
)
pw_cc_toolchain(
name = "arm_gcc_toolchain_cortex-m",
action_configs = [
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-ar",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-gcc",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-g++",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-gcov",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-ld",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-objcopy",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-objdump",
"@gcc_arm_none_eabi_toolchain//:arm-none-eabi-strip",
],
builtin_sysroot = "external/gcc_arm_none_eabi_toolchain",
cxx_builtin_include_directories = [
"%sysroot%/arm-none-eabi/include/newlib-nano",
"%sysroot%/arm-none-eabi/include/c++/12.2.1",
"%sysroot%/arm-none-eabi/include/c++/12.2.1/arm-none-eabi",
"%sysroot%/arm-none-eabi/include/c++/12.2.1/backward",
"%sysroot%/lib/gcc/arm-none-eabi/12.2.1/include",
"%sysroot%/lib/gcc/arm-none-eabi/12.2.1/include-fixed",
"%sysroot%/arm-none-eabi/include",
],
flag_sets = [
"@pw_toolchain//flag_sets:o2",
"@pw_toolchain//flag_sets:c++17",
"@pw_toolchain//flag_sets:debugging",
"@pw_toolchain//flag_sets:reduced_size",
"@pw_toolchain//flag_sets:no_canonical_prefixes",
"@pw_toolchain//flag_sets:no_rtti",
"@pw_toolchain//flag_sets:wno_register",
"@pw_toolchain//flag_sets:wnon_virtual_dtor",
] + select({
"@pw_toolchain//constraints/arm_mcpu:cortex-m0": [":cortex-m0"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m3": [":cortex-m3"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m33": [":cortex-m33"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m33+nofp": [":cortex-m33+nofp"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m4": [":cortex-m4"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m4+nofp": [":cortex-m4+nofp"],
"@pw_toolchain//constraints/arm_mcpu:cortex-m7": [":cortex-m7"],
"@pw_toolchain//constraints/arm_mcpu:none": [],
}) + [
":thumb_abi",
":cortex_common",
":cortex_common_link",
":no_canonical_system_headers",
":warnings",
],
target_compatible_with = select({
"@pw_toolchain//constraints/arm_mcpu:cortex-m0": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m3": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m33": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m33+nofp": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m4": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m4+nofp": [],
"@pw_toolchain//constraints/arm_mcpu:cortex-m7": [],
"@pw_toolchain//constraints/arm_mcpu:none": ["@platforms//:incompatible"],
}),
toolchain_identifier = "arm-gcc-toolchain",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m0",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m0",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m3",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m3",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m4",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m4",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m4+nofp",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m4+nofp",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m7",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m7",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m33",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m33",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "arm_gcc_cc_toolchain_cortex-m33+nofp",
target_compatible_with = [
"@pw_toolchain//constraints/arm_mcpu:cortex-m33+nofp",
],
toolchain = ":arm_gcc_toolchain_cortex-m",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)