Skip to content

Commit d3a26fb

Browse files
committed
[tools] Use mold linker on Linux debug builds
1 parent 3704a57 commit d3a26fb

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

setup/ubuntu/source_distribution/packages-jammy-test-only.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
curl
22
kcov
33
libstdc++6-10-dbg
4+
mold
45
python3-dateutil
56
python3-dbg
67
python3-flask

setup/ubuntu/source_distribution/packages-noble-test-only.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
curl
22
libstdc++6-10-dbg
3+
mold
34
python3-dateutil
45
python3-dbg
56
python3-flask

tools/skylark/drake_cc.bzl

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,20 @@ BASE_COPTS = select({
110110
("//conditions:default", []),
111111
]))
112112

113+
# The _base_linkopts() are used for all drake_cc_{binary,library,test} rules.
114+
def _base_linkopts():
115+
is_debug = select({
116+
"//tools/cc_toolchain:debug": True,
117+
"//conditions:default": False,
118+
})
119+
is_linux = select({
120+
"@drake//tools/skylark:linux": True,
121+
"//conditions:default": False,
122+
})
123+
if is_linux and is_debug:
124+
return ["-fuse-ld=mold"]
125+
return []
126+
113127
def _platform_copts(rule_copts, rule_gcc_copts, rule_clang_copts, cc_test = 0):
114128
"""Returns the concatenation of Drake's platform-specific BASE_COPTS,
115129
plus the passed-in rule_copts, plus the passed-in rule_{cc}_copts iff
@@ -596,6 +610,7 @@ def drake_cc_library(
596610
copts = [],
597611
clang_copts = [],
598612
gcc_copts = [],
613+
linkopts = [],
599614
linkstatic = 1,
600615
internal = False,
601616
compile_once_per_scalar = False,
@@ -649,6 +664,7 @@ def drake_cc_library(
649664
should be surrounded with `#if DRAKE_ONCE_PER_SCALAR_PHASE == 0`.
650665
"""
651666
new_copts = _platform_copts(copts, gcc_copts, clang_copts)
667+
new_linkopts = _base_linkopts() + linkopts
652668
new_tags = kwargs.pop("tags", None) or []
653669
if internal:
654670
if install_hdrs_exclude != []:
@@ -690,6 +706,7 @@ def drake_cc_library(
690706
deps = deps + add_deps,
691707
implementation_deps = implementation_deps,
692708
copts = new_copts,
709+
linkopts = new_linkopts,
693710
linkstatic = linkstatic,
694711
declare_installed_headers = declare_installed_headers,
695712
install_hdrs_exclude = install_hdrs_exclude,
@@ -783,6 +800,7 @@ def drake_cc_binary(
783800
defaults using test_rule_args=["-f", "--bar=42"] or test_rule_size="baz".
784801
"""
785802
new_copts = _platform_copts(copts, gcc_copts, clang_copts)
803+
new_linkopts = _base_linkopts() + linkopts
786804
new_srcs, add_deps = _maybe_add_pruned_private_hdrs_dep(
787805
base_name = name,
788806
srcs = srcs,
@@ -801,7 +819,7 @@ def drake_cc_binary(
801819
testonly = testonly,
802820
linkshared = linkshared,
803821
linkstatic = linkstatic,
804-
linkopts = linkopts,
822+
linkopts = new_linkopts,
805823
features = [
806824
# We should deduplicate symbols while linking (for a ~6% reduction
807825
# in disk use), to conserve space in CI; see #18545 for details.
@@ -839,6 +857,7 @@ def drake_cc_test(
839857
copts = [],
840858
gcc_copts = [],
841859
clang_copts = [],
860+
linkopts = [],
842861
allow_network = None,
843862
display = False,
844863
num_threads = None,
@@ -868,6 +887,7 @@ def drake_cc_test(
868887
kwargs = incorporate_display(kwargs, display = display)
869888
kwargs = incorporate_num_threads(kwargs, num_threads = num_threads)
870889
new_copts = _platform_copts(copts, gcc_copts, clang_copts, cc_test = 1)
890+
new_linkopts = _base_linkopts() + linkopts
871891
new_srcs, add_deps = _maybe_add_pruned_private_hdrs_dep(
872892
base_name = name,
873893
srcs = srcs,
@@ -882,6 +902,7 @@ def drake_cc_test(
882902
args = args,
883903
deps = deps + add_deps,
884904
copts = new_copts,
905+
linkopts = new_linkopts,
885906
features = [
886907
# We should deduplicate symbols while linking (for a ~6% reduction
887908
# in disk use), to conserve space in CI; see #18545 for details.

0 commit comments

Comments
 (0)