blob: 30b244009b70da6dd5e1b8ee4ff3d5a7a61eb3f0 [file] [edit]
# Copyright 2026 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("@rules_cc//cc/toolchains:args.bzl", "cc_args")
load("@rules_cc//cc/toolchains:feature.bzl", "cc_feature")
load("@rules_cc//cc/toolchains:toolchain.bzl", "cc_toolchain")
load("//build_config:repo_paths.bzl", "get_repo_root")
package(default_visibility = ["//visibility:public"])
licenses(["notice"])
# Additional arm_gcc specific warning flags
cc_args(
name = "warnings",
actions = [
"@rules_cc//cc/toolchains/actions:compile_actions",
],
args = [
# This can't be in common, because proto headers in host builds trigger
"-Wundef",
# Silence the really verbose ARM warnings.
"-Wno-psabi",
],
)
cc_args(
name = "thumb_abi",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-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.
cc_args(
name = "no_canonical_system_headers",
actions = [
"@rules_cc//cc/toolchains/actions:compile_actions",
],
args = [
"-fno-canonical-system-headers",
],
)
cc_args(
name = "cortex_common",
actions = [
"@rules_cc//cc/toolchains/actions:compile_actions",
],
)
cc_feature(
name = "cortex_libc",
args = [":cortex_common_link"],
feature_name = "cortex_libc_linking",
)
cc_args(
name = "cortex_common_link",
actions = ["@rules_cc//cc/toolchains/actions:link_actions"],
args = [
"-Wl,--gc-sections",
"-lstdc++",
"-lc",
"-lm",
],
)
cc_args(
name = "cortex-m4",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-mcpu=cortex-m4",
],
)
cc_args(
name = "cortex-m7",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-mcpu=cortex-m7",
],
)
cc_args(
name = "cortex-m33",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-mcpu=cortex-m33",
],
)
cc_args(
name = "cortex-m55",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-mcpu=cortex-m55",
],
)
cc_args(
name = "cortex-m85",
actions = [
"@rules_cc//cc/toolchains/actions:assembly_actions",
"@rules_cc//cc/toolchains/actions:compile_actions",
"@rules_cc//cc/toolchains/actions:link_actions",
],
args = [
"-mcpu=cortex-m85",
],
)
_ZEPHYR_SDK_ARM_TOOLCHAIN_ROOT = get_repo_root("@zephyr_sdk_arm")
# In some cases, Zephyr adds "-nostdinc" flag to the compiler flags, and that
# will mask compiler includes like stddef.h. Zephyr adds them back using
# -isystem. We do it here.
cc_args(
name = "add_stddef",
actions = [
"@rules_cc//cc/toolchains/actions:c_compile_actions",
"@rules_cc//cc/toolchains/actions:cpp_compile_actions",
],
args = [
"-isystem",
_ZEPHYR_SDK_ARM_TOOLCHAIN_ROOT + "/lib/gcc/arm-zephyr-eabi/12.2.0/include",
"-isystem",
_ZEPHYR_SDK_ARM_TOOLCHAIN_ROOT + "/lib/gcc/arm-zephyr-eabi/12.2.0/include-fixed",
],
)
cc_args(
name = "add_cxx_headers",
actions = [
"@rules_cc//cc/toolchains/actions:cpp_compile_actions",
],
args = [
"-isystem",
_ZEPHYR_SDK_ARM_TOOLCHAIN_ROOT + "/arm-zephyr-eabi/include/c++/12.2.0",
"-isystem",
_ZEPHYR_SDK_ARM_TOOLCHAIN_ROOT + "/arm-zephyr-eabi/include/c++/12.2.0/arm-zephyr-eabi",
],
)
cc_toolchain(
name = "cortex-m_gcc",
args = [
"//toolchain/args:oz",
"//toolchain/args:debugging",
"//toolchain/args:reduced_size",
"//toolchain/args:no_canonical_prefixes",
"//toolchain/args:common_warnings",
"//toolchain/args:color_diagnostics",
"//toolchain/args:zephyr_common",
] + select({
"@zephyr//constraints/arm:cortex-m33": [":cortex-m33"],
"@zephyr//constraints/arm:cortex-m4": [":cortex-m4"],
"@zephyr//constraints/arm:cortex-m7": [":cortex-m7"],
"@zephyr//constraints/arm:cortex-m55": [":cortex-m55"],
"@zephyr//constraints/arm:cortex-m85": [":cortex-m85"],
"@zephyr//constraints/arm:none": [],
}) + [
":thumb_abi",
":cortex_common",
":no_canonical_system_headers",
":warnings",
":add_stddef",
":add_cxx_headers",
],
enabled_features = [
"@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features",
"//toolchain/capability:compiler_is_gcc",
"//toolchain/capability:linker_is_gcc",
# This MUST be the last feature!!!!
":cortex_libc",
],
known_features = [
"//toolchain/capability:known_toolchain_types",
],
supports_param_files = 0,
tags = ["manual"],
tool_map = "@zephyr_sdk_arm//:arm_tools",
)
toolchain(
name = "cortex-m_gcc_cc_cortex-m4",
target_compatible_with = [
"@zephyr//constraints/arm:cortex-m4",
],
toolchain = ":cortex-m_gcc",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "cortex-m_gcc_cc_cortex-m7",
target_compatible_with = [
"@zephyr//constraints/arm:cortex-m7",
],
toolchain = ":cortex-m_gcc",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "cortex-m_gcc_cc_cortex-m33",
target_compatible_with = [
"@zephyr//constraints/arm:cortex-m33",
],
toolchain = ":cortex-m_gcc",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "cortex-m_gcc_cc_cortex-m55",
target_compatible_with = [
"@zephyr//constraints/arm:cortex-m55",
],
toolchain = ":cortex-m_gcc",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)
toolchain(
name = "cortex-m_gcc_cc_cortex-m85",
target_compatible_with = [
"@zephyr//constraints/arm:cortex-m85",
],
toolchain = ":cortex-m_gcc",
toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
)