@@ -129,6 +129,16 @@ 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/cc_toolchain:use_mold_linker" : [
135
+ "-fuse-ld=mold" ,
136
+ "-Wl,--compress-debug-sections=zlib" ,
137
+ "-Wl,--thread-count=2" ,
138
+ ],
139
+ "//conditions:default" : [],
140
+ })
141
+
132
142
def _check_library_deps_blacklist (name , deps ):
133
143
"""Report an error if a library should not use something from deps."""
134
144
if not deps :
@@ -596,6 +606,7 @@ def drake_cc_library(
596
606
copts = [],
597
607
clang_copts = [],
598
608
gcc_copts = [],
609
+ linkopts = [],
599
610
linkstatic = 1 ,
600
611
internal = False ,
601
612
compile_once_per_scalar = False ,
@@ -649,6 +660,7 @@ def drake_cc_library(
649
660
should be surrounded with `#if DRAKE_ONCE_PER_SCALAR_PHASE == 0`.
650
661
"""
651
662
new_copts = _platform_copts (copts , gcc_copts , clang_copts )
663
+ new_linkopts = BASE_LINKOPTS + linkopts
652
664
new_tags = kwargs .pop ("tags" , None ) or []
653
665
if internal :
654
666
if install_hdrs_exclude != []:
@@ -690,6 +702,7 @@ def drake_cc_library(
690
702
deps = deps + add_deps ,
691
703
implementation_deps = implementation_deps ,
692
704
copts = new_copts ,
705
+ linkopts = new_linkopts ,
693
706
linkstatic = linkstatic ,
694
707
declare_installed_headers = declare_installed_headers ,
695
708
install_hdrs_exclude = install_hdrs_exclude ,
@@ -783,11 +796,13 @@ def drake_cc_binary(
783
796
defaults using test_rule_args=["-f", "--bar=42"] or test_rule_size="baz".
784
797
"""
785
798
new_copts = _platform_copts (copts , gcc_copts , clang_copts )
799
+ new_linkopts = BASE_LINKOPTS + linkopts
786
800
new_srcs , add_deps = _maybe_add_pruned_private_hdrs_dep (
787
801
base_name = name ,
788
802
srcs = srcs ,
789
803
deps = deps ,
790
804
copts = new_copts ,
805
+ linkopts = new_linkopts ,
791
806
testonly = testonly ,
792
807
** kwargs
793
808
)
@@ -801,7 +816,7 @@ def drake_cc_binary(
801
816
testonly = testonly ,
802
817
linkshared = linkshared ,
803
818
linkstatic = linkstatic ,
804
- linkopts = linkopts ,
819
+ linkopts = new_linkopts ,
805
820
features = [
806
821
# We should deduplicate symbols while linking (for a ~6% reduction
807
822
# in disk use), to conserve space in CI; see #18545 for details.
@@ -820,6 +835,7 @@ def drake_cc_binary(
820
835
data = data + test_rule_data ,
821
836
deps = deps + add_deps ,
822
837
copts = copts ,
838
+ linkopts = new_linkopts ,
823
839
gcc_copts = gcc_copts ,
824
840
size = test_rule_size ,
825
841
timeout = test_rule_timeout ,
@@ -839,6 +855,7 @@ def drake_cc_test(
839
855
copts = [],
840
856
gcc_copts = [],
841
857
clang_copts = [],
858
+ linkopts = [],
842
859
allow_network = None ,
843
860
display = False ,
844
861
num_threads = None ,
@@ -868,11 +885,13 @@ def drake_cc_test(
868
885
kwargs = incorporate_display (kwargs , display = display )
869
886
kwargs = incorporate_num_threads (kwargs , num_threads = num_threads )
870
887
new_copts = _platform_copts (copts , gcc_copts , clang_copts , cc_test = 1 )
888
+ new_linkopts = BASE_LINKOPTS + linkopts
871
889
new_srcs , add_deps = _maybe_add_pruned_private_hdrs_dep (
872
890
base_name = name ,
873
891
srcs = srcs ,
874
892
deps = deps ,
875
893
copts = new_copts ,
894
+ linkopts = new_linkopts ,
876
895
** kwargs
877
896
)
878
897
cc_test (
@@ -882,6 +901,7 @@ def drake_cc_test(
882
901
args = args ,
883
902
deps = deps + add_deps ,
884
903
copts = new_copts ,
904
+ linkopts = new_linkopts ,
885
905
features = [
886
906
# We should deduplicate symbols while linking (for a ~6% reduction
887
907
# in disk use), to conserve space in CI; see #18545 for details.
0 commit comments