blob: 8804cd21fba47ca4d2356eae106991f0c9c7378f [file] [log] [blame]
Austin Schuhda9d0602019-09-15 17:29:38 -07001load("@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
2 "action_config",
3 "artifact_name_pattern",
4 "env_entry",
5 "env_set",
6 "feature",
7 "feature_set",
8 "flag_group",
9 "flag_set",
10 "make_variable",
11 "tool",
12 "tool_path",
13 "variable_with_value",
14 "with_feature_set",
15)
16load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
17
18def _impl(ctx):
19 if (ctx.attr.cpu == "armhf-debian"):
20 toolchain_identifier = "clang_linux_armhf"
21 elif (ctx.attr.cpu == "cortex-m4f"):
22 toolchain_identifier = "cortex-m4f"
23 elif (ctx.attr.cpu == "cortex-m4f-k22"):
24 toolchain_identifier = "cortex-m4f-k22"
25 elif (ctx.attr.cpu == "k8"):
26 toolchain_identifier = "k8_linux"
27 elif (ctx.attr.cpu == "roborio"):
28 toolchain_identifier = "roborio_linux"
29 elif (ctx.attr.cpu == "armeabi-v7a"):
30 toolchain_identifier = "stub_armeabi-v7a"
31 else:
32 fail("Unreachable")
33
34 if (ctx.attr.cpu == "armeabi-v7a"):
35 host_system_name = "armeabi-v7a"
36 elif (ctx.attr.cpu == "armhf-debian"):
37 host_system_name = "linux"
38 elif (ctx.attr.cpu == "cortex-m4f"
39 or ctx.attr.cpu == "cortex-m4f-k22"
40 or ctx.attr.cpu == "k8"):
41 host_system_name = "local"
42 elif (ctx.attr.cpu == "roborio"):
43 host_system_name = "roborio"
44 else:
45 fail("Unreachable")
46
47 if (ctx.attr.cpu == "armhf-debian"):
48 target_system_name = "arm_a15"
49 elif (ctx.attr.cpu == "armeabi-v7a"):
50 target_system_name = "armeabi-v7a"
51 elif (ctx.attr.cpu == "cortex-m4f"):
52 target_system_name = "cortex-m4f"
53 elif (ctx.attr.cpu == "cortex-m4f-k22"):
54 target_system_name = "cortex-m4f-k22"
55 elif (ctx.attr.cpu == "k8"):
56 target_system_name = "k8"
57 elif (ctx.attr.cpu == "roborio"):
58 target_system_name = "roborio"
59 else:
60 fail("Unreachable")
61
62 if (ctx.attr.cpu == "armeabi-v7a"):
63 target_cpu = "armeabi-v7a"
64 elif (ctx.attr.cpu == "armhf-debian"):
65 target_cpu = "armhf-debian"
66 elif (ctx.attr.cpu == "cortex-m4f"):
67 target_cpu = "cortex-m4f"
68 elif (ctx.attr.cpu == "cortex-m4f-k22"):
69 target_cpu = "cortex-m4f-k22"
70 elif (ctx.attr.cpu == "k8"):
71 target_cpu = "k8"
72 elif (ctx.attr.cpu == "roborio"):
73 target_cpu = "roborio"
74 else:
75 fail("Unreachable")
76
77 if (ctx.attr.cpu == "armeabi-v7a"):
78 target_libc = "armeabi-v7a"
79 elif (ctx.attr.cpu == "cortex-m4f"):
80 target_libc = "cortex-m4f"
81 elif (ctx.attr.cpu == "cortex-m4f-k22"):
82 target_libc = "cortex-m4f-k22"
83 elif (ctx.attr.cpu == "armhf-debian"):
84 target_libc = "glibc_2.19"
85 elif (ctx.attr.cpu == "k8"):
86 target_libc = "local"
87 elif (ctx.attr.cpu == "roborio"):
88 target_libc = "roborio"
89 else:
90 fail("Unreachable")
91
92 if (ctx.attr.cpu == "armhf-debian"
93 or ctx.attr.cpu == "k8"):
94 compiler = "clang"
95 elif (ctx.attr.cpu == "armeabi-v7a"):
96 compiler = "compiler"
97 elif (ctx.attr.cpu == "cortex-m4f"
98 or ctx.attr.cpu == "cortex-m4f-k22"
99 or ctx.attr.cpu == "roborio"):
100 compiler = "gcc"
101 else:
102 fail("Unreachable")
103
104 if (ctx.attr.cpu == "armeabi-v7a"):
105 abi_version = "armeabi-v7a"
106 elif (ctx.attr.cpu == "armhf-debian"):
107 abi_version = "clang_6.0"
108 elif (ctx.attr.cpu == "cortex-m4f"):
109 abi_version = "cortex-m4f"
110 elif (ctx.attr.cpu == "cortex-m4f-k22"):
111 abi_version = "cortex-m4f-k22"
112 elif (ctx.attr.cpu == "k8"):
113 abi_version = "local"
114 elif (ctx.attr.cpu == "roborio"):
115 abi_version = "roborio"
116 else:
117 fail("Unreachable")
118
119 if (ctx.attr.cpu == "armeabi-v7a"):
120 abi_libc_version = "armeabi-v7a"
121 elif (ctx.attr.cpu == "cortex-m4f"):
122 abi_libc_version = "cortex-m4f"
123 elif (ctx.attr.cpu == "cortex-m4f-k22"):
124 abi_libc_version = "cortex-m4f-k22"
125 elif (ctx.attr.cpu == "armhf-debian"):
126 abi_libc_version = "glibc_2.19"
127 elif (ctx.attr.cpu == "k8"):
128 abi_libc_version = "local"
129 elif (ctx.attr.cpu == "roborio"):
130 abi_libc_version = "roborio"
131 else:
132 fail("Unreachable")
133
134 cc_target_os = None
135
136 builtin_sysroot = None
137
138 all_compile_actions = [
139 ACTION_NAMES.c_compile,
140 ACTION_NAMES.cpp_compile,
141 ACTION_NAMES.linkstamp_compile,
142 ACTION_NAMES.assemble,
143 ACTION_NAMES.preprocess_assemble,
144 ACTION_NAMES.cpp_header_parsing,
145 ACTION_NAMES.cpp_module_compile,
146 ACTION_NAMES.cpp_module_codegen,
147 ACTION_NAMES.clif_match,
148 ACTION_NAMES.lto_backend,
149 ]
150
151 all_cpp_compile_actions = [
152 ACTION_NAMES.cpp_compile,
153 ACTION_NAMES.linkstamp_compile,
154 ACTION_NAMES.cpp_header_parsing,
155 ACTION_NAMES.cpp_module_compile,
156 ACTION_NAMES.cpp_module_codegen,
157 ACTION_NAMES.clif_match,
158 ]
159
160 preprocessor_compile_actions = [
161 ACTION_NAMES.c_compile,
162 ACTION_NAMES.cpp_compile,
163 ACTION_NAMES.linkstamp_compile,
164 ACTION_NAMES.preprocess_assemble,
165 ACTION_NAMES.cpp_header_parsing,
166 ACTION_NAMES.cpp_module_compile,
167 ACTION_NAMES.clif_match,
168 ]
169
170 codegen_compile_actions = [
171 ACTION_NAMES.c_compile,
172 ACTION_NAMES.cpp_compile,
173 ACTION_NAMES.linkstamp_compile,
174 ACTION_NAMES.assemble,
175 ACTION_NAMES.preprocess_assemble,
176 ACTION_NAMES.cpp_module_codegen,
177 ACTION_NAMES.lto_backend,
178 ]
179
180 all_link_actions = [
181 ACTION_NAMES.cpp_link_executable,
182 ACTION_NAMES.cpp_link_dynamic_library,
183 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
184 ]
185
186 if (ctx.attr.cpu == "roborio"):
187 objcopy_embed_data_action = action_config(
188 action_name = "objcopy_embed_data",
189 enabled = True,
190 tools = [
191 tool(
192 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
193 ),
194 ],
195 )
196 elif (ctx.attr.cpu == "armhf-debian"):
197 objcopy_embed_data_action = action_config(
198 action_name = "objcopy_embed_data",
199 enabled = True,
200 tools = [
201 tool(path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy"),
202 ],
203 )
204 elif (ctx.attr.cpu == "k8"):
205 objcopy_embed_data_action = action_config(
206 action_name = "objcopy_embed_data",
207 enabled = True,
208 tools = [tool(path = "clang_6p0/x86_64-linux-gnu-objcopy")],
209 )
210 elif (ctx.attr.cpu == "cortex-m4f"
211 or ctx.attr.cpu == "cortex-m4f-k22"):
212 objcopy_embed_data_action = action_config(
213 action_name = "objcopy_embed_data",
214 enabled = True,
215 tools = [tool(path = "gcc_arm_none_eabi/arm-none-eabi-objcopy")],
216 )
217 else:
218 objcopy_embed_data_action = None
219
220 if (ctx.attr.cpu == "armeabi-v7a"):
221 action_configs = []
222 elif (ctx.attr.cpu == "armhf-debian"
223 or ctx.attr.cpu == "cortex-m4f"
224 or ctx.attr.cpu == "cortex-m4f-k22"
225 or ctx.attr.cpu == "k8"
226 or ctx.attr.cpu == "roborio"):
227 action_configs = [objcopy_embed_data_action]
228 else:
229 fail("Unreachable")
230
231 opt_post_feature = feature(
232 name = "opt_post",
233 flag_sets = [
234 flag_set(
235 actions = [
236 ACTION_NAMES.preprocess_assemble,
237 ACTION_NAMES.c_compile,
238 ACTION_NAMES.cpp_compile,
239 ACTION_NAMES.cpp_header_parsing,
240 "c++-header-preprocessing",
241 ACTION_NAMES.cpp_module_compile,
242 ],
243 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
244 ),
245 ],
246 )
247
248 supports_pic_feature = feature(name = "supports_pic", enabled = True)
249
250 if (ctx.attr.cpu == "k8"):
251 default_compile_flags_feature = feature(
252 name = "default_compile_flags",
253 enabled = True,
254 flag_sets = [
255 flag_set(
256 actions = [
257 ACTION_NAMES.assemble,
258 ACTION_NAMES.preprocess_assemble,
259 ACTION_NAMES.linkstamp_compile,
260 ACTION_NAMES.c_compile,
261 ACTION_NAMES.cpp_compile,
262 ACTION_NAMES.cpp_header_parsing,
263 ACTION_NAMES.cpp_module_compile,
264 ACTION_NAMES.cpp_module_codegen,
265 ACTION_NAMES.lto_backend,
266 ACTION_NAMES.clif_match,
267 ],
268 flag_groups = [
269 flag_group(
270 flags = [
271 "--sysroot=external/amd64_debian_sysroot",
272 "-nostdinc",
273 "-isystem",
274 "external/amd64_debian_sysroot/usr/include/c++/7",
275 "-isystem",
276 "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu/c++/7",
277 "-isystem",
278 "external/amd64_debian_sysroot/usr/include/c++/8/backward",
279 "-isystem",
280 "external/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/8/include",
281 "-isystem",
282 "external/clang_6p0_repo/usr/lib/llvm-6.0/lib/clang/6.0.0/include",
283 "-isystem",
284 "external/amd64_debian_sysroot/usr/include/x86_64-linux-gnu",
285 "-isystem",
286 "external/amd64_debian_sysroot/usr/include",
287 "-D__STDC_FORMAT_MACROS",
288 "-D__STDC_CONSTANT_MACROS",
289 "-D__STDC_LIMIT_MACROS",
290 "-D_FILE_OFFSET_BITS=64",
291 "-DAOS_ARCHITECTURE_arm_frc",
292 "-U_FORTIFY_SOURCE",
293 "-D_FORTIFY_SOURCE=1",
294 "-fstack-protector",
295 "-fPIE",
296 "-fcolor-diagnostics",
297 "-fmessage-length=80",
298 "-fmacro-backtrace-limit=0",
299 "-Wall",
300 "-Wextra",
301 "-Wpointer-arith",
302 "-Wstrict-aliasing",
303 "-Wcast-qual",
304 "-Wcast-align",
305 "-Wwrite-strings",
306 "-Wtype-limits",
307 "-Wsign-compare",
308 "-Wformat=2",
309 "-Werror",
310 "-fno-omit-frame-pointer",
311 "-pipe",
312 "-ggdb3",
313 ],
314 ),
315 ],
316 ),
317 flag_set(
318 actions = [
319 ACTION_NAMES.assemble,
320 ACTION_NAMES.preprocess_assemble,
321 ACTION_NAMES.linkstamp_compile,
322 ACTION_NAMES.c_compile,
323 ACTION_NAMES.cpp_compile,
324 ACTION_NAMES.cpp_header_parsing,
325 ACTION_NAMES.cpp_module_compile,
326 ACTION_NAMES.cpp_module_codegen,
327 ACTION_NAMES.lto_backend,
328 ACTION_NAMES.clif_match,
329 ],
330 flag_groups = [
331 flag_group(
332 flags = [
333 "-O2",
334 "-DNDEBUG",
335 "-ffunction-sections",
336 "-fdata-sections",
337 ],
338 ),
339 ],
340 with_features = [with_feature_set(features = ["opt"])],
341 ),
342 ],
343 )
344 elif (ctx.attr.cpu == "cortex-m4f-k22"):
345 default_compile_flags_feature = feature(
346 name = "default_compile_flags",
347 enabled = True,
348 flag_sets = [
349 flag_set(
350 actions = [
351 ACTION_NAMES.assemble,
352 ACTION_NAMES.preprocess_assemble,
353 ACTION_NAMES.linkstamp_compile,
354 ACTION_NAMES.c_compile,
355 ACTION_NAMES.cpp_compile,
356 ACTION_NAMES.cpp_header_parsing,
357 ACTION_NAMES.cpp_module_compile,
358 ACTION_NAMES.cpp_module_codegen,
359 ACTION_NAMES.lto_backend,
360 ACTION_NAMES.clif_match,
361 ],
362 flag_groups = [
363 flag_group(
364 flags = [
365 "-D__STDC_FORMAT_MACROS",
366 "-D__STDC_CONSTANT_MACROS",
367 "-D__STDC_LIMIT_MACROS",
368 "-D__MK22FX512__",
369 "-DF_CPU=120000000",
370 "-Wl,--gc-sections",
371 "-D__have_long32",
372 "-fstack-protector",
373 "-mcpu=cortex-m4",
374 "-mfpu=fpv4-sp-d16",
375 "-mthumb",
376 "-mfloat-abi=hard",
377 "-fno-strict-aliasing",
378 "-fmessage-length=80",
379 "-fmax-errors=20",
380 "-Wall",
381 "-Wextra",
382 "-Wpointer-arith",
383 "-Wcast-qual",
384 "-Wwrite-strings",
385 "-Wtype-limits",
386 "-Wsign-compare",
387 "-Wformat=2",
388 "-Werror",
389 "-Wstrict-aliasing=2",
390 "-Wno-misleading-indentation",
391 "-Wno-int-in-bool-context",
392 "-Wdouble-promotion",
393 "-pipe",
394 "-g",
395 "-fno-common",
396 "-ffreestanding",
397 "-fbuiltin",
398 ],
399 ),
400 ],
401 ),
402 flag_set(
403 actions = [
404 ACTION_NAMES.assemble,
405 ACTION_NAMES.preprocess_assemble,
406 ACTION_NAMES.linkstamp_compile,
407 ACTION_NAMES.c_compile,
408 ACTION_NAMES.cpp_compile,
409 ACTION_NAMES.cpp_header_parsing,
410 ACTION_NAMES.cpp_module_compile,
411 ACTION_NAMES.cpp_module_codegen,
412 ACTION_NAMES.lto_backend,
413 ACTION_NAMES.clif_match,
414 ],
415 flag_groups = [
416 flag_group(
417 flags = [
418 "-O2",
419 "-finline-functions",
420 "-ffast-math",
421 "-funroll-loops",
422 "-DNDEBUG",
423 "-ffunction-sections",
424 ],
425 ),
426 ],
427 with_features = [with_feature_set(features = ["opt"])],
428 ),
429 ],
430 )
431 elif (ctx.attr.cpu == "cortex-m4f"):
432 default_compile_flags_feature = feature(
433 name = "default_compile_flags",
434 enabled = True,
435 flag_sets = [
436 flag_set(
437 actions = [
438 ACTION_NAMES.assemble,
439 ACTION_NAMES.preprocess_assemble,
440 ACTION_NAMES.linkstamp_compile,
441 ACTION_NAMES.c_compile,
442 ACTION_NAMES.cpp_compile,
443 ACTION_NAMES.cpp_header_parsing,
444 ACTION_NAMES.cpp_module_compile,
445 ACTION_NAMES.cpp_module_codegen,
446 ACTION_NAMES.lto_backend,
447 ACTION_NAMES.clif_match,
448 ],
449 flag_groups = [
450 flag_group(
451 flags = [
452 "-D__STDC_FORMAT_MACROS",
453 "-D__STDC_CONSTANT_MACROS",
454 "-D__STDC_LIMIT_MACROS",
455 "-D__MK64FX512__",
456 "-DF_CPU=120000000",
457 "-Wl,--gc-sections",
458 "-D__have_long32",
459 "-fstack-protector",
460 "-mcpu=cortex-m4",
461 "-mfpu=fpv4-sp-d16",
462 "-mthumb",
463 "-mfloat-abi=hard",
464 "-fno-strict-aliasing",
465 "-fmessage-length=80",
466 "-fmax-errors=20",
467 "-Wall",
468 "-Wextra",
469 "-Wpointer-arith",
470 "-Wcast-qual",
471 "-Wwrite-strings",
472 "-Wtype-limits",
473 "-Wsign-compare",
474 "-Wformat=2",
475 "-Werror",
476 "-Wstrict-aliasing=2",
477 "-Wno-misleading-indentation",
478 "-Wno-int-in-bool-context",
479 "-Wdouble-promotion",
480 "-pipe",
481 "-g",
482 "-fno-common",
483 "-ffreestanding",
484 "-fbuiltin",
485 ],
486 ),
487 ],
488 ),
489 flag_set(
490 actions = [
491 ACTION_NAMES.assemble,
492 ACTION_NAMES.preprocess_assemble,
493 ACTION_NAMES.linkstamp_compile,
494 ACTION_NAMES.c_compile,
495 ACTION_NAMES.cpp_compile,
496 ACTION_NAMES.cpp_header_parsing,
497 ACTION_NAMES.cpp_module_compile,
498 ACTION_NAMES.cpp_module_codegen,
499 ACTION_NAMES.lto_backend,
500 ACTION_NAMES.clif_match,
501 ],
502 flag_groups = [
503 flag_group(
504 flags = [
505 "-O2",
506 "-finline-functions",
507 "-ffast-math",
508 "-funroll-loops",
509 "-DNDEBUG",
510 "-ffunction-sections",
511 ],
512 ),
513 ],
514 with_features = [with_feature_set(features = ["opt"])],
515 ),
516 ],
517 )
518 elif (ctx.attr.cpu == "armhf-debian"):
519 default_compile_flags_feature = feature(
520 name = "default_compile_flags",
521 enabled = True,
522 flag_sets = [
523 flag_set(
524 actions = [
525 ACTION_NAMES.assemble,
526 ACTION_NAMES.preprocess_assemble,
527 ACTION_NAMES.linkstamp_compile,
528 ACTION_NAMES.c_compile,
529 ACTION_NAMES.cpp_compile,
530 ACTION_NAMES.cpp_header_parsing,
531 ACTION_NAMES.cpp_module_compile,
532 ACTION_NAMES.cpp_module_codegen,
533 ACTION_NAMES.lto_backend,
534 ACTION_NAMES.clif_match,
535 ],
536 flag_groups = [
537 flag_group(
538 flags = [
539 "-target",
540 "armv7a-arm-linux-gnueabif",
541 "--sysroot=external/armhf_debian_rootfs",
542 "-mfloat-abi=hard",
543 "-mfpu=vfpv3-d16",
544 "-nostdinc",
545 "-isystem",
546 "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include",
547 "-isystem",
548 "external/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed",
549 "-isystem",
550 "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1/arm-linux-gnueabihf",
551 "-isystem",
552 "external/linaro_linux_gcc_repo/arm-linux-gnueabihf/include/c++/7.4.1",
553 "-isystem",
554 "external/linaro_linux_gcc_repo/include/c++/7.4.1/arm-linux-gnueabihf",
555 "-isystem",
556 "external/linaro_linux_gcc_repo/include/c++/7.4.1",
557 "-isystem",
558 "external/armhf_debian_rootfs/usr/include",
559 "-isystem",
560 "external/armhf_debian_rootfs/usr/include/arm-linux-gnueabihf",
561 "-isystem",
562 "external/org_frc971/third_party",
563 "-D__STDC_FORMAT_MACROS",
564 "-D__STDC_CONSTANT_MACROS",
565 "-D__STDC_LIMIT_MACROS",
566 "-D_FILE_OFFSET_BITS=64",
567 "-DAOS_ARCHITECTURE_armhf",
568 "-U_FORTIFY_SOURCE",
569 "-fstack-protector",
570 "-fPIE",
571 "-fdiagnostics-color=always",
572 "-Wall",
573 "-Wextra",
574 "-Wpointer-arith",
575 "-Wstrict-aliasing",
576 "-Wcast-qual",
577 "-Wcast-align",
578 "-Wwrite-strings",
579 "-Wtype-limits",
580 "-Wsign-compare",
581 "-Wformat=2",
582 "-Werror",
583 "-Wunused-local-typedefs",
584 "-fno-omit-frame-pointer",
585 "-pipe",
586 "-ggdb3",
587 ],
588 ),
589 ],
590 ),
591 flag_set(
592 actions = [
593 ACTION_NAMES.assemble,
594 ACTION_NAMES.preprocess_assemble,
595 ACTION_NAMES.linkstamp_compile,
596 ACTION_NAMES.c_compile,
597 ACTION_NAMES.cpp_compile,
598 ACTION_NAMES.cpp_header_parsing,
599 ACTION_NAMES.cpp_module_compile,
600 ACTION_NAMES.cpp_module_codegen,
601 ACTION_NAMES.lto_backend,
602 ACTION_NAMES.clif_match,
603 ],
604 flag_groups = [
605 flag_group(
606 flags = [
607 "-O2",
608 "-DNDEBUG",
609 "-D_FORTIFY_SOURCE=1",
610 "-ffunction-sections",
611 "-fdata-sections",
612 ],
613 ),
614 ],
615 with_features = [with_feature_set(features = ["opt"])],
616 ),
617 ],
618 )
619 else:
620 default_compile_flags_feature = None
621
622 if (ctx.attr.cpu == "armhf-debian"
623 or ctx.attr.cpu == "k8"):
624 dbg_feature = feature(
625 name = "dbg",
626 flag_sets = [
627 flag_set(
628 actions = [
629 ACTION_NAMES.preprocess_assemble,
630 ACTION_NAMES.c_compile,
631 ACTION_NAMES.cpp_compile,
632 ACTION_NAMES.cpp_header_parsing,
633 "c++-header-preprocessing",
634 ACTION_NAMES.cpp_module_compile,
635 ],
636 flag_groups = [
637 flag_group(flags = ["-DAOS_DEBUG=1"]),
638 flag_group(flags = ["-fno-omit-frame-pointer"]),
639 ],
640 ),
641 ],
642 implies = ["all_modes"],
643 )
644 elif (ctx.attr.cpu == "roborio"):
645 dbg_feature = feature(
646 name = "dbg",
647 flag_sets = [
648 flag_set(
649 actions = [
650 ACTION_NAMES.preprocess_assemble,
651 ACTION_NAMES.c_compile,
652 ACTION_NAMES.cpp_compile,
653 ACTION_NAMES.cpp_header_parsing,
654 "c++-header-preprocessing",
655 ACTION_NAMES.cpp_module_compile,
656 ],
657 flag_groups = [
658 flag_group(flags = ["-DAOS_DEBUG=1"]),
659 flag_group(flags = ["-fno-omit-frame-pointer"]),
660 ],
661 ),
662 ],
663 )
664 elif (ctx.attr.cpu == "cortex-m4f"
665 or ctx.attr.cpu == "cortex-m4f-k22"):
666 dbg_feature = feature(
667 name = "dbg",
668 flag_sets = [
669 flag_set(
670 actions = [
671 ACTION_NAMES.preprocess_assemble,
672 ACTION_NAMES.c_compile,
673 ACTION_NAMES.cpp_compile,
674 ACTION_NAMES.cpp_header_parsing,
675 "c++-header-preprocessing",
676 ACTION_NAMES.cpp_module_compile,
677 ],
678 flag_groups = [flag_group(flags = ["-fno-omit-frame-pointer"])],
679 ),
680 ],
681 implies = ["all_modes"],
682 )
683 else:
684 dbg_feature = None
685
686 if (ctx.attr.cpu == "armhf-debian"
687 or ctx.attr.cpu == "k8"):
688 fastbuild_feature = feature(
689 name = "fastbuild",
690 flag_sets = [
691 flag_set(
692 actions = [
693 ACTION_NAMES.preprocess_assemble,
694 ACTION_NAMES.c_compile,
695 ACTION_NAMES.cpp_compile,
696 ACTION_NAMES.cpp_header_parsing,
697 "c++-header-preprocessing",
698 ACTION_NAMES.cpp_module_compile,
699 ],
700 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
701 ),
702 ],
703 implies = ["all_modes"],
704 )
705 elif (ctx.attr.cpu == "roborio"):
706 fastbuild_feature = feature(
707 name = "fastbuild",
708 flag_sets = [
709 flag_set(
710 actions = [
711 ACTION_NAMES.preprocess_assemble,
712 ACTION_NAMES.c_compile,
713 ACTION_NAMES.cpp_compile,
714 ACTION_NAMES.cpp_header_parsing,
715 "c++-header-preprocessing",
716 ACTION_NAMES.cpp_module_compile,
717 ],
718 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
719 ),
720 ],
721 )
722 elif (ctx.attr.cpu == "cortex-m4f"
723 or ctx.attr.cpu == "cortex-m4f-k22"):
724 fastbuild_feature = feature(name = "fastbuild", implies = ["all_modes"])
725 else:
726 fastbuild_feature = None
727
728 pie_for_linking_feature = feature(
729 name = "pie_for_linking",
730 enabled = True,
731 flag_sets = [
732 flag_set(
733 actions = [ACTION_NAMES.cpp_link_executable],
734 flag_groups = [flag_group(flags = ["-pie"])],
735 ),
736 ],
737 )
738
739 if (ctx.attr.cpu == "roborio"):
740 opt_feature = feature(
741 name = "opt",
742 flag_sets = [
743 flag_set(
744 actions = [
745 ACTION_NAMES.assemble,
746 ACTION_NAMES.preprocess_assemble,
747 ACTION_NAMES.c_compile,
748 ACTION_NAMES.cpp_compile,
749 ACTION_NAMES.cpp_module_compile,
750 ACTION_NAMES.objc_compile,
751 ACTION_NAMES.objcpp_compile,
752 ACTION_NAMES.cpp_header_parsing,
753 ACTION_NAMES.linkstamp_compile,
754 ],
755 flag_groups = [
756 flag_group(
757 flags = [
758 "-O2",
759 "-DNDEBUG",
760 "-D_FORTIFY_SOURCE=1",
761 "-ffunction-sections",
762 "-fdata-sections",
763 ],
764 ),
765 ],
766 ),
767 flag_set(
768 actions = [
769 ACTION_NAMES.cpp_link_executable,
770 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
771 ACTION_NAMES.cpp_link_dynamic_library,
772 ],
773 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
774 ),
775 ],
776 implies = ["opt_post"],
777 )
778 elif (ctx.attr.cpu == "armhf-debian"
779 or ctx.attr.cpu == "k8"):
780 opt_feature = feature(
781 name = "opt",
782 flag_sets = [
783 flag_set(
784 actions = [
785 ACTION_NAMES.preprocess_assemble,
786 ACTION_NAMES.c_compile,
787 ACTION_NAMES.cpp_compile,
788 ACTION_NAMES.cpp_header_parsing,
789 "c++-header-preprocessing",
790 ACTION_NAMES.cpp_module_compile,
791 ],
792 flag_groups = [flag_group(flags = ["-DAOS_DEBUG=0"])],
793 ),
794 ],
795 implies = ["all_modes"],
796 )
797 elif (ctx.attr.cpu == "cortex-m4f"
798 or ctx.attr.cpu == "cortex-m4f-k22"):
799 opt_feature = feature(name = "opt", implies = ["all_modes"])
800 else:
801 opt_feature = None
802
803 pic_feature = feature(
804 name = "pic",
805 enabled = True,
806 flag_sets = [
807 flag_set(
808 actions = [
809 ACTION_NAMES.assemble,
810 ACTION_NAMES.preprocess_assemble,
811 ACTION_NAMES.linkstamp_compile,
812 ACTION_NAMES.c_compile,
813 ACTION_NAMES.cpp_compile,
814 ACTION_NAMES.cpp_module_codegen,
815 ACTION_NAMES.cpp_module_compile,
816 ],
817 flag_groups = [
818 flag_group(flags = ["-fPIC"], expand_if_available = "pic"),
819 ],
820 ),
821 ],
822 )
823
824 if (ctx.attr.cpu == "cortex-m4f"
825 or ctx.attr.cpu == "cortex-m4f-k22"):
826 include_paths_feature = feature(
827 name = "include_paths",
828 enabled = True,
829 flag_sets = [
830 flag_set(
831 actions = [
832 ACTION_NAMES.preprocess_assemble,
833 ACTION_NAMES.c_compile,
834 ACTION_NAMES.cpp_compile,
835 ACTION_NAMES.cpp_header_parsing,
836 "c++-header-preprocessing",
837 ACTION_NAMES.cpp_module_compile,
838 ],
839 flag_groups = [
840 flag_group(
841 flags = ["-iquote", "%{quote_include_paths}"],
842 iterate_over = "quote_include_paths",
843 ),
844 flag_group(
845 flags = ["-I%{include_paths}"],
846 iterate_over = "include_paths",
847 ),
848 flag_group(
849 flags = ["-I", "%{system_include_paths}"],
850 iterate_over = "system_include_paths",
851 ),
852 ],
853 ),
854 ],
855 )
856 elif (ctx.attr.cpu == "roborio"):
857 include_paths_feature = feature(
858 name = "include_paths",
859 enabled = True,
860 flag_sets = [
861 flag_set(
862 actions = [
863 ACTION_NAMES.preprocess_assemble,
864 ACTION_NAMES.c_compile,
865 ACTION_NAMES.cpp_compile,
866 ACTION_NAMES.cpp_header_parsing,
867 "c++-header-preprocessing",
868 ACTION_NAMES.cpp_module_compile,
869 ],
870 flag_groups = [
871 flag_group(
872 flags = ["-iquote", "%{quote_include_paths}"],
873 iterate_over = "quote_include_paths",
874 ),
875 flag_group(
876 flags = ["-I%{include_paths}"],
877 iterate_over = "include_paths",
878 ),
879 flag_group(
880 flags = ["-isystem", "%{system_include_paths}"],
881 iterate_over = "system_include_paths",
882 ),
883 ],
884 ),
885 ],
886 )
887 else:
888 include_paths_feature = None
889
890 random_seed_feature = feature(
891 name = "random_seed",
892 enabled = True,
893 flag_sets = [
894 flag_set(
895 actions = [
896 ACTION_NAMES.cpp_compile,
897 ACTION_NAMES.cpp_module_codegen,
898 ACTION_NAMES.cpp_module_compile,
899 ],
900 flag_groups = [
901 flag_group(
902 flags = ["-frandom-seed=%{output_file}"],
903 expand_if_available = "output_file",
904 ),
905 ],
906 ),
907 ],
908 )
909
910 if (ctx.attr.cpu == "roborio"):
911 default_link_flags_feature = feature(
912 name = "default_link_flags",
913 enabled = True,
914 flag_sets = [
915 flag_set(
916 actions = all_link_actions,
917 flag_groups = [
918 flag_group(
919 flags = [
920 "-lstdc++",
921 "-Ltools/cpp/arm-frc-linux-gnueabi/libs",
922 "-no-canonical-prefixes",
923 "-Wl,-z,relro,-z,now",
924 "-lm",
925 "-pass-exit-codes",
926 "-Wl,--build-id=md5",
927 "-Wl,--hash-style=gnu",
928 ],
929 ),
930 ],
931 ),
932 ],
933 )
934 elif (ctx.attr.cpu == "cortex-m4f-k22"):
935 default_link_flags_feature = feature(
936 name = "default_link_flags",
937 enabled = True,
938 flag_sets = [
939 flag_set(
940 actions = all_link_actions,
941 flag_groups = [
942 flag_group(
943 flags = [
944 "-no-canonical-prefixes",
945 "-mcpu=cortex-m4",
946 "-mfpu=fpv4-sp-d16",
947 "-mthumb",
948 "-mfloat-abi=hard",
949 "-fno-strict-aliasing",
950 "--specs=nano.specs",
951 "-lgcc",
952 "-lstdc++_nano",
953 "-lm",
954 "-lc_nano",
955 "-Tmotors/core/kinetis_512_128.ld",
956 "-Tmotors/core/kinetis_sections.ld",
957 ],
958 ),
959 ],
960 ),
961 flag_set(
962 actions = all_link_actions,
963 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
964 with_features = [with_feature_set(features = ["opt"])],
965 ),
966 ],
967 )
968 elif (ctx.attr.cpu == "cortex-m4f"):
969 default_link_flags_feature = feature(
970 name = "default_link_flags",
971 enabled = True,
972 flag_sets = [
973 flag_set(
974 actions = all_link_actions,
975 flag_groups = [
976 flag_group(
977 flags = [
978 "-no-canonical-prefixes",
979 "-mcpu=cortex-m4",
980 "-mfpu=fpv4-sp-d16",
981 "-mthumb",
982 "-mfloat-abi=hard",
983 "-fno-strict-aliasing",
984 "--specs=nano.specs",
985 "-lgcc",
986 "-lstdc++_nano",
987 "-lm",
988 "-lc_nano",
989 "-Tmotors/core/kinetis_512_256.ld",
990 "-Tmotors/core/kinetis_sections.ld",
991 ],
992 ),
993 ],
994 ),
995 flag_set(
996 actions = all_link_actions,
997 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
998 with_features = [with_feature_set(features = ["opt"])],
999 ),
1000 ],
1001 )
1002 elif (ctx.attr.cpu == "k8"):
1003 default_link_flags_feature = feature(
1004 name = "default_link_flags",
1005 enabled = True,
1006 flag_sets = [
1007 flag_set(
1008 actions = all_link_actions,
1009 flag_groups = [
1010 flag_group(
1011 flags = [
1012 "-nodefaultlibs",
1013 "--sysroot=external/amd64_debian_sysroot",
1014 "-lstdc++",
1015 "-lc",
1016 "-lgcc",
1017 "-lgcc_s",
1018 "-Bexternal/clang_6p0_repo/usr/bin/",
1019 "-Ltools/cpp/clang_6p0/clang_more_libs",
1020 "-Lexternal/amd64_debian_sysroot/usr/lib/gcc/x86_64-linux-gnu/7/",
1021 "-Lexternal/amd64_debian_sysroot/usr/lib/x86_64-linux-gnu/",
1022 "-Lexternal/amd64_debian_sysroot/usr/lib/",
1023 "-Lexternal/amd64_debian_sysroot/lib/x86_64-linux-gnu/",
1024 "-Lexternal/amd64_debian_sysroot/lib/",
1025 "-no-canonical-prefixes",
1026 "-fuse-ld=gold",
1027 "-Wl,-z,relro,-z,now",
1028 "-lm",
1029 "-Wl,--build-id=md5",
1030 "-Wl,--hash-style=gnu",
1031 "-Wl,--warn-execstack",
1032 "-Wl,--detect-odr-violations",
1033 ],
1034 ),
1035 ],
1036 ),
1037 flag_set(
1038 actions = all_link_actions,
1039 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1040 with_features = [with_feature_set(features = ["opt"])],
1041 ),
1042 ],
1043 )
1044 elif (ctx.attr.cpu == "armhf-debian"):
1045 default_link_flags_feature = feature(
1046 name = "default_link_flags",
1047 enabled = True,
1048 flag_sets = [
1049 flag_set(
1050 actions = all_link_actions,
1051 flag_groups = [
1052 flag_group(
1053 flags = [
1054 "-target",
1055 "armv7a-arm-linux-gnueabif",
1056 "--sysroot=external/armhf_debian_rootfs",
1057 "-lstdc++",
1058 "-Ltools/cpp/linaro_linux_gcc/clang_more_libs",
1059 "-Lexternal/armhf_debian_rootfs/usr/lib/gcc/arm-linux-gnueabihf/8",
1060 "-Lexternal/armhf_debian_rootfs/lib/arm-linux-gnueabihf",
1061 "-Lexternal/armhf_debian_rootfs/usr/lib/arm-linux-gnueabihf",
1062 "-Lexternal/armhf_debian_rootfs/lib",
1063 "-Lexternal/armhf_debian_rootfs/usr/lib",
1064 "-Lexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
1065 "-Bexternal/linaro_linux_gcc_repo/lib/gcc/arm-linux-gnueabihf/7.4.1",
1066 "-Bexternal/linaro_linux_gcc_repo/arm-linux-gnueabihf/bin",
1067 "-Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3",
1068 "-no-canonical-prefixes",
1069 "-Wl,-z,relro,-z,now",
1070 "-lm",
1071 "-Wl,--build-id=md5",
1072 "-Wl,--hash-style=gnu",
1073 ],
1074 ),
1075 ],
1076 ),
1077 flag_set(
1078 actions = all_link_actions,
1079 flag_groups = [flag_group(flags = ["-Wl,--gc-sections"])],
1080 with_features = [with_feature_set(features = ["opt"])],
1081 ),
1082 ],
1083 )
1084 else:
1085 default_link_flags_feature = None
1086
1087 if (ctx.attr.cpu == "roborio"):
1088 all_modes_feature = feature(
1089 name = "all_modes",
1090 enabled = True,
1091 flag_sets = [
1092 flag_set(
1093 actions = [
1094 ACTION_NAMES.preprocess_assemble,
1095 ACTION_NAMES.assemble,
1096 ACTION_NAMES.c_compile,
1097 ],
1098 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1099 ),
1100 flag_set(
1101 actions = [
1102 ACTION_NAMES.cpp_compile,
1103 ACTION_NAMES.cpp_header_parsing,
1104 "c++-header-preprocessing",
1105 ACTION_NAMES.cpp_module_compile,
1106 ],
1107 flag_groups = [
1108 flag_group(
1109 flags = ["-std=gnu++1z", "-fno-sized-deallocation"],
1110 ),
1111 ],
1112 ),
1113 flag_set(
1114 actions = [
1115 ACTION_NAMES.preprocess_assemble,
1116 ACTION_NAMES.assemble,
1117 "c++-link",
1118 ACTION_NAMES.cpp_compile,
1119 ACTION_NAMES.cpp_header_parsing,
1120 "c++-header-preprocessing",
1121 ACTION_NAMES.cpp_module_compile,
1122 ACTION_NAMES.c_compile,
1123 ],
1124 flag_groups = [flag_group(flags = ["-pthread"])],
1125 ),
1126 ],
1127 )
1128 elif (ctx.attr.cpu == "cortex-m4f"
1129 or ctx.attr.cpu == "cortex-m4f-k22"):
1130 all_modes_feature = feature(
1131 name = "all_modes",
1132 flag_sets = [
1133 flag_set(
1134 actions = [
1135 ACTION_NAMES.preprocess_assemble,
1136 ACTION_NAMES.assemble,
1137 ACTION_NAMES.c_compile,
1138 ],
1139 flag_groups = [flag_group(flags = ["--std=gnu99"])],
1140 ),
1141 flag_set(
1142 actions = [
1143 ACTION_NAMES.cpp_compile,
1144 ACTION_NAMES.cpp_header_parsing,
1145 "c++-header-preprocessing",
1146 ACTION_NAMES.cpp_module_compile,
1147 ],
1148 flag_groups = [
1149 flag_group(
1150 flags = ["--std=gnu++1z", "-fno-exceptions", "-fno-rtti"],
1151 ),
1152 ],
1153 ),
1154 ],
1155 )
1156 elif (ctx.attr.cpu == "armhf-debian"):
1157 all_modes_feature = feature(
1158 name = "all_modes",
1159 flag_sets = [
1160 flag_set(
1161 actions = [
1162 ACTION_NAMES.preprocess_assemble,
1163 ACTION_NAMES.assemble,
1164 ACTION_NAMES.c_compile,
1165 ],
1166 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1167 ),
1168 flag_set(
1169 actions = [
1170 ACTION_NAMES.cpp_compile,
1171 ACTION_NAMES.cpp_header_parsing,
1172 "c++-header-preprocessing",
1173 ACTION_NAMES.cpp_module_compile,
1174 ],
1175 flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
1176 ),
1177 flag_set(
1178 actions = [
1179 ACTION_NAMES.preprocess_assemble,
1180 ACTION_NAMES.assemble,
1181 "c++-link",
1182 ACTION_NAMES.cpp_compile,
1183 ACTION_NAMES.cpp_header_parsing,
1184 "c++-header-preprocessing",
1185 ACTION_NAMES.cpp_module_compile,
1186 ACTION_NAMES.c_compile,
1187 ],
1188 flag_groups = [flag_group(flags = ["-pthread"])],
1189 ),
1190 ],
1191 )
1192 elif (ctx.attr.cpu == "k8"):
1193 all_modes_feature = feature(
1194 name = "all_modes",
1195 flag_sets = [
1196 flag_set(
1197 actions = [
1198 ACTION_NAMES.preprocess_assemble,
1199 ACTION_NAMES.assemble,
1200 ACTION_NAMES.c_compile,
1201 ],
1202 flag_groups = [flag_group(flags = ["-std=gnu99"])],
1203 ),
1204 flag_set(
1205 actions = [
1206 ACTION_NAMES.cpp_compile,
1207 ACTION_NAMES.cpp_header_parsing,
1208 "c++-header-preprocessing",
1209 ACTION_NAMES.cpp_module_compile,
1210 ],
1211 flag_groups = [flag_group(flags = ["-std=gnu++1z"])],
1212 ),
1213 ],
1214 )
1215 else:
1216 all_modes_feature = None
1217
1218 supports_dynamic_linker_feature = feature(name = "supports_dynamic_linker", enabled = True)
1219
1220 if (ctx.attr.cpu == "k8"):
1221 unfiltered_compile_flags_feature = feature(
1222 name = "unfiltered_compile_flags",
1223 enabled = True,
1224 flag_sets = [
1225 flag_set(
1226 actions = [
1227 ACTION_NAMES.assemble,
1228 ACTION_NAMES.preprocess_assemble,
1229 ACTION_NAMES.linkstamp_compile,
1230 ACTION_NAMES.c_compile,
1231 ACTION_NAMES.cpp_compile,
1232 ACTION_NAMES.cpp_header_parsing,
1233 ACTION_NAMES.cpp_module_compile,
1234 ACTION_NAMES.cpp_module_codegen,
1235 ACTION_NAMES.lto_backend,
1236 ACTION_NAMES.clif_match,
1237 ],
1238 flag_groups = [
1239 flag_group(
1240 flags = [
1241 "-no-canonical-prefixes",
1242 "-Wno-builtin-macro-redefined",
1243 "-D__DATE__=\"redacted\"",
1244 "-D__TIMESTAMP__=\"redacted\"",
1245 "-D__TIME__=\"redacted\"",
1246 "-Wno-varargs",
1247 "-Wno-null-pointer-arithmetic",
1248 "-Wno-mismatched-new-delete",
1249 ],
1250 ),
1251 ],
1252 ),
1253 ],
1254 )
1255 elif (ctx.attr.cpu == "cortex-m4f"
1256 or ctx.attr.cpu == "cortex-m4f-k22"
1257 or ctx.attr.cpu == "roborio"):
1258 unfiltered_compile_flags_feature = feature(
1259 name = "unfiltered_compile_flags",
1260 enabled = True,
1261 flag_sets = [
1262 flag_set(
1263 actions = [
1264 ACTION_NAMES.assemble,
1265 ACTION_NAMES.preprocess_assemble,
1266 ACTION_NAMES.linkstamp_compile,
1267 ACTION_NAMES.c_compile,
1268 ACTION_NAMES.cpp_compile,
1269 ACTION_NAMES.cpp_header_parsing,
1270 ACTION_NAMES.cpp_module_compile,
1271 ACTION_NAMES.cpp_module_codegen,
1272 ACTION_NAMES.lto_backend,
1273 ACTION_NAMES.clif_match,
1274 ],
1275 flag_groups = [
1276 flag_group(
1277 flags = [
1278 "-no-canonical-prefixes",
1279 "-Wno-builtin-macro-redefined",
1280 "-D__DATE__=\"redacted\"",
1281 "-D__TIMESTAMP__=\"redacted\"",
1282 "-D__TIME__=\"redacted\"",
1283 ],
1284 ),
1285 ],
1286 ),
1287 ],
1288 )
1289 elif (ctx.attr.cpu == "armhf-debian"):
1290 unfiltered_compile_flags_feature = feature(
1291 name = "unfiltered_compile_flags",
1292 enabled = True,
1293 flag_sets = [
1294 flag_set(
1295 actions = [
1296 ACTION_NAMES.assemble,
1297 ACTION_NAMES.preprocess_assemble,
1298 ACTION_NAMES.linkstamp_compile,
1299 ACTION_NAMES.c_compile,
1300 ACTION_NAMES.cpp_compile,
1301 ACTION_NAMES.cpp_header_parsing,
1302 ACTION_NAMES.cpp_module_compile,
1303 ACTION_NAMES.cpp_module_codegen,
1304 ACTION_NAMES.lto_backend,
1305 ACTION_NAMES.clif_match,
1306 ],
1307 flag_groups = [
1308 flag_group(
1309 flags = [
1310 "-no-canonical-prefixes",
1311 "-Wno-builtin-macro-redefined",
1312 "-Wno-mismatched-new-delete",
1313 "-Wno-null-pointer-arithmetic",
1314 "-Wno-varargs",
1315 "-D__DATE__=\"redacted\"",
1316 "-D__TIMESTAMP__=\"redacted\"",
1317 "-D__TIME__=\"redacted\"",
1318 ],
1319 ),
1320 ],
1321 ),
1322 ],
1323 )
1324 else:
1325 unfiltered_compile_flags_feature = None
1326
1327 dependency_file_feature = feature(
1328 name = "dependency_file",
1329 enabled = True,
1330 flag_sets = [
1331 flag_set(
1332 actions = [
1333 ACTION_NAMES.assemble,
1334 ACTION_NAMES.preprocess_assemble,
1335 ACTION_NAMES.c_compile,
1336 ACTION_NAMES.cpp_compile,
1337 ACTION_NAMES.cpp_module_compile,
1338 ACTION_NAMES.objc_compile,
1339 ACTION_NAMES.objcpp_compile,
1340 ACTION_NAMES.cpp_header_parsing,
1341 ACTION_NAMES.clif_match,
1342 ],
1343 flag_groups = [
1344 flag_group(
1345 flags = ["-MD", "-MF", "%{dependency_file}"],
1346 expand_if_available = "dependency_file",
1347 ),
1348 ],
1349 ),
1350 ],
1351 )
1352
1353 objcopy_embed_flags_feature = feature(
1354 name = "objcopy_embed_flags",
1355 enabled = True,
1356 flag_sets = [
1357 flag_set(
1358 actions = ["objcopy_embed_data"],
1359 flag_groups = [flag_group(flags = ["-I", "binary"])],
1360 ),
1361 ],
1362 )
1363
1364 user_compile_flags_feature = feature(
1365 name = "user_compile_flags",
1366 enabled = True,
1367 flag_sets = [
1368 flag_set(
1369 actions = [
1370 ACTION_NAMES.assemble,
1371 ACTION_NAMES.preprocess_assemble,
1372 ACTION_NAMES.linkstamp_compile,
1373 ACTION_NAMES.c_compile,
1374 ACTION_NAMES.cpp_compile,
1375 ACTION_NAMES.cpp_header_parsing,
1376 ACTION_NAMES.cpp_module_compile,
1377 ACTION_NAMES.cpp_module_codegen,
1378 ACTION_NAMES.lto_backend,
1379 ACTION_NAMES.clif_match,
1380 ],
1381 flag_groups = [
1382 flag_group(
1383 flags = ["%{user_compile_flags}"],
1384 iterate_over = "user_compile_flags",
1385 expand_if_available = "user_compile_flags",
1386 ),
1387 ],
1388 ),
1389 ],
1390 )
1391
1392 sysroot_feature = feature(
1393 name = "sysroot",
1394 enabled = True,
1395 flag_sets = [
1396 flag_set(
1397 actions = [
1398 ACTION_NAMES.preprocess_assemble,
1399 ACTION_NAMES.linkstamp_compile,
1400 ACTION_NAMES.c_compile,
1401 ACTION_NAMES.cpp_compile,
1402 ACTION_NAMES.cpp_header_parsing,
1403 ACTION_NAMES.cpp_module_compile,
1404 ACTION_NAMES.cpp_module_codegen,
1405 ACTION_NAMES.lto_backend,
1406 ACTION_NAMES.clif_match,
1407 ACTION_NAMES.cpp_link_executable,
1408 ACTION_NAMES.cpp_link_dynamic_library,
1409 ACTION_NAMES.cpp_link_nodeps_dynamic_library,
1410 ],
1411 flag_groups = [
1412 flag_group(
1413 flags = ["--sysroot=%{sysroot}"],
1414 expand_if_available = "sysroot",
1415 ),
1416 ],
1417 ),
1418 ],
1419 )
1420
1421 compile_flags1_feature = feature(
1422 name = "compile_flags1",
1423 enabled = True,
1424 flag_sets = [
1425 flag_set(
1426 actions = [
1427 ACTION_NAMES.assemble,
1428 ACTION_NAMES.preprocess_assemble,
1429 ACTION_NAMES.c_compile,
1430 ACTION_NAMES.cpp_compile,
1431 ACTION_NAMES.cpp_header_parsing,
1432 ACTION_NAMES.cpp_module_compile,
1433 ACTION_NAMES.cpp_module_codegen,
1434 ACTION_NAMES.lto_backend,
1435 ACTION_NAMES.clif_match,
1436 ],
1437 flag_groups = [
1438 flag_group(
1439 flags = [
1440 "--sysroot=external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi",
1441 "-nostdinc",
1442 "-isystem",
1443 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include",
1444 "-isystem",
1445 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed",
1446 ],
1447 ),
1448 ],
1449 ),
1450 flag_set(
1451 actions = [
1452 ACTION_NAMES.assemble,
1453 ACTION_NAMES.preprocess_assemble,
1454 ACTION_NAMES.cpp_compile,
1455 ACTION_NAMES.cpp_header_parsing,
1456 "c++-header-preprocessing",
1457 ],
1458 flag_groups = [flag_group(flags = ["-fno-canonical-system-headers"])],
1459 ),
1460 flag_set(
1461 actions = [
1462 ACTION_NAMES.cpp_compile,
1463 ACTION_NAMES.cpp_header_parsing,
1464 ACTION_NAMES.cpp_module_compile,
1465 ACTION_NAMES.cpp_module_codegen,
1466 ],
1467 flag_groups = [
1468 flag_group(
1469 flags = [
1470 "-isystem",
1471 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0",
1472 "-isystem",
1473 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi",
1474 "-isystem",
1475 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward",
1476 ],
1477 ),
1478 ],
1479 ),
1480 flag_set(
1481 actions = [
1482 ACTION_NAMES.assemble,
1483 ACTION_NAMES.preprocess_assemble,
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 = [
1495 "-isystem",
1496 "external/arm_frc_linux_gnueabi_repo/arm-frc2020-linux-gnueabi/usr/include",
1497 "-mfpu=neon",
1498 "-D__STDC_FORMAT_MACROS",
1499 "-D__STDC_CONSTANT_MACROS",
1500 "-D__STDC_LIMIT_MACROS",
1501 "-D_FILE_OFFSET_BITS=64",
1502 "-DAOS_ARCHITECTURE_arm_frc",
1503 "-U_FORTIFY_SOURCE",
1504 "-fstack-protector",
1505 "-fPIE",
1506 "-fdiagnostics-color=always",
1507 "-Wall",
1508 "-Wextra",
1509 "-Wpointer-arith",
1510 "-Wstrict-aliasing",
1511 "-Wcast-qual",
1512 "-Wwrite-strings",
1513 "-Wtype-limits",
1514 "-Wsign-compare",
1515 "-Wformat=2",
1516 "-Werror",
1517 "-Wunused-local-typedefs",
1518 "-Wno-psabi",
1519 "-fno-omit-frame-pointer",
1520 "-D__has_feature(x)=0",
1521 "-pipe",
1522 "-ggdb3",
1523 ],
1524 ),
1525 ],
1526 ),
1527 ],
1528 )
1529
1530 if (ctx.attr.cpu == "cortex-m4f"
1531 or ctx.attr.cpu == "cortex-m4f-k22"):
1532 features = [
1533 default_compile_flags_feature,
1534 default_link_flags_feature,
1535 dbg_feature,
1536 opt_feature,
1537 fastbuild_feature,
1538 all_modes_feature,
1539 include_paths_feature,
1540 objcopy_embed_flags_feature,
1541 user_compile_flags_feature,
1542 sysroot_feature,
1543 unfiltered_compile_flags_feature,
1544 ]
1545 elif (ctx.attr.cpu == "armhf-debian"
1546 or ctx.attr.cpu == "k8"):
1547 features = [
1548 default_compile_flags_feature,
1549 default_link_flags_feature,
1550 opt_feature,
1551 dbg_feature,
1552 fastbuild_feature,
1553 all_modes_feature,
1554 pie_for_linking_feature,
1555 supports_dynamic_linker_feature,
1556 supports_pic_feature,
1557 objcopy_embed_flags_feature,
1558 user_compile_flags_feature,
1559 sysroot_feature,
1560 unfiltered_compile_flags_feature,
1561 ]
1562 elif (ctx.attr.cpu == "roborio"):
1563 features = [
1564 default_link_flags_feature,
1565 compile_flags1_feature,
1566 opt_feature,
1567 dependency_file_feature,
1568 random_seed_feature,
1569 pic_feature,
1570 include_paths_feature,
1571 opt_post_feature,
1572 dbg_feature,
1573 fastbuild_feature,
1574 all_modes_feature,
1575 pie_for_linking_feature,
1576 supports_dynamic_linker_feature,
1577 supports_pic_feature,
1578 objcopy_embed_flags_feature,
1579 user_compile_flags_feature,
1580 sysroot_feature,
1581 unfiltered_compile_flags_feature,
1582 ]
1583 elif (ctx.attr.cpu == "armeabi-v7a"):
1584 features = [supports_pic_feature]
1585 else:
1586 fail("Unreachable")
1587
1588 if (ctx.attr.cpu == "armeabi-v7a"):
1589 cxx_builtin_include_directories = []
1590 elif (ctx.attr.cpu == "roborio"):
1591 cxx_builtin_include_directories = [
1592 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include)%",
1593 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/lib/gcc/arm-frc2020-linux-gnueabi/7.3.0/include-fixed)%",
1594 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/arm-frc2020-linux-gnueabi)%",
1595 "%package(@arm_frc_linux_gnueabi_repo//arm-frc2020-linux-gnueabi/usr/include/c++/7.3.0/backward)%",
1596 ]
1597 elif (ctx.attr.cpu == "k8"):
1598 cxx_builtin_include_directories = [
1599 "%package(@clang_6p0_repo//usr)%/lib/llvm-6.0/lib/clang/6.0.0/include",
1600 "%package(@amd64_debian_sysroot//usr)%/include",
1601 "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include",
1602 "%package(@amd64_debian_sysroot//usr)%/lib/gcc/x86_64-linux-gnu/7/include-fixed",
1603 ]
1604 elif (ctx.attr.cpu == "armhf-debian"):
1605 cxx_builtin_include_directories = [
1606 "%package(@linaro_linux_gcc_repo//include)%",
1607 "%package(@armhf_debian_rootfs//usr/include)%",
1608 "%package(@linaro_linux_gcc_repo//include)%/c++/7.4.1",
1609 "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include)%",
1610 "%package(@linaro_linux_gcc_repo//lib/gcc/arm-linux-gnueabihf/7.4.1/include-fixed)%",
1611 "%package(@linaro_linux_gcc_repo//arm-linux-gnueabihf/include)%/c++/7.4.1",
1612 ]
1613 elif (ctx.attr.cpu == "cortex-m4f"
1614 or ctx.attr.cpu == "cortex-m4f-k22"):
1615 cxx_builtin_include_directories = [
1616 "/usr/lib/gcc/arm-none-eabi/4.8/include",
1617 "/usr/lib/gcc/arm-none-eabi/4.8/include-fixed",
1618 "/usr/lib/arm-none-eabi/include",
1619 "/usr/include/newlib",
1620 ]
1621 else:
1622 fail("Unreachable")
1623
1624 artifact_name_patterns = []
1625
1626 make_variables = []
1627
1628 if (ctx.attr.cpu == "roborio"):
1629 tool_paths = [
1630 tool_path(
1631 name = "ar",
1632 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ar",
1633 ),
1634 tool_path(
1635 name = "as",
1636 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-as",
1637 ),
1638 tool_path(
1639 name = "compat-ld",
1640 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
1641 ),
1642 tool_path(
1643 name = "cpp",
1644 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-cpp",
1645 ),
1646 tool_path(name = "dwp", path = "/bin/false"),
1647 tool_path(
1648 name = "gcc",
1649 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcc",
1650 ),
1651 tool_path(
1652 name = "gcov",
1653 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
1654 ),
1655 tool_path(
1656 name = "ld",
1657 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-ld",
1658 ),
1659 tool_path(
1660 name = "nm",
1661 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-nm",
1662 ),
1663 tool_path(
1664 name = "objcopy",
1665 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objcopy",
1666 ),
1667 tool_path(
1668 name = "objdump",
1669 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-objdump",
1670 ),
1671 tool_path(
1672 name = "strip",
1673 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-strip",
1674 ),
1675 ]
1676 elif (ctx.attr.cpu == "k8"):
1677 tool_paths = [
1678 tool_path(
1679 name = "ar",
1680 path = "clang_6p0/x86_64-linux-gnu-ar",
1681 ),
1682 tool_path(
1683 name = "compat-ld",
1684 path = "clang_6p0/x86_64-linux-gnu-ld",
1685 ),
1686 tool_path(
1687 name = "cpp",
1688 path = "clang_6p0/x86_64-linux-gnu-cpp",
1689 ),
1690 tool_path(
1691 name = "dwp",
1692 path = "clang_6p0/x86_64-linux-gnu-dwp",
1693 ),
1694 tool_path(
1695 name = "gcc",
1696 path = "clang_6p0/x86_64-linux-gnu-clang-6.0",
1697 ),
1698 tool_path(
1699 name = "gcov",
1700 path = "clang_6p0/x86_64-linux-gnu-gcov",
1701 ),
1702 tool_path(
1703 name = "ld",
1704 path = "clang_6p0/x86_64-linux-gnu-ld",
1705 ),
1706 tool_path(
1707 name = "nm",
1708 path = "clang_6p0/x86_64-linux-gnu-nm",
1709 ),
1710 tool_path(
1711 name = "objcopy",
1712 path = "clang_6p0/x86_64-linux-gnu-objcopy",
1713 ),
1714 tool_path(
1715 name = "objdump",
1716 path = "clang_6p0/x86_64-linux-gnu-objdump",
1717 ),
1718 tool_path(
1719 name = "strip",
1720 path = "clang_6p0/x86_64-linux-gnu-strip",
1721 ),
1722 ]
1723 elif (ctx.attr.cpu == "cortex-m4f"
1724 or ctx.attr.cpu == "cortex-m4f-k22"):
1725 tool_paths = [
1726 tool_path(
1727 name = "ar",
1728 path = "gcc_arm_none_eabi/arm-none-eabi-ar",
1729 ),
1730 tool_path(
1731 name = "compat-ld",
1732 path = "gcc_arm_none_eabi/arm-none-eabi-ld",
1733 ),
1734 tool_path(
1735 name = "cpp",
1736 path = "gcc_arm_none_eabi/arm-none-eabi-cpp",
1737 ),
1738 tool_path(
1739 name = "dwp",
1740 path = "gcc_arm_none_eabi/arm-none-eabi-dwp",
1741 ),
1742 tool_path(
1743 name = "gcc",
1744 path = "gcc_arm_none_eabi/arm-none-eabi-gcc",
1745 ),
1746 tool_path(
1747 name = "gcov",
1748 path = "gcc_arm_none_eabi/arm-none-eabi-gcov",
1749 ),
1750 tool_path(
1751 name = "ld",
1752 path = "gcc_arm_none_eabi/arm-none-eabi-ld",
1753 ),
1754 tool_path(
1755 name = "nm",
1756 path = "gcc_arm_none_eabi/arm-none-eabi-nm",
1757 ),
1758 tool_path(
1759 name = "objcopy",
1760 path = "gcc_arm_none_eabi/arm-none-eabi-objcopy",
1761 ),
1762 tool_path(
1763 name = "objdump",
1764 path = "gcc_arm_none_eabi/arm-none-eabi-objdump",
1765 ),
1766 tool_path(
1767 name = "strip",
1768 path = "gcc_arm_none_eabi/arm-none-eabi-strip",
1769 ),
1770 ]
1771 elif (ctx.attr.cpu == "armhf-debian"):
1772 tool_paths = [
1773 tool_path(
1774 name = "ar",
1775 path = "linaro_linux_gcc/arm-linux-gnueabihf-ar",
1776 ),
1777 tool_path(
1778 name = "compat-ld",
1779 path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
1780 ),
1781 tool_path(
1782 name = "cpp",
1783 path = "linaro_linux_gcc/clang_bin/clang",
1784 ),
1785 tool_path(
1786 name = "dwp",
1787 path = "linaro_linux_gcc/arm-linux-gnueabihf-dwp",
1788 ),
1789 tool_path(
1790 name = "gcc",
1791 path = "linaro_linux_gcc/clang_bin/clang",
1792 ),
1793 tool_path(
1794 name = "gcov",
1795 path = "arm-frc-linux-gnueabi/arm-frc-linux-gnueabi-gcov-4.9",
1796 ),
1797 tool_path(
1798 name = "ld",
1799 path = "linaro_linux_gcc/arm-linux-gnueabihf-ld",
1800 ),
1801 tool_path(
1802 name = "nm",
1803 path = "linaro_linux_gcc/arm-linux-gnueabihf-nm",
1804 ),
1805 tool_path(
1806 name = "objcopy",
1807 path = "linaro_linux_gcc/arm-linux-gnueabihf-objcopy",
1808 ),
1809 tool_path(
1810 name = "objdump",
1811 path = "linaro_linux_gcc/arm-linux-gnueabihf-objdump",
1812 ),
1813 tool_path(
1814 name = "strip",
1815 path = "linaro_linux_gcc/arm-linux-gnueabihf-strip",
1816 ),
1817 ]
1818 elif (ctx.attr.cpu == "armeabi-v7a"):
1819 tool_paths = [
1820 tool_path(name = "ar", path = "/bin/false"),
1821 tool_path(name = "compat-ld", path = "/bin/false"),
1822 tool_path(name = "cpp", path = "/bin/false"),
1823 tool_path(name = "dwp", path = "/bin/false"),
1824 tool_path(name = "gcc", path = "/bin/false"),
1825 tool_path(name = "gcov", path = "/bin/false"),
1826 tool_path(name = "ld", path = "/bin/false"),
1827 tool_path(name = "nm", path = "/bin/false"),
1828 tool_path(name = "objcopy", path = "/bin/false"),
1829 tool_path(name = "objdump", path = "/bin/false"),
1830 tool_path(name = "strip", path = "/bin/false"),
1831 ]
1832 else:
1833 fail("Unreachable")
1834
1835
1836 out = ctx.actions.declare_file(ctx.label.name)
1837 ctx.actions.write(out, "Fake executable")
1838 return [
1839 cc_common.create_cc_toolchain_config_info(
1840 ctx = ctx,
1841 features = features,
1842 action_configs = action_configs,
1843 artifact_name_patterns = artifact_name_patterns,
1844 cxx_builtin_include_directories = cxx_builtin_include_directories,
1845 toolchain_identifier = toolchain_identifier,
1846 host_system_name = host_system_name,
1847 target_system_name = target_system_name,
1848 target_cpu = target_cpu,
1849 target_libc = target_libc,
1850 compiler = compiler,
1851 abi_version = abi_version,
1852 abi_libc_version = abi_libc_version,
1853 tool_paths = tool_paths,
1854 make_variables = make_variables,
1855 builtin_sysroot = builtin_sysroot,
1856 cc_target_os = cc_target_os
1857 ),
1858 DefaultInfo(
1859 executable = out,
1860 ),
1861 ]
1862cc_toolchain_config = rule(
1863 implementation = _impl,
1864 attrs = {
1865 "cpu": attr.string(mandatory=True, values=["armeabi-v7a", "armhf-debian", "cortex-m4f", "cortex-m4f-k22", "k8", "roborio"]),
1866 },
1867 provides = [CcToolchainConfigInfo],
1868 executable = True,
1869)