xref: /aosp_15_r20/external/pigweed/pw_toolchain/arm_clang/BUILD.bazel (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:args.bzl", "cc_args")
16*61c4878aSAndroid Build Coastguard Workerload("@rules_cc//cc/toolchains:toolchain.bzl", "cc_toolchain")
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Workerpackage(default_visibility = ["//visibility:public"])
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Workerlicenses(["notice"])
21*61c4878aSAndroid Build Coastguard Worker
22*61c4878aSAndroid Build Coastguard Workerfilegroup(name = "empty")
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Workercc_args(
25*61c4878aSAndroid Build Coastguard Worker    name = "cortex-m0",
26*61c4878aSAndroid Build Coastguard Worker    actions = [
27*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
28*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
29*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
30*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
31*61c4878aSAndroid Build Coastguard Worker    ],
32*61c4878aSAndroid Build Coastguard Worker    args = [
33*61c4878aSAndroid Build Coastguard Worker        "-mcpu=cortex-m0",
34*61c4878aSAndroid Build Coastguard Worker        "-mfloat-abi=soft",
35*61c4878aSAndroid Build Coastguard Worker    ],
36*61c4878aSAndroid Build Coastguard Worker)
37*61c4878aSAndroid Build Coastguard Worker
38*61c4878aSAndroid Build Coastguard Workercc_args(
39*61c4878aSAndroid Build Coastguard Worker    name = "cortex-m0plus",
40*61c4878aSAndroid Build Coastguard Worker    actions = [
41*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
42*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
43*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
44*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
45*61c4878aSAndroid Build Coastguard Worker    ],
46*61c4878aSAndroid Build Coastguard Worker    args = [
47*61c4878aSAndroid Build Coastguard Worker        "-mcpu=cortex-m0plus",
48*61c4878aSAndroid Build Coastguard Worker        "-mfloat-abi=soft",
49*61c4878aSAndroid Build Coastguard Worker    ],
50*61c4878aSAndroid Build Coastguard Worker)
51*61c4878aSAndroid Build Coastguard Worker
52*61c4878aSAndroid Build Coastguard Workercc_args(
53*61c4878aSAndroid Build Coastguard Worker    name = "armv6m-none-eabi",
54*61c4878aSAndroid Build Coastguard Worker    actions = [
55*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
56*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
57*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
58*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
59*61c4878aSAndroid Build Coastguard Worker    ],
60*61c4878aSAndroid Build Coastguard Worker    args = [
61*61c4878aSAndroid Build Coastguard Worker        "--target=armv6m-none-eabi",
62*61c4878aSAndroid Build Coastguard Worker    ],
63*61c4878aSAndroid Build Coastguard Worker)
64*61c4878aSAndroid Build Coastguard Worker
65*61c4878aSAndroid Build Coastguard Workercc_args(
66*61c4878aSAndroid Build Coastguard Worker    name = "armv8m.main-none-eabi",
67*61c4878aSAndroid Build Coastguard Worker    actions = [
68*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
69*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
70*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
71*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
72*61c4878aSAndroid Build Coastguard Worker    ],
73*61c4878aSAndroid Build Coastguard Worker    args = [
74*61c4878aSAndroid Build Coastguard Worker        "--target=armv8m.main-none-eabi",
75*61c4878aSAndroid Build Coastguard Worker    ],
76*61c4878aSAndroid Build Coastguard Worker)
77*61c4878aSAndroid Build Coastguard Worker
78*61c4878aSAndroid Build Coastguard Workercc_args(
79*61c4878aSAndroid Build Coastguard Worker    name = "cxx_compiler_flags",
80*61c4878aSAndroid Build Coastguard Worker    actions = [
81*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:compile_actions",
82*61c4878aSAndroid Build Coastguard Worker    ],
83*61c4878aSAndroid Build Coastguard Worker    args = [
84*61c4878aSAndroid Build Coastguard Worker        "-fno-register-global-dtors-with-atexit",
85*61c4878aSAndroid Build Coastguard Worker        "-fno-c++-static-destructors",
86*61c4878aSAndroid Build Coastguard Worker        "-fno-use-cxa-atexit",
87*61c4878aSAndroid Build Coastguard Worker        "-fno-threadsafe-statics",
88*61c4878aSAndroid Build Coastguard Worker        "-D_LIBCPP_REMOVE_TRANSITIVE_INCLUDES",
89*61c4878aSAndroid Build Coastguard Worker    ],
90*61c4878aSAndroid Build Coastguard Worker    data = [
91*61c4878aSAndroid Build Coastguard Worker        "//pw_libcxx:cxx_lib_configs",
92*61c4878aSAndroid Build Coastguard Worker    ],
93*61c4878aSAndroid Build Coastguard Worker)
94*61c4878aSAndroid Build Coastguard Worker
95*61c4878aSAndroid Build Coastguard Workercc_args(
96*61c4878aSAndroid Build Coastguard Worker    name = "cortex_common",
97*61c4878aSAndroid Build Coastguard Worker    actions = [
98*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
99*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
100*61c4878aSAndroid Build Coastguard Worker    ],
101*61c4878aSAndroid Build Coastguard Worker)
102*61c4878aSAndroid Build Coastguard Worker
103*61c4878aSAndroid Build Coastguard Workercc_args(
104*61c4878aSAndroid Build Coastguard Worker    name = "cortex_common_link",
105*61c4878aSAndroid Build Coastguard Worker    actions = ["@rules_cc//cc/toolchains/actions:link_actions"],
106*61c4878aSAndroid Build Coastguard Worker    args = [
107*61c4878aSAndroid Build Coastguard Worker        "-Wl,--gc-sections",
108*61c4878aSAndroid Build Coastguard Worker    ],
109*61c4878aSAndroid Build Coastguard Worker)
110*61c4878aSAndroid Build Coastguard Worker
111*61c4878aSAndroid Build Coastguard Worker# Additional arm_clang specific warning flags
112*61c4878aSAndroid Build Coastguard Workercc_args(
113*61c4878aSAndroid Build Coastguard Worker    name = "warnings",
114*61c4878aSAndroid Build Coastguard Worker    actions = [
115*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
116*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
117*61c4878aSAndroid Build Coastguard Worker    ],
118*61c4878aSAndroid Build Coastguard Worker    args = [
119*61c4878aSAndroid Build Coastguard Worker        # This can't be in common, because proto headers in host builds trigger
120*61c4878aSAndroid Build Coastguard Worker        "-Wundef",
121*61c4878aSAndroid Build Coastguard Worker        # Silence the really verbose ARM warnings.
122*61c4878aSAndroid Build Coastguard Worker        "-Wno-psabi",
123*61c4878aSAndroid Build Coastguard Worker    ],
124*61c4878aSAndroid Build Coastguard Worker)
125*61c4878aSAndroid Build Coastguard Worker
126*61c4878aSAndroid Build Coastguard Workercc_args(
127*61c4878aSAndroid Build Coastguard Worker    name = "thumb_abi",
128*61c4878aSAndroid Build Coastguard Worker    actions = [
129*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
130*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
131*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
132*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
133*61c4878aSAndroid Build Coastguard Worker    ],
134*61c4878aSAndroid Build Coastguard Worker    args = [
135*61c4878aSAndroid Build Coastguard Worker        "-mabi=aapcs",
136*61c4878aSAndroid Build Coastguard Worker        "-mthumb",
137*61c4878aSAndroid Build Coastguard Worker    ],
138*61c4878aSAndroid Build Coastguard Worker)
139*61c4878aSAndroid Build Coastguard Worker
140*61c4878aSAndroid Build Coastguard Workercc_args(
141*61c4878aSAndroid Build Coastguard Worker    name = "cortex-m33",
142*61c4878aSAndroid Build Coastguard Worker    actions = [
143*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:assembly_actions",
144*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:c_compile_actions",
145*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:cpp_compile_actions",
146*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/actions:link_actions",
147*61c4878aSAndroid Build Coastguard Worker    ],
148*61c4878aSAndroid Build Coastguard Worker    args = [
149*61c4878aSAndroid Build Coastguard Worker        "-mcpu=cortex-m33",
150*61c4878aSAndroid Build Coastguard Worker        "-mfloat-abi=soft",
151*61c4878aSAndroid Build Coastguard Worker    ],
152*61c4878aSAndroid Build Coastguard Worker)
153*61c4878aSAndroid Build Coastguard Worker
154*61c4878aSAndroid Build Coastguard Workercc_toolchain(
155*61c4878aSAndroid Build Coastguard Worker    name = "arm_clang_toolchain_cortex-m",
156*61c4878aSAndroid Build Coastguard Worker    args = [
157*61c4878aSAndroid Build Coastguard Worker        ":cxx_compiler_flags",
158*61c4878aSAndroid Build Coastguard Worker        "@llvm_toolchain_device//:llvm-libc_args",
159*61c4878aSAndroid Build Coastguard Worker        ":thumb_abi",
160*61c4878aSAndroid Build Coastguard Worker        ":cortex_common",
161*61c4878aSAndroid Build Coastguard Worker        ":cortex_common_link",
162*61c4878aSAndroid Build Coastguard Worker        ":warnings",
163*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:oz",
164*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:debugging",
165*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:reduced_size",
166*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:no_canonical_prefixes",
167*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:no_rtti",
168*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:wno_register",
169*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:wnon_virtual_dtor",
170*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:common_warnings",
171*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/args:color_diagnostics",
172*61c4878aSAndroid Build Coastguard Worker    ] + select({
173*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0": [
174*61c4878aSAndroid Build Coastguard Worker            ":cortex-m0",
175*61c4878aSAndroid Build Coastguard Worker            ":armv6m-none-eabi",
176*61c4878aSAndroid Build Coastguard Worker        ],
177*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0plus": [
178*61c4878aSAndroid Build Coastguard Worker            ":cortex-m0plus",
179*61c4878aSAndroid Build Coastguard Worker            ":armv6m-none-eabi",
180*61c4878aSAndroid Build Coastguard Worker        ],
181*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m33": [
182*61c4878aSAndroid Build Coastguard Worker            ":cortex-m33",
183*61c4878aSAndroid Build Coastguard Worker            ":armv8m.main-none-eabi",
184*61c4878aSAndroid Build Coastguard Worker        ],
185*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:none": [],
186*61c4878aSAndroid Build Coastguard Worker    }),
187*61c4878aSAndroid Build Coastguard Worker    enabled_features = [
188*61c4878aSAndroid Build Coastguard Worker        "@rules_cc//cc/toolchains/args:experimental_replace_legacy_action_config_features",
189*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/capability:compiler_is_clang",
190*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc/capability:linker_is_clang",
191*61c4878aSAndroid Build Coastguard Worker    ] + select({
192*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc:c++17_enabled": ["//pw_toolchain/cc/args:c++17_feature"],
193*61c4878aSAndroid Build Coastguard Worker        "//conditions:default": [],
194*61c4878aSAndroid Build Coastguard Worker    }) + select({
195*61c4878aSAndroid Build Coastguard Worker        "//pw_toolchain/cc:c++20_enabled": ["//pw_toolchain/cc/args:c++20_feature"],
196*61c4878aSAndroid Build Coastguard Worker        "//conditions:default": [],
197*61c4878aSAndroid Build Coastguard Worker    }),
198*61c4878aSAndroid Build Coastguard Worker    tags = ["manual"],  # Don't try to build this in wildcard builds.
199*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = select({
200*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0": [],
201*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0plus": [],
202*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m33": [],
203*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:none": ["@platforms//:incompatible"],
204*61c4878aSAndroid Build Coastguard Worker    }),
205*61c4878aSAndroid Build Coastguard Worker    tool_map = "@llvm_toolchain_device//:all_tools",
206*61c4878aSAndroid Build Coastguard Worker    visibility = ["//pw_toolchain:__pkg__"],
207*61c4878aSAndroid Build Coastguard Worker)
208*61c4878aSAndroid Build Coastguard Worker
209*61c4878aSAndroid Build Coastguard Workertoolchain(
210*61c4878aSAndroid Build Coastguard Worker    name = "arm_clang_cc_toolchain_cortex-m0",
211*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = [
212*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0",
213*61c4878aSAndroid Build Coastguard Worker    ],
214*61c4878aSAndroid Build Coastguard Worker    toolchain = ":arm_clang_toolchain_cortex-m",
215*61c4878aSAndroid Build Coastguard Worker    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
216*61c4878aSAndroid Build Coastguard Worker)
217*61c4878aSAndroid Build Coastguard Worker
218*61c4878aSAndroid Build Coastguard Workertoolchain(
219*61c4878aSAndroid Build Coastguard Worker    name = "arm_clang_cc_toolchain_cortex-m0plus",
220*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = [
221*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m0plus",
222*61c4878aSAndroid Build Coastguard Worker    ],
223*61c4878aSAndroid Build Coastguard Worker    toolchain = ":arm_clang_toolchain_cortex-m",
224*61c4878aSAndroid Build Coastguard Worker    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
225*61c4878aSAndroid Build Coastguard Worker)
226*61c4878aSAndroid Build Coastguard Worker
227*61c4878aSAndroid Build Coastguard Workertoolchain(
228*61c4878aSAndroid Build Coastguard Worker    name = "arm_clang_cc_toolchain_cortex-m33",
229*61c4878aSAndroid Build Coastguard Worker    target_compatible_with = [
230*61c4878aSAndroid Build Coastguard Worker        "@pw_toolchain//constraints/arm_mcpu:cortex-m33",
231*61c4878aSAndroid Build Coastguard Worker    ],
232*61c4878aSAndroid Build Coastguard Worker    toolchain = ":arm_clang_toolchain_cortex-m",
233*61c4878aSAndroid Build Coastguard Worker    toolchain_type = "@bazel_tools//tools/cpp:toolchain_type",
234*61c4878aSAndroid Build Coastguard Worker)
235