@@ -129,6 +129,12 @@ def _platform_copts(rule_copts, rule_gcc_copts, rule_clang_copts, cc_test = 0):
129
129
"//conditions:default" : [],
130
130
})
131
131
132
+ # The BASE_LINKOPTS are used for all drake_cc_{binary,library,test} rules.
133
+ BASE_LINKOPTS = select ({
134
+ "@drake//tools/skylark:linux_debug" : ["-fuse-ld=mold" ],
135
+ "//conditions:default" : [],
136
+ })
137
+
132
138
def _check_library_deps_blacklist (name , deps ):
133
139
"""Report an error if a library should not use something from deps."""
134
140
if not deps :
@@ -596,6 +602,7 @@ def drake_cc_library(
596
602
copts = [],
597
603
clang_copts = [],
598
604
gcc_copts = [],
605
+ linkopts = [],
599
606
linkstatic = 1 ,
600
607
internal = False ,
601
608
compile_once_per_scalar = False ,
@@ -649,6 +656,7 @@ def drake_cc_library(
649
656
should be surrounded with `#if DRAKE_ONCE_PER_SCALAR_PHASE == 0`.
650
657
"""
651
658
new_copts = _platform_copts (copts , gcc_copts , clang_copts )
659
+ new_linkopts = BASE_LINKOPTS + linkopts
652
660
new_tags = kwargs .pop ("tags" , None ) or []
653
661
if internal :
654
662
if install_hdrs_exclude != []:
@@ -690,6 +698,7 @@ def drake_cc_library(
690
698
deps = deps + add_deps ,
691
699
implementation_deps = implementation_deps ,
692
700
copts = new_copts ,
701
+ linkopts = new_linkopts ,
693
702
linkstatic = linkstatic ,
694
703
declare_installed_headers = declare_installed_headers ,
695
704
install_hdrs_exclude = install_hdrs_exclude ,
@@ -783,6 +792,7 @@ def drake_cc_binary(
783
792
defaults using test_rule_args=["-f", "--bar=42"] or test_rule_size="baz".
784
793
"""
785
794
new_copts = _platform_copts (copts , gcc_copts , clang_copts )
795
+ new_linkopts = BASE_LINKOPTS + linkopts
786
796
new_srcs , add_deps = _maybe_add_pruned_private_hdrs_dep (
787
797
base_name = name ,
788
798
srcs = srcs ,
@@ -801,7 +811,7 @@ def drake_cc_binary(
801
811
testonly = testonly ,
802
812
linkshared = linkshared ,
803
813
linkstatic = linkstatic ,
804
- linkopts = linkopts ,
814
+ linkopts = new_linkopts ,
805
815
features = [
806
816
# We should deduplicate symbols while linking (for a ~6% reduction
807
817
# in disk use), to conserve space in CI; see #18545 for details.
@@ -839,6 +849,7 @@ def drake_cc_test(
839
849
copts = [],
840
850
gcc_copts = [],
841
851
clang_copts = [],
852
+ linkopts = [],
842
853
allow_network = None ,
843
854
display = False ,
844
855
num_threads = None ,
@@ -868,6 +879,7 @@ def drake_cc_test(
868
879
kwargs = incorporate_display (kwargs , display = display )
869
880
kwargs = incorporate_num_threads (kwargs , num_threads = num_threads )
870
881
new_copts = _platform_copts (copts , gcc_copts , clang_copts , cc_test = 1 )
882
+ new_linkopts = BASE_LINKOPTS + linkopts
871
883
new_srcs , add_deps = _maybe_add_pruned_private_hdrs_dep (
872
884
base_name = name ,
873
885
srcs = srcs ,
@@ -882,6 +894,7 @@ def drake_cc_test(
882
894
args = args ,
883
895
deps = deps + add_deps ,
884
896
copts = new_copts ,
897
+ linkopts = new_linkopts ,
885
898
features = [
886
899
# We should deduplicate symbols while linking (for a ~6% reduction
887
900
# in disk use), to conserve space in CI; see #18545 for details.
0 commit comments