21
21
load (
22
22
"//toolchain/internal:common.bzl" ,
23
23
_arch = "arch" ,
24
+ _arch_from_rctx = "arch_from_rctx" ,
24
25
_canonical_dir_path = "canonical_dir_path" ,
25
26
_check_os_arch_keys = "check_os_arch_keys" ,
26
27
_exec_os_arch_dict_value = "exec_os_arch_dict_value" ,
30
31
_os = "os" ,
31
32
_os_arch_pair = "os_arch_pair" ,
32
33
_os_bzl = "os_bzl" ,
34
+ _os_from_rctx = "os_from_rctx" ,
33
35
_pkg_path_from_label = "pkg_path_from_label" ,
34
36
_supported_targets = "SUPPORTED_TARGETS" ,
35
37
_toolchain_tools = "toolchain_tools" ,
@@ -518,6 +520,16 @@ cc_toolchain(
518
520
)
519
521
"""
520
522
523
+ # Filter out non-existing directories with absolute paths as they
524
+ # result in a -Wincomplete-umbrella warning when mentioned in the
525
+ # system module map. Note that this filtering is skipped for remote
526
+ # execution because it is not possible to check directory existence.
527
+ filtered_cxx_builtin_include_directories = cxx_builtin_include_directories if _is_remote (rctx , exec_os , exec_arch ) else [
528
+ dir
529
+ for dir in cxx_builtin_include_directories
530
+ if _is_hermetic_or_exists (rctx , dir , sysroot_path )
531
+ ]
532
+
521
533
return template .format (
522
534
suffix = suffix ,
523
535
target_os = target_os ,
@@ -548,14 +560,7 @@ cc_toolchain(
548
560
coverage_link_flags = _list_to_string (_dict_value (toolchain_info .coverage_link_flags_dict , target_pair )),
549
561
unfiltered_compile_flags = _list_to_string (_dict_value (toolchain_info .unfiltered_compile_flags_dict , target_pair )),
550
562
extra_files_str = extra_files_str ,
551
- cxx_builtin_include_directories = _list_to_string ([
552
- # Filter out non-existing directories with absolute paths as they
553
- # result in a -Wincomplete-umbrella warning when mentioned in the
554
- # system module map.
555
- dir
556
- for dir in cxx_builtin_include_directories
557
- if _is_hermetic_or_exists (rctx , dir , sysroot_path )
558
- ]),
563
+ cxx_builtin_include_directories = _list_to_string (filtered_cxx_builtin_include_directories ),
559
564
extra_compiler_files = ("\" %s\" ," % str (toolchain_info .extra_compiler_files )) if toolchain_info .extra_compiler_files else "" ,
560
565
major_llvm_version = major_llvm_version ,
561
566
extra_exec_compatible_with_specific = toolchain_info .extra_exec_compatible_with .get (target_pair , []),
@@ -564,6 +569,9 @@ cc_toolchain(
564
569
extra_target_compatible_with_all_targets = toolchain_info .extra_target_compatible_with .get ("" , []),
565
570
)
566
571
572
+ def _is_remote (rctx , exec_os , exec_arch ):
573
+ return not (_os_from_rctx (rctx ) == exec_os and _arch_from_rctx (rctx ) == exec_arch )
574
+
567
575
def _convenience_targets_str (rctx , use_absolute_paths , llvm_dist_rel_path , llvm_dist_label_prefix , exec_dl_ext ):
568
576
if use_absolute_paths :
569
577
llvm_dist_label_prefix = ":"
0 commit comments