blob: 32b98eb8e295d19c90b2de77fa6f2b05775ef5b8 [file] [log] [blame]
Austin Schuha2503a72020-12-15 20:57:57 -08001load(
2 "@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
Austin Schuhda9d0602019-09-15 17:29:38 -07003 "action_config",
Austin Schuhda9d0602019-09-15 17:29:38 -07004 "feature",
Austin Schuhda9d0602019-09-15 17:29:38 -07005 "flag_group",
6 "flag_set",
Austin Schuhda9d0602019-09-15 17:29:38 -07007 "tool",
8 "tool_path",
Austin Schuhda9d0602019-09-15 17:29:38 -07009 "with_feature_set",
10)
11load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
12
13def _impl(ctx):
Brian Silverman94cab072022-01-02 23:50:03 -080014 if ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -070015 toolchain_identifier = "clang_linux_armhf"
Brian Silverman94cab072022-01-02 23:50:03 -080016 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -080017 toolchain_identifier = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -080018 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -070019 toolchain_identifier = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -080020 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -070021 toolchain_identifier = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -080022 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -070023 toolchain_identifier = "k8_linux"
Brian Silverman94cab072022-01-02 23:50:03 -080024 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -070025 toolchain_identifier = "roborio_linux"
Brian Silverman94cab072022-01-02 23:50:03 -080026 elif ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -070027 toolchain_identifier = "stub_armeabi-v7a"
28 else:
29 fail("Unreachable")
30
Brian Silverman94cab072022-01-02 23:50:03 -080031 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -070032 host_system_name = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -080033 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -070034 host_system_name = "linux"
Austin Schuh0a96ea32022-01-01 22:29:30 -080035 elif (ctx.attr.cpu == "rp2040" or
36 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -080037 ctx.attr.cpu == "cortex-m4f-k22" or
38 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -070039 host_system_name = "local"
Brian Silverman94cab072022-01-02 23:50:03 -080040 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -070041 host_system_name = "roborio"
42 else:
43 fail("Unreachable")
44
Brian Silverman94cab072022-01-02 23:50:03 -080045 if ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -070046 target_system_name = "arm_a15"
Brian Silverman94cab072022-01-02 23:50:03 -080047 elif ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -070048 target_system_name = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -080049 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -080050 target_system_name = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -080051 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -070052 target_system_name = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -080053 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -070054 target_system_name = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -080055 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -070056 target_system_name = "k8"
Brian Silverman94cab072022-01-02 23:50:03 -080057 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -070058 target_system_name = "roborio"
59 else:
60 fail("Unreachable")
61
Brian Silverman94cab072022-01-02 23:50:03 -080062 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -070063 target_cpu = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -080064 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -070065 target_cpu = "armhf-debian"
Brian Silverman94cab072022-01-02 23:50:03 -080066 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -080067 target_cpu = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -080068 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -070069 target_cpu = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -080070 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -070071 target_cpu = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -080072 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -070073 target_cpu = "k8"
Brian Silverman94cab072022-01-02 23:50:03 -080074 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -070075 target_cpu = "roborio"
76 else:
77 fail("Unreachable")
78
Brian Silverman94cab072022-01-02 23:50:03 -080079 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -070080 target_libc = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -080081 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -080082 target_libc = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -080083 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -070084 target_libc = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -080085 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -070086 target_libc = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -080087 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -070088 target_libc = "glibc_2.19"
Brian Silverman94cab072022-01-02 23:50:03 -080089 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -070090 target_libc = "local"
Brian Silverman94cab072022-01-02 23:50:03 -080091 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -070092 target_libc = "roborio"
93 else:
94 fail("Unreachable")
95
Austin Schuha2503a72020-12-15 20:57:57 -080096 if (ctx.attr.cpu == "armhf-debian" or
97 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -070098 compiler = "clang"
Brian Silverman94cab072022-01-02 23:50:03 -080099 elif ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -0700100 compiler = "compiler"
Austin Schuh0a96ea32022-01-01 22:29:30 -0800101 elif (ctx.attr.cpu == "rp2040" or
102 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800103 ctx.attr.cpu == "cortex-m4f-k22" or
104 ctx.attr.cpu == "roborio"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700105 compiler = "gcc"
106 else:
107 fail("Unreachable")
108
Brian Silverman94cab072022-01-02 23:50:03 -0800109 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -0700110 abi_version = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -0800111 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -0700112 abi_version = "clang_6.0"
Brian Silverman94cab072022-01-02 23:50:03 -0800113 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -0800114 abi_version = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -0800115 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -0700116 abi_version = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -0800117 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -0700118 abi_version = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -0800119 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -0700120 abi_version = "local"
Brian Silverman94cab072022-01-02 23:50:03 -0800121 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700122 abi_version = "roborio"
123 else:
124 fail("Unreachable")
125
Brian Silverman94cab072022-01-02 23:50:03 -0800126 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -0700127 abi_libc_version = "armeabi-v7a"
Brian Silverman94cab072022-01-02 23:50:03 -0800128 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -0800129 abi_libc_version = "rp2040"
Brian Silverman94cab072022-01-02 23:50:03 -0800130 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -0700131 abi_libc_version = "cortex-m4f"
Brian Silverman94cab072022-01-02 23:50:03 -0800132 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -0700133 abi_libc_version = "cortex-m4f-k22"
Brian Silverman94cab072022-01-02 23:50:03 -0800134 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -0700135 abi_libc_version = "glibc_2.19"
Brian Silverman94cab072022-01-02 23:50:03 -0800136 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -0700137 abi_libc_version = "local"
Brian Silverman94cab072022-01-02 23:50:03 -0800138 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700139 abi_libc_version = "roborio"
140 else:
141 fail("Unreachable")
142
143 cc_target_os = None
144
145 builtin_sysroot = None
146
147 all_compile_actions = [
148 ACTION_NAMES.c_compile,
149 ACTION_NAMES.cpp_compile,
150 ACTION_NAMES.linkstamp_compile,
151 ACTION_NAMES.assemble,
152 ACTION_NAMES.preprocess_assemble,
153 ACTION_NAMES.cpp_header_parsing,
154 ACTION_NAMES.cpp_module_compile,
155 ACTION_NAMES.cpp_module_codegen,
156 ACTION_NAMES.clif_match,
157 ACTION_NAMES.lto_backend,
158 ]
159
160 all_cpp_compile_actions = [
161 ACTION_NAMES.cpp_compile,
162 ACTION_NAMES.linkstamp_compile,
163 ACTION_NAMES.cpp_header_parsing,
164 ACTION_NAMES.cpp_module_compile,
165 ACTION_NAMES.cpp_module_codegen,
166 ACTION_NAMES.clif_match,
167 ]
168
169 preprocessor_compile_actions = [
170 ACTION_NAMES.c_compile,
171 ACTION_NAMES.cpp_compile,
172 ACTION_NAMES.linkstamp_compile,
173 ACTION_NAMES.preprocess_assemble,
174 ACTION_NAMES.cpp_header_parsing,
175 ACTION_NAMES.cpp_module_compile,
176 ACTION_NAMES.clif_match,
177 ]
178
179 codegen_compile_actions = [
180 ACTION_NAMES.c_compile,
181 ACTION_NAMES.cpp_compile,
182 ACTION_NAMES.linkstamp_compile,
183 ACTION_NAMES.assemble,
184 ACTION_NAMES.preprocess_assemble,
185 ACTION_NAMES.cpp_module_codegen,
186 ACTION_NAMES.lto_backend,
187 ]
188
189 all_link_actions = [
190 ACTION_NAMES.cpp_link_executable,
191 ACTION_NAMES.cpp_link_dynamic_library,
192 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
193 ]
194
Brian Silverman94cab072022-01-02 23:50:03 -0800195 if ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700196 objcopy_embed_data_action = action_config(
197 action_name = "objcopy_embed_data",
198 enabled = True,
199 tools = [
200 tool(
201 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
202 ),
203 ],
204 )
Brian Silverman94cab072022-01-02 23:50:03 -0800205 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -0700206 objcopy_embed_data_action = action_config(
207 action_name = "objcopy_embed_data",
208 enabled = True,
209 tools = [
210 tool(path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy"),
211 ],
212 )
Brian Silverman94cab072022-01-02 23:50:03 -0800213 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -0700214 objcopy_embed_data_action = action_config(
215 action_name = "objcopy_embed_data",
216 enabled = True,
217 tools = [tool(path = "clang_6p0/x86_64-linux-gnu-objcopy")],
218 )
Austin Schuh0a96ea32022-01-01 22:29:30 -0800219 elif (ctx.attr.cpu == "rp2040" or
220 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800221 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700222 objcopy_embed_data_action = action_config(
223 action_name = "objcopy_embed_data",
224 enabled = True,
225 tools = [tool(path = "gcc_arm_none_eabi/arm-none-eabi-objcopy")],
226 )
227 else:
228 objcopy_embed_data_action = None
229
Brian Silverman94cab072022-01-02 23:50:03 -0800230 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -0700231 action_configs = []
Austin Schuha2503a72020-12-15 20:57:57 -0800232 elif (ctx.attr.cpu == "armhf-debian" or
Austin Schuh0a96ea32022-01-01 22:29:30 -0800233 ctx.attr.cpu == "rp2040" or
Austin Schuha2503a72020-12-15 20:57:57 -0800234 ctx.attr.cpu == "cortex-m4f" or
235 ctx.attr.cpu == "cortex-m4f-k22" or
236 ctx.attr.cpu == "k8" or
237 ctx.attr.cpu == "roborio"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700238 action_configs = [objcopy_embed_data_action]
239 else:
240 fail("Unreachable")
241
242 opt_post_feature = feature(
243 name = "opt_post",
244 flag_sets = [
245 flag_set(
246 actions = [
247 ACTION_NAMES.preprocess_assemble,
248 ACTION_NAMES.c_compile,
249 ACTION_NAMES.cpp_compile,
250 ACTION_NAMES.cpp_header_parsing,
251 "c++-header-preprocessing",
252 ACTION_NAMES.cpp_module_compile,
253 ],
254 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
255 ),
256 ],
257 )
258
259 supports_pic_feature = feature(name = "supports_pic", enabled = True)
260
Brian Silverman94cab072022-01-02 23:50:03 -0800261 if ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -0700262 default_compile_flags_feature = feature(
263 name = "default_compile_flags",
264 enabled = True,
265 flag_sets = [
266 flag_set(
267 actions = [
268 ACTION_NAMES.assemble,
269 ACTION_NAMES.preprocess_assemble,
270 ACTION_NAMES.linkstamp_compile,
271 ACTION_NAMES.c_compile,
272 ACTION_NAMES.cpp_compile,
273 ACTION_NAMES.cpp_header_parsing,
274 ACTION_NAMES.cpp_module_compile,
275 ACTION_NAMES.cpp_module_codegen,
276 ACTION_NAMES.lto_backend,
277 ACTION_NAMES.clif_match,
278 ],
279 flag_groups = [
280 flag_group(
281 flags = [
282 "--sysroot=external/amd64_debian_sysroot",
283 "-nostdinc",
284 "-isystem",
285 "external/amd64_debian_sysroot/usr/include/c++/7",
286 "-isystem",
287 "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu/c++/7",
288 "-isystem",
289 "external/amd64_debian_sysroot/usr/include/c++/8/backward",
290 "-isystem",
291 "external/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/8/include",
292 "-isystem",
293 "external/clang_6p0_repo/usr/lib/llvm-6.0/lib/clang/6.0.0/include",
294 "-isystem",
295 "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu",
296 "-isystem",
297 "external/amd64_debian_sysroot/usr/include",
298 "-D__STDC_FORMAT_MACROS",
299 "-D__STDC_CONSTANT_MACROS",
300 "-D__STDC_LIMIT_MACROS",
301 "-D_FILE_OFFSET_BITS=64",
Austin Schuhda9d0602019-09-15 17:29:38 -0700302 "-U_FORTIFY_SOURCE",
303 "-D_FORTIFY_SOURCE=1",
304 "-fstack-protector",
305 "-fPIE",
306 "-fcolor-diagnostics",
307 "-fmessage-length=80",
308 "-fmacro-backtrace-limit=0",
309 "-Wall",
310 "-Wextra",
311 "-Wpointer-arith",
312 "-Wstrict-aliasing",
313 "-Wcast-qual",
314 "-Wcast-align",
315 "-Wwrite-strings",
316 "-Wtype-limits",
317 "-Wsign-compare",
318 "-Wformat=2",
319 "-Werror",
320 "-fno-omit-frame-pointer",
321 "-pipe",
322 "-ggdb3",
323 ],
324 ),
325 ],
326 ),
327 flag_set(
328 actions = [
329 ACTION_NAMES.assemble,
330 ACTION_NAMES.preprocess_assemble,
331 ACTION_NAMES.linkstamp_compile,
332 ACTION_NAMES.c_compile,
333 ACTION_NAMES.cpp_compile,
334 ACTION_NAMES.cpp_header_parsing,
335 ACTION_NAMES.cpp_module_compile,
336 ACTION_NAMES.cpp_module_codegen,
337 ACTION_NAMES.lto_backend,
338 ACTION_NAMES.clif_match,
339 ],
340 flag_groups = [
341 flag_group(
342 flags = [
343 "-O2",
344 "-DNDEBUG",
345 "-ffunction-sections",
346 "-fdata-sections",
347 ],
348 ),
349 ],
350 with_features = [with_feature_set(features = ["opt"])],
351 ),
352 ],
353 )
Brian Silverman94cab072022-01-02 23:50:03 -0800354 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -0700355 default_compile_flags_feature = feature(
356 name = "default_compile_flags",
357 enabled = True,
358 flag_sets = [
359 flag_set(
360 actions = [
361 ACTION_NAMES.assemble,
362 ACTION_NAMES.preprocess_assemble,
363 ACTION_NAMES.linkstamp_compile,
364 ACTION_NAMES.c_compile,
365 ACTION_NAMES.cpp_compile,
366 ACTION_NAMES.cpp_header_parsing,
367 ACTION_NAMES.cpp_module_compile,
368 ACTION_NAMES.cpp_module_codegen,
369 ACTION_NAMES.lto_backend,
370 ACTION_NAMES.clif_match,
371 ],
372 flag_groups = [
373 flag_group(
374 flags = [
375 "-D__STDC_FORMAT_MACROS",
376 "-D__STDC_CONSTANT_MACROS",
377 "-D__STDC_LIMIT_MACROS",
378 "-D__MK22FX512__",
379 "-DF_CPU=120000000",
380 "-Wl,--gc-sections",
381 "-D__have_long32",
382 "-fstack-protector",
383 "-mcpu=cortex-m4",
384 "-mfpu=fpv4-sp-d16",
385 "-mthumb",
386 "-mfloat-abi=hard",
387 "-fno-strict-aliasing",
388 "-fmessage-length=80",
389 "-fmax-errors=20",
390 "-Wall",
391 "-Wextra",
392 "-Wpointer-arith",
393 "-Wcast-qual",
394 "-Wwrite-strings",
395 "-Wtype-limits",
396 "-Wsign-compare",
397 "-Wformat=2",
398 "-Werror",
399 "-Wstrict-aliasing=2",
400 "-Wno-misleading-indentation",
401 "-Wno-int-in-bool-context",
402 "-Wdouble-promotion",
403 "-pipe",
404 "-g",
405 "-fno-common",
406 "-ffreestanding",
407 "-fbuiltin",
408 ],
409 ),
410 ],
411 ),
412 flag_set(
413 actions = [
414 ACTION_NAMES.assemble,
415 ACTION_NAMES.preprocess_assemble,
416 ACTION_NAMES.linkstamp_compile,
417 ACTION_NAMES.c_compile,
418 ACTION_NAMES.cpp_compile,
419 ACTION_NAMES.cpp_header_parsing,
420 ACTION_NAMES.cpp_module_compile,
421 ACTION_NAMES.cpp_module_codegen,
422 ACTION_NAMES.lto_backend,
423 ACTION_NAMES.clif_match,
424 ],
425 flag_groups = [
426 flag_group(
427 flags = [
428 "-O2",
429 "-finline-functions",
430 "-ffast-math",
431 "-funroll-loops",
432 "-DNDEBUG",
433 "-ffunction-sections",
434 ],
435 ),
436 ],
437 with_features = [with_feature_set(features = ["opt"])],
438 ),
439 ],
440 )
Brian Silverman94cab072022-01-02 23:50:03 -0800441 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -0700442 default_compile_flags_feature = feature(
443 name = "default_compile_flags",
444 enabled = True,
445 flag_sets = [
446 flag_set(
447 actions = [
448 ACTION_NAMES.assemble,
449 ACTION_NAMES.preprocess_assemble,
450 ACTION_NAMES.linkstamp_compile,
451 ACTION_NAMES.c_compile,
452 ACTION_NAMES.cpp_compile,
453 ACTION_NAMES.cpp_header_parsing,
454 ACTION_NAMES.cpp_module_compile,
455 ACTION_NAMES.cpp_module_codegen,
456 ACTION_NAMES.lto_backend,
457 ACTION_NAMES.clif_match,
458 ],
459 flag_groups = [
460 flag_group(
461 flags = [
462 "-D__STDC_FORMAT_MACROS",
463 "-D__STDC_CONSTANT_MACROS",
464 "-D__STDC_LIMIT_MACROS",
465 "-D__MK64FX512__",
466 "-DF_CPU=120000000",
467 "-Wl,--gc-sections",
468 "-D__have_long32",
469 "-fstack-protector",
470 "-mcpu=cortex-m4",
471 "-mfpu=fpv4-sp-d16",
472 "-mthumb",
473 "-mfloat-abi=hard",
474 "-fno-strict-aliasing",
475 "-fmessage-length=80",
476 "-fmax-errors=20",
477 "-Wall",
478 "-Wextra",
479 "-Wpointer-arith",
480 "-Wcast-qual",
481 "-Wwrite-strings",
482 "-Wtype-limits",
483 "-Wsign-compare",
484 "-Wformat=2",
485 "-Werror",
486 "-Wstrict-aliasing=2",
487 "-Wno-misleading-indentation",
488 "-Wno-int-in-bool-context",
489 "-Wdouble-promotion",
490 "-pipe",
491 "-g",
492 "-fno-common",
493 "-ffreestanding",
494 "-fbuiltin",
495 ],
496 ),
497 ],
498 ),
499 flag_set(
500 actions = [
501 ACTION_NAMES.assemble,
502 ACTION_NAMES.preprocess_assemble,
503 ACTION_NAMES.linkstamp_compile,
504 ACTION_NAMES.c_compile,
505 ACTION_NAMES.cpp_compile,
506 ACTION_NAMES.cpp_header_parsing,
507 ACTION_NAMES.cpp_module_compile,
508 ACTION_NAMES.cpp_module_codegen,
509 ACTION_NAMES.lto_backend,
510 ACTION_NAMES.clif_match,
511 ],
512 flag_groups = [
513 flag_group(
514 flags = [
515 "-O2",
516 "-finline-functions",
517 "-ffast-math",
518 "-funroll-loops",
519 "-DNDEBUG",
520 "-ffunction-sections",
521 ],
522 ),
523 ],
524 with_features = [with_feature_set(features = ["opt"])],
525 ),
526 ],
527 )
Brian Silverman94cab072022-01-02 23:50:03 -0800528 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -0800529 default_compile_flags_feature = feature(
530 name = "default_compile_flags",
531 enabled = True,
532 flag_sets = [
533 flag_set(
534 actions = [
535 ACTION_NAMES.assemble,
536 ACTION_NAMES.preprocess_assemble,
537 ACTION_NAMES.linkstamp_compile,
538 ACTION_NAMES.c_compile,
539 ACTION_NAMES.cpp_compile,
540 ACTION_NAMES.cpp_header_parsing,
541 ACTION_NAMES.cpp_module_compile,
542 ACTION_NAMES.cpp_module_codegen,
543 ACTION_NAMES.lto_backend,
544 ACTION_NAMES.clif_match,
545 ],
546 flag_groups = [
547 flag_group(
548 flags = [
549 "-DPICO_BOARD=\"pico\"",
550 "-DPICO_BUILD=1",
551 "-DPICO_NO_HARDWARE=0",
552 "-DPICO_ON_DEVICE=1",
553 "-D__STDC_FORMAT_MACROS",
554 "-D__STDC_CONSTANT_MACROS",
555 "-D__STDC_LIMIT_MACROS",
556 "-Wl,--gc-sections",
557 "-fstack-protector",
558 "-mcpu=cortex-m0plus",
559 "-mthumb",
560 "-fno-strict-aliasing",
561 "-fmessage-length=80",
562 "-fmax-errors=20",
563 "-Wall",
564 "-Wextra",
565 "-Wpointer-arith",
566 "-Wcast-qual",
567 "-Wwrite-strings",
568 "-Wtype-limits",
569 "-Wsign-compare",
570 "-Wformat=2",
571 "-Werror",
572 "-Wstrict-aliasing=2",
573 "-Wno-misleading-indentation",
574 "-Wno-int-in-bool-context",
575 "-Wdouble-promotion",
576 "-pipe",
577 "-g",
578 ],
579 ),
580 ],
581 ),
582 flag_set(
583 actions = [
584 ACTION_NAMES.assemble,
585 ACTION_NAMES.preprocess_assemble,
586 ACTION_NAMES.linkstamp_compile,
587 ACTION_NAMES.c_compile,
588 ACTION_NAMES.cpp_compile,
589 ACTION_NAMES.cpp_header_parsing,
590 ACTION_NAMES.cpp_module_compile,
591 ACTION_NAMES.cpp_module_codegen,
592 ACTION_NAMES.lto_backend,
593 ACTION_NAMES.clif_match,
594 ],
595 flag_groups = [
596 flag_group(
597 flags = [
598 "-O3",
599 "-finline-functions",
600 "-funroll-loops",
601 "-DNDEBUG",
602 "-ffunction-sections",
603 ],
604 ),
605 ],
606 with_features = [with_feature_set(features = ["opt"])],
607 ),
608 ],
609 )
Brian Silverman94cab072022-01-02 23:50:03 -0800610 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -0700611 default_compile_flags_feature = feature(
612 name = "default_compile_flags",
613 enabled = True,
614 flag_sets = [
615 flag_set(
616 actions = [
617 ACTION_NAMES.assemble,
618 ACTION_NAMES.preprocess_assemble,
619 ACTION_NAMES.linkstamp_compile,
620 ACTION_NAMES.c_compile,
621 ACTION_NAMES.cpp_compile,
622 ACTION_NAMES.cpp_header_parsing,
623 ACTION_NAMES.cpp_module_compile,
624 ACTION_NAMES.cpp_module_codegen,
625 ACTION_NAMES.lto_backend,
626 ACTION_NAMES.clif_match,
627 ],
628 flag_groups = [
629 flag_group(
630 flags = [
631 "-target",
632 "armv7a-arm-linux-gnueabif",
633 "--sysroot=external/armhf_debian_rootfs",
634 "-mfloat-abi=hard",
635 "-mfpu=vfpv3-d16",
636 "-nostdinc",
637 "-isystem",
638 "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include",
639 "-isystem",
640 "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed",
641 "-isystem",
642 "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1/arm-linux-gnueabihf",
643 "-isystem",
644 "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1",
645 "-isystem",
646 "external/linaro_linux_gcc_repo/include/c++/7.4.1/arm-linux-gnueabihf",
647 "-isystem",
648 "external/linaro_linux_gcc_repo/include/c++/7.4.1",
649 "-isystem",
650 "external/armhf_debian_rootfs/usr/include",
651 "-isystem",
652 "external/armhf_debian_rootfs/usr/include/arm-linux-gnueabihf",
653 "-isystem",
654 "external/org_frc971/third_party",
655 "-D__STDC_FORMAT_MACROS",
656 "-D__STDC_CONSTANT_MACROS",
657 "-D__STDC_LIMIT_MACROS",
658 "-D_FILE_OFFSET_BITS=64",
659 "-DAOS_ARCHITECTURE_armhf",
660 "-U_FORTIFY_SOURCE",
661 "-fstack-protector",
662 "-fPIE",
663 "-fdiagnostics-color=always",
664 "-Wall",
665 "-Wextra",
666 "-Wpointer-arith",
667 "-Wstrict-aliasing",
668 "-Wcast-qual",
669 "-Wcast-align",
670 "-Wwrite-strings",
671 "-Wtype-limits",
672 "-Wsign-compare",
673 "-Wformat=2",
674 "-Werror",
675 "-Wunused-local-typedefs",
676 "-fno-omit-frame-pointer",
677 "-pipe",
678 "-ggdb3",
679 ],
680 ),
681 ],
682 ),
683 flag_set(
684 actions = [
685 ACTION_NAMES.assemble,
686 ACTION_NAMES.preprocess_assemble,
687 ACTION_NAMES.linkstamp_compile,
688 ACTION_NAMES.c_compile,
689 ACTION_NAMES.cpp_compile,
690 ACTION_NAMES.cpp_header_parsing,
691 ACTION_NAMES.cpp_module_compile,
692 ACTION_NAMES.cpp_module_codegen,
693 ACTION_NAMES.lto_backend,
694 ACTION_NAMES.clif_match,
695 ],
696 flag_groups = [
697 flag_group(
698 flags = [
699 "-O2",
700 "-DNDEBUG",
701 "-D_FORTIFY_SOURCE=1",
702 "-ffunction-sections",
703 "-fdata-sections",
704 ],
705 ),
706 ],
707 with_features = [with_feature_set(features = ["opt"])],
708 ),
709 ],
710 )
711 else:
712 default_compile_flags_feature = None
713
Austin Schuha2503a72020-12-15 20:57:57 -0800714 if (ctx.attr.cpu == "armhf-debian" or
715 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700716 dbg_feature = feature(
717 name = "dbg",
718 flag_sets = [
719 flag_set(
720 actions = [
721 ACTION_NAMES.preprocess_assemble,
722 ACTION_NAMES.c_compile,
723 ACTION_NAMES.cpp_compile,
724 ACTION_NAMES.cpp_header_parsing,
725 "c++-header-preprocessing",
726 ACTION_NAMES.cpp_module_compile,
727 ],
728 flag_groups = [
729 flag_group(flags = ["-DAOS_DEBUG=1"]),
730 flag_group(flags = ["-fno-omit-frame-pointer"]),
731 ],
732 ),
733 ],
734 implies = ["all_modes"],
735 )
Brian Silverman94cab072022-01-02 23:50:03 -0800736 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700737 dbg_feature = feature(
738 name = "dbg",
739 flag_sets = [
740 flag_set(
741 actions = [
742 ACTION_NAMES.preprocess_assemble,
743 ACTION_NAMES.c_compile,
744 ACTION_NAMES.cpp_compile,
745 ACTION_NAMES.cpp_header_parsing,
746 "c++-header-preprocessing",
747 ACTION_NAMES.cpp_module_compile,
748 ],
749 flag_groups = [
750 flag_group(flags = ["-DAOS_DEBUG=1"]),
751 flag_group(flags = ["-fno-omit-frame-pointer"]),
752 ],
753 ),
754 ],
755 )
Austin Schuh0a96ea32022-01-01 22:29:30 -0800756 elif (ctx.attr.cpu == "rp2040" or
757 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800758 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700759 dbg_feature = feature(
760 name = "dbg",
761 flag_sets = [
762 flag_set(
763 actions = [
764 ACTION_NAMES.preprocess_assemble,
765 ACTION_NAMES.c_compile,
766 ACTION_NAMES.cpp_compile,
767 ACTION_NAMES.cpp_header_parsing,
768 "c++-header-preprocessing",
769 ACTION_NAMES.cpp_module_compile,
770 ],
771 flag_groups = [flag_group(flags = ["-fno-omit-frame-pointer"])],
772 ),
773 ],
774 implies = ["all_modes"],
775 )
776 else:
777 dbg_feature = None
778
Austin Schuha2503a72020-12-15 20:57:57 -0800779 if (ctx.attr.cpu == "armhf-debian" or
780 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700781 fastbuild_feature = feature(
782 name = "fastbuild",
783 flag_sets = [
784 flag_set(
785 actions = [
786 ACTION_NAMES.preprocess_assemble,
787 ACTION_NAMES.c_compile,
788 ACTION_NAMES.cpp_compile,
789 ACTION_NAMES.cpp_header_parsing,
790 "c++-header-preprocessing",
791 ACTION_NAMES.cpp_module_compile,
792 ],
793 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
794 ),
795 ],
796 implies = ["all_modes"],
797 )
Brian Silverman94cab072022-01-02 23:50:03 -0800798 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700799 fastbuild_feature = feature(
800 name = "fastbuild",
801 flag_sets = [
802 flag_set(
803 actions = [
804 ACTION_NAMES.preprocess_assemble,
805 ACTION_NAMES.c_compile,
806 ACTION_NAMES.cpp_compile,
807 ACTION_NAMES.cpp_header_parsing,
808 "c++-header-preprocessing",
809 ACTION_NAMES.cpp_module_compile,
810 ],
811 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
812 ),
813 ],
814 )
Austin Schuh0a96ea32022-01-01 22:29:30 -0800815 elif (ctx.attr.cpu == "rp2040" or
816 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800817 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700818 fastbuild_feature = feature(name = "fastbuild", implies = ["all_modes"])
819 else:
820 fastbuild_feature = None
821
822 pie_for_linking_feature = feature(
823 name = "pie_for_linking",
824 enabled = True,
825 flag_sets = [
826 flag_set(
827 actions = [ACTION_NAMES.cpp_link_executable],
828 flag_groups = [flag_group(flags = ["-pie"])],
829 ),
830 ],
831 )
832
Brian Silverman94cab072022-01-02 23:50:03 -0800833 if ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700834 opt_feature = feature(
835 name = "opt",
836 flag_sets = [
837 flag_set(
838 actions = [
839 ACTION_NAMES.assemble,
840 ACTION_NAMES.preprocess_assemble,
841 ACTION_NAMES.c_compile,
842 ACTION_NAMES.cpp_compile,
843 ACTION_NAMES.cpp_module_compile,
844 ACTION_NAMES.objc_compile,
845 ACTION_NAMES.objcpp_compile,
846 ACTION_NAMES.cpp_header_parsing,
847 ACTION_NAMES.linkstamp_compile,
848 ],
849 flag_groups = [
850 flag_group(
851 flags = [
852 "-O2",
853 "-DNDEBUG",
854 "-D_FORTIFY_SOURCE=1",
855 "-ffunction-sections",
856 "-fdata-sections",
857 ],
858 ),
859 ],
860 ),
861 flag_set(
862 actions = [
863 ACTION_NAMES.cpp_link_executable,
864 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
865 ACTION_NAMES.cpp_link_dynamic_library,
866 ],
867 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
868 ),
869 ],
870 implies = ["opt_post"],
871 )
Austin Schuha2503a72020-12-15 20:57:57 -0800872 elif (ctx.attr.cpu == "armhf-debian" or
873 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700874 opt_feature = feature(
875 name = "opt",
876 flag_sets = [
877 flag_set(
878 actions = [
879 ACTION_NAMES.preprocess_assemble,
880 ACTION_NAMES.c_compile,
881 ACTION_NAMES.cpp_compile,
882 ACTION_NAMES.cpp_header_parsing,
883 "c++-header-preprocessing",
884 ACTION_NAMES.cpp_module_compile,
885 ],
886 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
887 ),
888 ],
889 implies = ["all_modes"],
890 )
Austin Schuh0a96ea32022-01-01 22:29:30 -0800891 elif (ctx.attr.cpu == "rp2040" or
892 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800893 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700894 opt_feature = feature(name = "opt", implies = ["all_modes"])
895 else:
896 opt_feature = None
897
898 pic_feature = feature(
899 name = "pic",
900 enabled = True,
901 flag_sets = [
902 flag_set(
903 actions = [
904 ACTION_NAMES.assemble,
905 ACTION_NAMES.preprocess_assemble,
906 ACTION_NAMES.linkstamp_compile,
907 ACTION_NAMES.c_compile,
908 ACTION_NAMES.cpp_compile,
909 ACTION_NAMES.cpp_module_codegen,
910 ACTION_NAMES.cpp_module_compile,
911 ],
912 flag_groups = [
913 flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
914 ],
915 ),
916 ],
917 )
918
Austin Schuh0a96ea32022-01-01 22:29:30 -0800919 if (ctx.attr.cpu == "rp2040" or
920 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -0800921 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -0700922 include_paths_feature = feature(
923 name = "include_paths",
924 enabled = True,
925 flag_sets = [
926 flag_set(
927 actions = [
928 ACTION_NAMES.preprocess_assemble,
929 ACTION_NAMES.c_compile,
930 ACTION_NAMES.cpp_compile,
931 ACTION_NAMES.cpp_header_parsing,
932 "c++-header-preprocessing",
933 ACTION_NAMES.cpp_module_compile,
934 ],
935 flag_groups = [
936 flag_group(
937 flags = ["-iquote", "%{quote_include_paths}"],
938 iterate_over = "quote_include_paths",
939 ),
940 flag_group(
941 flags = ["-I%{include_paths}"],
942 iterate_over = "include_paths",
943 ),
944 flag_group(
945 flags = ["-I", "%{system_include_paths}"],
946 iterate_over = "system_include_paths",
947 ),
948 ],
949 ),
950 ],
951 )
Brian Silverman94cab072022-01-02 23:50:03 -0800952 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -0700953 include_paths_feature = feature(
954 name = "include_paths",
955 enabled = True,
956 flag_sets = [
957 flag_set(
958 actions = [
959 ACTION_NAMES.preprocess_assemble,
960 ACTION_NAMES.c_compile,
961 ACTION_NAMES.cpp_compile,
962 ACTION_NAMES.cpp_header_parsing,
963 "c++-header-preprocessing",
964 ACTION_NAMES.cpp_module_compile,
965 ],
966 flag_groups = [
967 flag_group(
968 flags = ["-iquote", "%{quote_include_paths}"],
969 iterate_over = "quote_include_paths",
970 ),
971 flag_group(
972 flags = ["-I%{include_paths}"],
973 iterate_over = "include_paths",
974 ),
975 flag_group(
976 flags = ["-isystem", "%{system_include_paths}"],
977 iterate_over = "system_include_paths",
978 ),
979 ],
980 ),
981 ],
982 )
983 else:
984 include_paths_feature = None
985
986 random_seed_feature = feature(
987 name = "random_seed",
988 enabled = True,
989 flag_sets = [
990 flag_set(
991 actions = [
992 ACTION_NAMES.cpp_compile,
993 ACTION_NAMES.cpp_module_codegen,
994 ACTION_NAMES.cpp_module_compile,
995 ],
996 flag_groups = [
997 flag_group(
998 flags = ["-frandom-seed=%{output_file}"],
999 expand_if_available = "output_file",
1000 ),
1001 ],
1002 ),
1003 ],
1004 )
1005
Brian Silverman94cab072022-01-02 23:50:03 -08001006 if ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -07001007 default_link_flags_feature = feature(
1008 name = "default_link_flags",
1009 enabled = True,
1010 flag_sets = [
1011 flag_set(
1012 actions = all_link_actions,
1013 flag_groups = [
1014 flag_group(
1015 flags = [
1016 "-lstdc++",
1017 "-Ltools/cpp/arm-frc-linux-gnueabi/libs",
1018 "-no-canonical-prefixes",
1019 "-Wl,-z,relro,-z,now",
1020 "-lm",
1021 "-pass-exit-codes",
1022 "-Wl,--build-id=md5",
1023 "-Wl,--hash-style=gnu",
1024 ],
1025 ),
1026 ],
1027 ),
1028 ],
1029 )
Brian Silverman94cab072022-01-02 23:50:03 -08001030 elif ctx.attr.cpu == "cortex-m4f-k22":
Austin Schuhda9d0602019-09-15 17:29:38 -07001031 default_link_flags_feature = feature(
1032 name = "default_link_flags",
1033 enabled = True,
1034 flag_sets = [
1035 flag_set(
1036 actions = all_link_actions,
1037 flag_groups = [
1038 flag_group(
1039 flags = [
1040 "-no-canonical-prefixes",
1041 "-mcpu=cortex-m4",
1042 "-mfpu=fpv4-sp-d16",
1043 "-mthumb",
1044 "-mfloat-abi=hard",
1045 "-fno-strict-aliasing",
1046 "--specs=nano.specs",
1047 "-lgcc",
1048 "-lstdc++_nano",
1049 "-lm",
1050 "-lc_nano",
1051 "-Tmotors/core/kinetis_512_128.ld",
1052 "-Tmotors/core/kinetis_sections.ld",
1053 ],
1054 ),
1055 ],
1056 ),
1057 flag_set(
1058 actions = all_link_actions,
1059 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1060 with_features = [with_feature_set(features = ["opt"])],
1061 ),
1062 ],
1063 )
Brian Silverman94cab072022-01-02 23:50:03 -08001064 elif ctx.attr.cpu == "cortex-m4f":
Austin Schuhda9d0602019-09-15 17:29:38 -07001065 default_link_flags_feature = feature(
1066 name = "default_link_flags",
1067 enabled = True,
1068 flag_sets = [
1069 flag_set(
1070 actions = all_link_actions,
1071 flag_groups = [
1072 flag_group(
1073 flags = [
1074 "-no-canonical-prefixes",
1075 "-mcpu=cortex-m4",
1076 "-mfpu=fpv4-sp-d16",
1077 "-mthumb",
1078 "-mfloat-abi=hard",
1079 "-fno-strict-aliasing",
1080 "--specs=nano.specs",
1081 "-lgcc",
1082 "-lstdc++_nano",
1083 "-lm",
1084 "-lc_nano",
1085 "-Tmotors/core/kinetis_512_256.ld",
1086 "-Tmotors/core/kinetis_sections.ld",
1087 ],
1088 ),
1089 ],
1090 ),
1091 flag_set(
1092 actions = all_link_actions,
1093 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1094 with_features = [with_feature_set(features = ["opt"])],
1095 ),
1096 ],
1097 )
Brian Silverman94cab072022-01-02 23:50:03 -08001098 elif ctx.attr.cpu == "rp2040":
Austin Schuh0a96ea32022-01-01 22:29:30 -08001099 default_link_flags_feature = feature(
1100 name = "default_link_flags",
1101 enabled = True,
1102 flag_sets = [
1103 flag_set(
1104 actions = all_link_actions,
1105 flag_groups = [
1106 flag_group(
1107 flags = [
1108 "-no-canonical-prefixes",
1109 "-mcpu=cortex-m0plus",
1110 "-mthumb",
1111 "-fno-strict-aliasing",
1112 "-Wl,--build-id=none",
1113 "--specs=nosys.specs",
1114 "-nostartfiles",
1115 ],
1116 ),
1117 ],
1118 ),
1119 # TODO(austin): I'd love to turn --gc-sections on, but that breaks things.
1120 ],
1121 )
Brian Silverman94cab072022-01-02 23:50:03 -08001122 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -07001123 default_link_flags_feature = feature(
1124 name = "default_link_flags",
1125 enabled = True,
1126 flag_sets = [
1127 flag_set(
1128 actions = all_link_actions,
1129 flag_groups = [
1130 flag_group(
1131 flags = [
1132 "-nodefaultlibs",
1133 "--sysroot=external/amd64_debian_sysroot",
1134 "-lstdc++",
1135 "-lc",
1136 "-lgcc",
1137 "-lgcc_s",
1138 "-Bexternal/clang_6p0_repo/usr/bin/",
1139 "-Ltools/cpp/clang_6p0/clang_more_libs",
1140 "-Lexternal/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/7/",
1141 "-Lexternal/amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/",
1142 "-Lexternal/amd64_debian_sysroot/usr/lib/",
1143 "-Lexternal/amd64_debian_sysroot/lib/x86_64-linux-gnu/",
1144 "-Lexternal/amd64_debian_sysroot/lib/",
1145 "-no-canonical-prefixes",
1146 "-fuse-ld=gold",
1147 "-Wl,-z,relro,-z,now",
1148 "-lm",
1149 "-Wl,--build-id=md5",
1150 "-Wl,--hash-style=gnu",
1151 "-Wl,--warn-execstack",
1152 "-Wl,--detect-odr-violations",
1153 ],
1154 ),
1155 ],
1156 ),
1157 flag_set(
1158 actions = all_link_actions,
1159 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1160 with_features = [with_feature_set(features = ["opt"])],
1161 ),
1162 ],
1163 )
Brian Silverman94cab072022-01-02 23:50:03 -08001164 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -07001165 default_link_flags_feature = feature(
1166 name = "default_link_flags",
1167 enabled = True,
1168 flag_sets = [
1169 flag_set(
1170 actions = all_link_actions,
1171 flag_groups = [
1172 flag_group(
1173 flags = [
1174 "-target",
1175 "armv7a-arm-linux-gnueabif",
1176 "--sysroot=external/armhf_debian_rootfs",
1177 "-lstdc++",
1178 "-Ltools/cpp/linaro_linux_gcc/clang_more_libs",
1179 "-Lexternal/armhf_debian_rootfs/usr/lib/gcc/arm-linux-gnueabihf/8",
1180 "-Lexternal/armhf_debian_rootfs/lib/arm-linux-gnueabihf",
1181 "-Lexternal/armhf_debian_rootfs/usr/lib/arm-linux-gnueabihf",
1182 "-Lexternal/armhf_debian_rootfs/lib",
1183 "-Lexternal/armhf_debian_rootfs/usr/lib",
1184 "-Lexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
1185 "-Bexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
1186 "-Bexternal/linaro_linux_gcc_repo/arm-linux-gnueabihf/bin",
1187 "-Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3",
1188 "-no-canonical-prefixes",
1189 "-Wl,-z,relro,-z,now",
1190 "-lm",
1191 "-Wl,--build-id=md5",
1192 "-Wl,--hash-style=gnu",
1193 ],
1194 ),
1195 ],
1196 ),
1197 flag_set(
1198 actions = all_link_actions,
1199 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1200 with_features = [with_feature_set(features = ["opt"])],
1201 ),
1202 ],
1203 )
1204 else:
1205 default_link_flags_feature = None
1206
Brian Silverman94cab072022-01-02 23:50:03 -08001207 if ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -07001208 all_modes_feature = feature(
1209 name = "all_modes",
1210 enabled = True,
1211 flag_sets = [
1212 flag_set(
1213 actions = [
1214 ACTION_NAMES.preprocess_assemble,
1215 ACTION_NAMES.assemble,
1216 ACTION_NAMES.c_compile,
1217 ],
1218 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1219 ),
1220 flag_set(
1221 actions = [
1222 ACTION_NAMES.cpp_compile,
1223 ACTION_NAMES.cpp_header_parsing,
1224 "c++-header-preprocessing",
1225 ACTION_NAMES.cpp_module_compile,
1226 ],
1227 flag_groups = [
1228 flag_group(
1229 flags = ["-std=gnu++1z", "-fno-sized-deallocation"],
1230 ),
1231 ],
1232 ),
1233 flag_set(
1234 actions = [
1235 ACTION_NAMES.preprocess_assemble,
1236 ACTION_NAMES.assemble,
1237 "c++-link",
1238 ACTION_NAMES.cpp_compile,
1239 ACTION_NAMES.cpp_header_parsing,
1240 "c++-header-preprocessing",
1241 ACTION_NAMES.cpp_module_compile,
1242 ACTION_NAMES.c_compile,
1243 ],
1244 flag_groups = [flag_group(flags = ["-pthread"])],
1245 ),
1246 ],
1247 )
Austin Schuh0a96ea32022-01-01 22:29:30 -08001248 elif (ctx.attr.cpu == "rp2040" or
1249 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -08001250 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001251 all_modes_feature = feature(
1252 name = "all_modes",
1253 flag_sets = [
1254 flag_set(
1255 actions = [
1256 ACTION_NAMES.preprocess_assemble,
1257 ACTION_NAMES.assemble,
1258 ACTION_NAMES.c_compile,
1259 ],
Austin Schuh0a96ea32022-01-01 22:29:30 -08001260 flag_groups = [flag_group(flags = ["--std=gnu11"])],
Austin Schuhda9d0602019-09-15 17:29:38 -07001261 ),
1262 flag_set(
1263 actions = [
1264 ACTION_NAMES.cpp_compile,
1265 ACTION_NAMES.cpp_header_parsing,
1266 "c++-header-preprocessing",
1267 ACTION_NAMES.cpp_module_compile,
1268 ],
1269 flag_groups = [
1270 flag_group(
1271 flags = ["--std=gnu++1z", "-fno-exceptions", "-fno-rtti"],
1272 ),
1273 ],
1274 ),
1275 ],
1276 )
Brian Silverman94cab072022-01-02 23:50:03 -08001277 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -07001278 all_modes_feature = feature(
1279 name = "all_modes",
1280 flag_sets = [
1281 flag_set(
1282 actions = [
1283 ACTION_NAMES.preprocess_assemble,
1284 ACTION_NAMES.assemble,
1285 ACTION_NAMES.c_compile,
1286 ],
1287 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1288 ),
1289 flag_set(
1290 actions = [
1291 ACTION_NAMES.cpp_compile,
1292 ACTION_NAMES.cpp_header_parsing,
1293 "c++-header-preprocessing",
1294 ACTION_NAMES.cpp_module_compile,
1295 ],
1296 flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
1297 ),
1298 flag_set(
1299 actions = [
1300 ACTION_NAMES.preprocess_assemble,
1301 ACTION_NAMES.assemble,
1302 "c++-link",
1303 ACTION_NAMES.cpp_compile,
1304 ACTION_NAMES.cpp_header_parsing,
1305 "c++-header-preprocessing",
1306 ACTION_NAMES.cpp_module_compile,
1307 ACTION_NAMES.c_compile,
1308 ],
1309 flag_groups = [flag_group(flags = ["-pthread"])],
1310 ),
1311 ],
1312 )
Brian Silverman94cab072022-01-02 23:50:03 -08001313 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -07001314 all_modes_feature = feature(
1315 name = "all_modes",
1316 flag_sets = [
1317 flag_set(
1318 actions = [
1319 ACTION_NAMES.preprocess_assemble,
1320 ACTION_NAMES.assemble,
1321 ACTION_NAMES.c_compile,
1322 ],
1323 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1324 ),
1325 flag_set(
1326 actions = [
1327 ACTION_NAMES.cpp_compile,
1328 ACTION_NAMES.cpp_header_parsing,
1329 "c++-header-preprocessing",
1330 ACTION_NAMES.cpp_module_compile,
1331 ],
1332 flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
1333 ),
1334 ],
1335 )
1336 else:
1337 all_modes_feature = None
1338
1339 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
1340
Brian Silverman94cab072022-01-02 23:50:03 -08001341 if ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -07001342 unfiltered_compile_flags_feature = feature(
1343 name = "unfiltered_compile_flags",
1344 enabled = True,
1345 flag_sets = [
1346 flag_set(
1347 actions = [
1348 ACTION_NAMES.assemble,
1349 ACTION_NAMES.preprocess_assemble,
1350 ACTION_NAMES.linkstamp_compile,
1351 ACTION_NAMES.c_compile,
1352 ACTION_NAMES.cpp_compile,
1353 ACTION_NAMES.cpp_header_parsing,
1354 ACTION_NAMES.cpp_module_compile,
1355 ACTION_NAMES.cpp_module_codegen,
1356 ACTION_NAMES.lto_backend,
1357 ACTION_NAMES.clif_match,
1358 ],
1359 flag_groups = [
1360 flag_group(
1361 flags = [
1362 "-no-canonical-prefixes",
1363 "-Wno-builtin-macro-redefined",
1364 "-D__DATE__=\"redacted\"",
1365 "-D__TIMESTAMP__=\"redacted\"",
1366 "-D__TIME__=\"redacted\"",
1367 "-Wno-varargs",
1368 "-Wno-null-pointer-arithmetic",
1369 "-Wno-mismatched-new-delete",
1370 ],
1371 ),
1372 ],
1373 ),
1374 ],
1375 )
Austin Schuh0a96ea32022-01-01 22:29:30 -08001376 elif (ctx.attr.cpu == "rp2040" or
1377 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -08001378 ctx.attr.cpu == "cortex-m4f-k22" or
1379 ctx.attr.cpu == "roborio"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001380 unfiltered_compile_flags_feature = feature(
1381 name = "unfiltered_compile_flags",
1382 enabled = True,
1383 flag_sets = [
1384 flag_set(
1385 actions = [
1386 ACTION_NAMES.assemble,
1387 ACTION_NAMES.preprocess_assemble,
1388 ACTION_NAMES.linkstamp_compile,
1389 ACTION_NAMES.c_compile,
1390 ACTION_NAMES.cpp_compile,
1391 ACTION_NAMES.cpp_header_parsing,
1392 ACTION_NAMES.cpp_module_compile,
1393 ACTION_NAMES.cpp_module_codegen,
1394 ACTION_NAMES.lto_backend,
1395 ACTION_NAMES.clif_match,
1396 ],
1397 flag_groups = [
1398 flag_group(
1399 flags = [
1400 "-no-canonical-prefixes",
1401 "-Wno-builtin-macro-redefined",
1402 "-D__DATE__=\"redacted\"",
1403 "-D__TIMESTAMP__=\"redacted\"",
1404 "-D__TIME__=\"redacted\"",
1405 ],
1406 ),
1407 ],
1408 ),
1409 ],
1410 )
Brian Silverman94cab072022-01-02 23:50:03 -08001411 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -07001412 unfiltered_compile_flags_feature = feature(
1413 name = "unfiltered_compile_flags",
1414 enabled = True,
1415 flag_sets = [
1416 flag_set(
1417 actions = [
1418 ACTION_NAMES.assemble,
1419 ACTION_NAMES.preprocess_assemble,
1420 ACTION_NAMES.linkstamp_compile,
1421 ACTION_NAMES.c_compile,
1422 ACTION_NAMES.cpp_compile,
1423 ACTION_NAMES.cpp_header_parsing,
1424 ACTION_NAMES.cpp_module_compile,
1425 ACTION_NAMES.cpp_module_codegen,
1426 ACTION_NAMES.lto_backend,
1427 ACTION_NAMES.clif_match,
1428 ],
1429 flag_groups = [
1430 flag_group(
1431 flags = [
1432 "-no-canonical-prefixes",
1433 "-Wno-builtin-macro-redefined",
1434 "-Wno-mismatched-new-delete",
1435 "-Wno-null-pointer-arithmetic",
1436 "-Wno-varargs",
1437 "-D__DATE__=\"redacted\"",
1438 "-D__TIMESTAMP__=\"redacted\"",
1439 "-D__TIME__=\"redacted\"",
1440 ],
1441 ),
1442 ],
1443 ),
1444 ],
1445 )
1446 else:
1447 unfiltered_compile_flags_feature = None
1448
1449 dependency_file_feature = feature(
1450 name = "dependency_file",
1451 enabled = True,
1452 flag_sets = [
1453 flag_set(
1454 actions = [
1455 ACTION_NAMES.assemble,
1456 ACTION_NAMES.preprocess_assemble,
1457 ACTION_NAMES.c_compile,
1458 ACTION_NAMES.cpp_compile,
1459 ACTION_NAMES.cpp_module_compile,
1460 ACTION_NAMES.objc_compile,
1461 ACTION_NAMES.objcpp_compile,
1462 ACTION_NAMES.cpp_header_parsing,
1463 ACTION_NAMES.clif_match,
1464 ],
1465 flag_groups = [
1466 flag_group(
1467 flags = ["-MD", "-MF", "%{dependency_file}"],
1468 expand_if_available = "dependency_file",
1469 ),
1470 ],
1471 ),
1472 ],
1473 )
1474
Austin Schuhda9d0602019-09-15 17:29:38 -07001475 user_compile_flags_feature = feature(
1476 name = "user_compile_flags",
1477 enabled = True,
1478 flag_sets = [
1479 flag_set(
1480 actions = [
1481 ACTION_NAMES.assemble,
1482 ACTION_NAMES.preprocess_assemble,
1483 ACTION_NAMES.linkstamp_compile,
1484 ACTION_NAMES.c_compile,
1485 ACTION_NAMES.cpp_compile,
1486 ACTION_NAMES.cpp_header_parsing,
1487 ACTION_NAMES.cpp_module_compile,
1488 ACTION_NAMES.cpp_module_codegen,
1489 ACTION_NAMES.lto_backend,
1490 ACTION_NAMES.clif_match,
1491 ],
1492 flag_groups = [
1493 flag_group(
1494 flags = ["%{user_compile_flags}"],
1495 iterate_over = "user_compile_flags",
1496 expand_if_available = "user_compile_flags",
1497 ),
1498 ],
1499 ),
1500 ],
1501 )
1502
1503 sysroot_feature = feature(
1504 name = "sysroot",
1505 enabled = True,
1506 flag_sets = [
1507 flag_set(
1508 actions = [
1509 ACTION_NAMES.preprocess_assemble,
1510 ACTION_NAMES.linkstamp_compile,
1511 ACTION_NAMES.c_compile,
1512 ACTION_NAMES.cpp_compile,
1513 ACTION_NAMES.cpp_header_parsing,
1514 ACTION_NAMES.cpp_module_compile,
1515 ACTION_NAMES.cpp_module_codegen,
1516 ACTION_NAMES.lto_backend,
1517 ACTION_NAMES.clif_match,
1518 ACTION_NAMES.cpp_link_executable,
1519 ACTION_NAMES.cpp_link_dynamic_library,
1520 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
1521 ],
1522 flag_groups = [
1523 flag_group(
1524 flags = ["--sysroot=%{sysroot}"],
1525 expand_if_available = "sysroot",
1526 ),
1527 ],
1528 ),
1529 ],
1530 )
1531
1532 compile_flags1_feature = feature(
1533 name = "compile_flags1",
1534 enabled = True,
1535 flag_sets = [
1536 flag_set(
1537 actions = [
1538 ACTION_NAMES.assemble,
1539 ACTION_NAMES.preprocess_assemble,
1540 ACTION_NAMES.c_compile,
1541 ACTION_NAMES.cpp_compile,
1542 ACTION_NAMES.cpp_header_parsing,
1543 ACTION_NAMES.cpp_module_compile,
1544 ACTION_NAMES.cpp_module_codegen,
1545 ACTION_NAMES.lto_backend,
1546 ACTION_NAMES.clif_match,
1547 ],
1548 flag_groups = [
1549 flag_group(
1550 flags = [
1551 "--sysroot=external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi",
1552 "-nostdinc",
1553 "-isystem",
1554 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include",
1555 "-isystem",
1556 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed",
1557 ],
1558 ),
1559 ],
1560 ),
1561 flag_set(
1562 actions = [
1563 ACTION_NAMES.assemble,
1564 ACTION_NAMES.preprocess_assemble,
1565 ACTION_NAMES.cpp_compile,
1566 ACTION_NAMES.cpp_header_parsing,
1567 "c++-header-preprocessing",
1568 ],
1569 flag_groups = [flag_group(flags = ["-fno-canonical-system-headers"])],
1570 ),
1571 flag_set(
1572 actions = [
1573 ACTION_NAMES.cpp_compile,
1574 ACTION_NAMES.cpp_header_parsing,
1575 ACTION_NAMES.cpp_module_compile,
1576 ACTION_NAMES.cpp_module_codegen,
1577 ],
1578 flag_groups = [
1579 flag_group(
1580 flags = [
1581 "-isystem",
1582 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0",
1583 "-isystem",
1584 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi",
1585 "-isystem",
1586 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward",
1587 ],
1588 ),
1589 ],
1590 ),
1591 flag_set(
1592 actions = [
1593 ACTION_NAMES.assemble,
1594 ACTION_NAMES.preprocess_assemble,
1595 ACTION_NAMES.c_compile,
1596 ACTION_NAMES.cpp_compile,
1597 ACTION_NAMES.cpp_header_parsing,
1598 ACTION_NAMES.cpp_module_compile,
1599 ACTION_NAMES.cpp_module_codegen,
1600 ACTION_NAMES.lto_backend,
1601 ACTION_NAMES.clif_match,
1602 ],
1603 flag_groups = [
1604 flag_group(
1605 flags = [
1606 "-isystem",
1607 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include",
1608 "-mfpu=neon",
1609 "-D__STDC_FORMAT_MACROS",
1610 "-D__STDC_CONSTANT_MACROS",
1611 "-D__STDC_LIMIT_MACROS",
1612 "-D_FILE_OFFSET_BITS=64",
1613 "-DAOS_ARCHITECTURE_arm_frc",
1614 "-U_FORTIFY_SOURCE",
1615 "-fstack-protector",
1616 "-fPIE",
1617 "-fdiagnostics-color=always",
1618 "-Wall",
1619 "-Wextra",
1620 "-Wpointer-arith",
1621 "-Wstrict-aliasing",
1622 "-Wcast-qual",
1623 "-Wwrite-strings",
1624 "-Wtype-limits",
1625 "-Wsign-compare",
1626 "-Wformat=2",
1627 "-Werror",
1628 "-Wunused-local-typedefs",
1629 "-Wno-psabi",
1630 "-fno-omit-frame-pointer",
1631 "-D__has_feature(x)=0",
1632 "-pipe",
1633 "-ggdb3",
1634 ],
1635 ),
1636 ],
1637 ),
1638 ],
1639 )
1640
Austin Schuh0a96ea32022-01-01 22:29:30 -08001641 if (ctx.attr.cpu == "rp2040" or
1642 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -08001643 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001644 features = [
Austin Schuha2503a72020-12-15 20:57:57 -08001645 default_compile_flags_feature,
1646 default_link_flags_feature,
1647 dbg_feature,
1648 opt_feature,
1649 fastbuild_feature,
1650 all_modes_feature,
1651 include_paths_feature,
Austin Schuha2503a72020-12-15 20:57:57 -08001652 user_compile_flags_feature,
1653 sysroot_feature,
1654 unfiltered_compile_flags_feature,
1655 ]
1656 elif (ctx.attr.cpu == "armhf-debian" or
1657 ctx.attr.cpu == "k8"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001658 features = [
Austin Schuha2503a72020-12-15 20:57:57 -08001659 default_compile_flags_feature,
1660 default_link_flags_feature,
1661 opt_feature,
1662 dbg_feature,
1663 fastbuild_feature,
1664 all_modes_feature,
1665 pie_for_linking_feature,
1666 supports_dynamic_linker_feature,
1667 supports_pic_feature,
Austin Schuha2503a72020-12-15 20:57:57 -08001668 user_compile_flags_feature,
1669 sysroot_feature,
1670 unfiltered_compile_flags_feature,
1671 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001672 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -07001673 features = [
Austin Schuha2503a72020-12-15 20:57:57 -08001674 default_link_flags_feature,
1675 compile_flags1_feature,
1676 opt_feature,
1677 dependency_file_feature,
1678 random_seed_feature,
1679 pic_feature,
1680 include_paths_feature,
1681 opt_post_feature,
1682 dbg_feature,
1683 fastbuild_feature,
1684 all_modes_feature,
1685 pie_for_linking_feature,
1686 supports_dynamic_linker_feature,
1687 supports_pic_feature,
Austin Schuha2503a72020-12-15 20:57:57 -08001688 user_compile_flags_feature,
1689 sysroot_feature,
1690 unfiltered_compile_flags_feature,
1691 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001692 elif ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -07001693 features = [supports_pic_feature]
1694 else:
1695 fail("Unreachable")
1696
Brian Silverman94cab072022-01-02 23:50:03 -08001697 if ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -07001698 cxx_builtin_include_directories = []
Brian Silverman94cab072022-01-02 23:50:03 -08001699 elif ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -07001700 cxx_builtin_include_directories = [
Austin Schuha2503a72020-12-15 20:57:57 -08001701 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include)%",
1702 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed)%",
1703 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi)%",
1704 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward)%",
1705 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001706 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -07001707 cxx_builtin_include_directories = [
Austin Schuha2503a72020-12-15 20:57:57 -08001708 "%package(@clang_6p0_repo//usr)%/lib/llvm-6.0/lib/clang/6.0.0/include",
1709 "%package(@amd64_debian_sysroot//usr)%/include",
1710 "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include",
1711 "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include-fixed",
1712 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001713 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -07001714 cxx_builtin_include_directories = [
Austin Schuha2503a72020-12-15 20:57:57 -08001715 "%package(@linaro_linux_gcc_repo//include)%",
1716 "%package(@armhf_debian_rootfs//usr/include)%",
1717 "%package(@linaro_linux_gcc_repo//include)%/c++/7.4.1",
1718 "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include)%",
1719 "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed)%",
1720 "%package(@linaro_linux_gcc_repo//arm-linux-gnueabihf/include)%/c++/7.4.1",
1721 ]
Austin Schuh0a96ea32022-01-01 22:29:30 -08001722 elif (ctx.attr.cpu == "rp2040" or
1723 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -08001724 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001725 cxx_builtin_include_directories = [
Austin Schuha2503a72020-12-15 20:57:57 -08001726 "/usr/lib/gcc/arm-none-eabi/4.8/include",
1727 "/usr/lib/gcc/arm-none-eabi/4.8/include-fixed",
1728 "/usr/lib/arm-none-eabi/include",
1729 "/usr/include/newlib",
1730 ]
Austin Schuhda9d0602019-09-15 17:29:38 -07001731 else:
1732 fail("Unreachable")
1733
1734 artifact_name_patterns = []
1735
1736 make_variables = []
1737
Brian Silverman94cab072022-01-02 23:50:03 -08001738 if ctx.attr.cpu == "roborio":
Austin Schuhda9d0602019-09-15 17:29:38 -07001739 tool_paths = [
1740 tool_path(
1741 name = "ar",
1742 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ar",
1743 ),
1744 tool_path(
1745 name = "as",
1746 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-as",
1747 ),
1748 tool_path(
1749 name = "compat-ld",
1750 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
1751 ),
1752 tool_path(
1753 name = "cpp",
1754 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-cpp",
1755 ),
1756 tool_path(name = "dwp", path = "/bin/false"),
1757 tool_path(
1758 name = "gcc",
1759 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcc",
1760 ),
1761 tool_path(
1762 name = "gcov",
1763 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
1764 ),
1765 tool_path(
1766 name = "ld",
1767 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
1768 ),
1769 tool_path(
1770 name = "nm",
1771 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-nm",
1772 ),
1773 tool_path(
1774 name = "objcopy",
1775 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
1776 ),
1777 tool_path(
1778 name = "objdump",
1779 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objdump",
1780 ),
1781 tool_path(
1782 name = "strip",
1783 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-strip",
1784 ),
1785 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001786 elif ctx.attr.cpu == "k8":
Austin Schuhda9d0602019-09-15 17:29:38 -07001787 tool_paths = [
1788 tool_path(
1789 name = "ar",
1790 path = "clang_6p0/x86_64-linux-gnu-ar",
1791 ),
1792 tool_path(
1793 name = "compat-ld",
1794 path = "clang_6p0/x86_64-linux-gnu-ld",
1795 ),
1796 tool_path(
1797 name = "cpp",
1798 path = "clang_6p0/x86_64-linux-gnu-cpp",
1799 ),
1800 tool_path(
1801 name = "dwp",
1802 path = "clang_6p0/x86_64-linux-gnu-dwp",
1803 ),
1804 tool_path(
1805 name = "gcc",
1806 path = "clang_6p0/x86_64-linux-gnu-clang-6.0",
1807 ),
1808 tool_path(
1809 name = "gcov",
1810 path = "clang_6p0/x86_64-linux-gnu-gcov",
1811 ),
1812 tool_path(
1813 name = "ld",
1814 path = "clang_6p0/x86_64-linux-gnu-ld",
1815 ),
1816 tool_path(
1817 name = "nm",
1818 path = "clang_6p0/x86_64-linux-gnu-nm",
1819 ),
1820 tool_path(
1821 name = "objcopy",
1822 path = "clang_6p0/x86_64-linux-gnu-objcopy",
1823 ),
1824 tool_path(
1825 name = "objdump",
1826 path = "clang_6p0/x86_64-linux-gnu-objdump",
1827 ),
1828 tool_path(
1829 name = "strip",
1830 path = "clang_6p0/x86_64-linux-gnu-strip",
1831 ),
1832 ]
Austin Schuh0a96ea32022-01-01 22:29:30 -08001833 elif (ctx.attr.cpu == "rp2040" or
1834 ctx.attr.cpu == "cortex-m4f" or
Austin Schuha2503a72020-12-15 20:57:57 -08001835 ctx.attr.cpu == "cortex-m4f-k22"):
Austin Schuhda9d0602019-09-15 17:29:38 -07001836 tool_paths = [
1837 tool_path(
1838 name = "ar",
1839 path = "gcc_arm_none_eabi/arm-none-eabi-ar",
1840 ),
1841 tool_path(
1842 name = "compat-ld",
1843 path = "gcc_arm_none_eabi/arm-none-eabi-ld",
1844 ),
1845 tool_path(
1846 name = "cpp",
1847 path = "gcc_arm_none_eabi/arm-none-eabi-cpp",
1848 ),
1849 tool_path(
1850 name = "dwp",
1851 path = "gcc_arm_none_eabi/arm-none-eabi-dwp",
1852 ),
1853 tool_path(
1854 name = "gcc",
1855 path = "gcc_arm_none_eabi/arm-none-eabi-gcc",
1856 ),
1857 tool_path(
1858 name = "gcov",
1859 path = "gcc_arm_none_eabi/arm-none-eabi-gcov",
1860 ),
1861 tool_path(
1862 name = "ld",
1863 path = "gcc_arm_none_eabi/arm-none-eabi-ld",
1864 ),
1865 tool_path(
1866 name = "nm",
1867 path = "gcc_arm_none_eabi/arm-none-eabi-nm",
1868 ),
1869 tool_path(
1870 name = "objcopy",
1871 path = "gcc_arm_none_eabi/arm-none-eabi-objcopy",
1872 ),
1873 tool_path(
1874 name = "objdump",
1875 path = "gcc_arm_none_eabi/arm-none-eabi-objdump",
1876 ),
1877 tool_path(
1878 name = "strip",
1879 path = "gcc_arm_none_eabi/arm-none-eabi-strip",
1880 ),
1881 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001882 elif ctx.attr.cpu == "armhf-debian":
Austin Schuhda9d0602019-09-15 17:29:38 -07001883 tool_paths = [
1884 tool_path(
1885 name = "ar",
1886 path = "linaro_linux_gcc/arm-linux-gnueabihf-ar",
1887 ),
1888 tool_path(
1889 name = "compat-ld",
1890 path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
1891 ),
1892 tool_path(
1893 name = "cpp",
1894 path = "linaro_linux_gcc/clang_bin/clang",
1895 ),
1896 tool_path(
1897 name = "dwp",
1898 path = "linaro_linux_gcc/arm-linux-gnueabihf-dwp",
1899 ),
1900 tool_path(
1901 name = "gcc",
1902 path = "linaro_linux_gcc/clang_bin/clang",
1903 ),
1904 tool_path(
1905 name = "gcov",
1906 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
1907 ),
1908 tool_path(
1909 name = "ld",
1910 path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
1911 ),
1912 tool_path(
1913 name = "nm",
1914 path = "linaro_linux_gcc/arm-linux-gnueabihf-nm",
1915 ),
1916 tool_path(
1917 name = "objcopy",
1918 path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy",
1919 ),
1920 tool_path(
1921 name = "objdump",
1922 path = "linaro_linux_gcc/arm-linux-gnueabihf-objdump",
1923 ),
1924 tool_path(
1925 name = "strip",
1926 path = "linaro_linux_gcc/arm-linux-gnueabihf-strip",
1927 ),
1928 ]
Brian Silverman94cab072022-01-02 23:50:03 -08001929 elif ctx.attr.cpu == "armeabi-v7a":
Austin Schuhda9d0602019-09-15 17:29:38 -07001930 tool_paths = [
1931 tool_path(name = "ar", path = "/bin/false"),
1932 tool_path(name = "compat-ld", path = "/bin/false"),
1933 tool_path(name = "cpp", path = "/bin/false"),
1934 tool_path(name = "dwp", path = "/bin/false"),
1935 tool_path(name = "gcc", path = "/bin/false"),
1936 tool_path(name = "gcov", path = "/bin/false"),
1937 tool_path(name = "ld", path = "/bin/false"),
1938 tool_path(name = "nm", path = "/bin/false"),
1939 tool_path(name = "objcopy", path = "/bin/false"),
1940 tool_path(name = "objdump", path = "/bin/false"),
1941 tool_path(name = "strip", path = "/bin/false"),
1942 ]
1943 else:
1944 fail("Unreachable")
1945
Austin Schuhda9d0602019-09-15 17:29:38 -07001946 out = ctx.actions.declare_file(ctx.label.name)
1947 ctx.actions.write(out, "Fake executable")
1948 return [
1949 cc_common.create_cc_toolchain_config_info(
1950 ctx = ctx,
1951 features = features,
1952 action_configs = action_configs,
1953 artifact_name_patterns = artifact_name_patterns,
1954 cxx_builtin_include_directories = cxx_builtin_include_directories,
1955 toolchain_identifier = toolchain_identifier,
1956 host_system_name = host_system_name,
1957 target_system_name = target_system_name,
1958 target_cpu = target_cpu,
1959 target_libc = target_libc,
1960 compiler = compiler,
1961 abi_version = abi_version,
1962 abi_libc_version = abi_libc_version,
1963 tool_paths = tool_paths,
1964 make_variables = make_variables,
1965 builtin_sysroot = builtin_sysroot,
Austin Schuha2503a72020-12-15 20:57:57 -08001966 cc_target_os = cc_target_os,
Austin Schuhda9d0602019-09-15 17:29:38 -07001967 ),
1968 DefaultInfo(
1969 executable = out,
1970 ),
1971 ]
Austin Schuha2503a72020-12-15 20:57:57 -08001972
1973cc_toolchain_config = rule(
Austin Schuhda9d0602019-09-15 17:29:38 -07001974 implementation = _impl,
1975 attrs = {
Austin Schuh0a96ea32022-01-01 22:29:30 -08001976 "cpu": attr.string(mandatory = True, values = ["armeabi-v7a", "armhf-debian", "cortex-m4f", "cortex-m4f-k22", "k8", "roborio", "rp2040"]),
Austin Schuhda9d0602019-09-15 17:29:38 -07001977 },
1978 provides = [CcToolchainConfigInfo],
1979 executable = True,
1980)