Skip to content

Commit f59fd46

Browse files
committed
Auto merge of #31846 - alexcrichton:better-disable-jemallc, r=brson
The `--disable-jemalloc` configure option has a failure mode where it will create a distribution that is not compatible with other compilers. For example the nightly for Linux will assume that it will link to jemalloc by default as an allocator for executable crates. If, however, a standard library is used which was built via `./configure --disable-jemalloc` then this will fail because the jemalloc crate wasn't built. While this seems somewhat reasonable as a niche situation, the same mechanism is used for disabling jemalloc for platforms that just don't support it. For example if the rumprun target is compiled then the sibiling Linux target *also* doesn't have jemalloc. This is currently a problem for our cross-build nightlies which build many targets. If rumprun is also built, it will disable jemalloc for all targets, which isn't desired. This commit moves the platform-specific disabling of jemalloc as hardcoded logic into the makefiles that is scoped per-platform. This way when configuring multiple targets **without the `--disable-jemalloc` option specified** all targets will get jemalloc as they should.
2 parents ee8b257 + b980f22 commit f59fd46

18 files changed

+69
-50
lines changed

Diff for: configure

+1-30
Original file line numberDiff line numberDiff line change
@@ -865,9 +865,8 @@ fi
865865
# Force bitrig to build with clang; gcc doesn't like us there
866866
if [ $CFG_OSTYPE = unknown-bitrig ]
867867
then
868-
step_msg "on Bitrig, forcing use of clang, disabling jemalloc"
868+
step_msg "on Bitrig, forcing use of clang"
869869
CFG_ENABLE_CLANG=1
870-
CFG_DISABLE_JEMALLOC=1
871870
fi
872871

873872
# default gcc version under OpenBSD maybe too old, try using egcc, which is a
@@ -887,16 +886,6 @@ then
887886
CXX="${CXX:-eg++}"
888887
fi
889888
fi
890-
891-
step_msg "on OpenBSD, disabling jemalloc"
892-
CFG_DISABLE_JEMALLOC=1
893-
fi
894-
895-
if [ $CFG_OSTYPE = pc-windows-gnu ]
896-
then
897-
# FIXME(#31030) - there's not a great reason to disable jemalloc here
898-
step_msg "on Windows, disabling jemalloc"
899-
CFG_DISABLE_JEMALLOC=1
900889
fi
901890

902891
# OS X 10.9, gcc is actually clang. This can cause some confusion in the build
@@ -1186,12 +1175,6 @@ do
11861175
;;
11871176

11881177
*-msvc)
1189-
# Currently the build system is not configured to build jemalloc
1190-
# with MSVC, so we omit this optional dependency.
1191-
step_msg "targeting MSVC, disabling jemalloc"
1192-
CFG_DISABLE_JEMALLOC=1
1193-
putvar CFG_DISABLE_JEMALLOC
1194-
11951178
# There are some MSYS python builds which will auto-translate
11961179
# windows-style paths to MSYS-style paths in Python itself.
11971180
# Unfortunately this breaks LLVM's build system as somewhere along
@@ -1300,18 +1283,6 @@ $ pacman -R cmake && pacman -S mingw-w64-x86_64-cmake
13001283
putvar CFG_MSVC_LIB_PATH_${bits}
13011284
;;
13021285

1303-
*-rumprun-netbsd)
1304-
step_msg "targeting rumprun-netbsd, disabling jemalloc"
1305-
CFG_DISABLE_JEMALLOC=1
1306-
putvar CFG_DISABLE_JEMALLOC
1307-
;;
1308-
1309-
*-emscripten)
1310-
step_msg "targeting emscripten, disabling jemalloc"
1311-
CFG_DISABLE_JEMALLOC=1
1312-
putvar CFG_DISABLE_JEMALLOC
1313-
;;
1314-
13151286
*)
13161287
;;
13171288
esac

Diff for: mk/cfg/asmjs-unknown-emscripten.mk

+1
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ CFG_LDPATH_asmjs-unknown-emscripten :=
2121
CFG_RUN_asmjs-unknown-emscripten=$(2)
2222
CFG_RUN_TARG_asmjs-unknown-emscripten=$(call CFG_RUN_asmjs-unknown-emscripten,,$(2))
2323
CFG_GNU_TRIPLE_asmjs-unknown-emscripten := asmjs-unknown-emscripten
24+
CFG_DISABLE_JEMALLOC_asmjs-unknown-emscripten := 1

Diff for: mk/cfg/i686-pc-windows-gnu.mk

+2
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,5 @@ CFG_GNU_TRIPLE_i686-pc-windows-gnu := i686-w64-mingw32
2525
CFG_THIRD_PARTY_OBJECTS_i686-pc-windows-gnu := crt2.o dllcrt2.o
2626
CFG_INSTALLED_OBJECTS_i686-pc-windows-gnu := crt2.o dllcrt2.o rsbegin.o rsend.o
2727
CFG_RUSTRT_HAS_STARTUP_OBJS_i686-pc-windows-gnu := 1
28+
# FIXME(#31030) - there's not a great reason to disable jemalloc here
29+
CFG_DISABLE_JEMALLOC_i686-pc-windows-gnu := 1

Diff for: mk/cfg/i686-pc-windows-msvc.mk

+4
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ CFG_LDPATH_i686-pc-windows-msvc :=
2222
CFG_RUN_i686-pc-windows-msvc=$(2)
2323
CFG_RUN_TARG_i686-pc-windows-msvc=$(call CFG_RUN_i686-pc-windows-msvc,,$(2))
2424
CFG_GNU_TRIPLE_i686-pc-windows-msvc := i686-pc-win32
25+
26+
# Currently the build system is not configured to build jemalloc
27+
# with MSVC, so we omit this optional dependency.
28+
CFG_DISABLE_JEMALLOC_i686-pc-windows-msvc := 1

Diff for: mk/cfg/x86_64-pc-windows-gnu.mk

+2
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,5 @@ CFG_GNU_TRIPLE_x86_64-pc-windows-gnu := x86_64-w64-mingw32
2525
CFG_THIRD_PARTY_OBJECTS_x86_64-pc-windows-gnu := crt2.o dllcrt2.o
2626
CFG_INSTALLED_OBJECTS_x86_64-pc-windows-gnu := crt2.o dllcrt2.o rsbegin.o rsend.o
2727
CFG_RUSTRT_HAS_STARTUP_OBJS_x86_64-pc-windows-gnu := 1
28+
# FIXME(#31030) - there's not a great reason to disable jemalloc here
29+
CFG_DISABLE_JEMALLOC_x86_64-pc-windows-gnu := 1

Diff for: mk/cfg/x86_64-pc-windows-msvc.mk

+4
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ CFG_LDPATH_x86_64-pc-windows-msvc :=
2222
CFG_RUN_x86_64-pc-windows-msvc=$(2)
2323
CFG_RUN_TARG_x86_64-pc-windows-msvc=$(call CFG_RUN_x86_64-pc-windows-msvc,,$(2))
2424
CFG_GNU_TRIPLE_x86_64-pc-windows-msvc := x86_64-pc-win32
25+
26+
# Currently the build system is not configured to build jemalloc
27+
# with MSVC, so we omit this optional dependency.
28+
CFG_DISABLE_JEMALLOC_x86_64-pc-windows-msvc := 1

Diff for: mk/cfg/x86_64-rumprun-netbsd.mk

+1
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ CFG_LDPATH_x86_64-rumprun-netbsd :=
2222
CFG_RUN_x86_64-rumprun-netbsd=$(2)
2323
CFG_RUN_TARG_x86_64-rumprun-netbsd=$(call CFG_RUN_x86_64-rumprun-netbsd,,$(2))
2424
CFG_GNU_TRIPLE_x86_64-rumprun-netbsd := x86_64-rumprun-netbsd
25+
CFG_DISABLE_JEMALLOC_x86_64-rumprun-netbsd := 1

Diff for: mk/cfg/x86_64-unknown-bitrig.mk

+1
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ CFG_LDPATH_x86_64-unknown-bitrig :=
2020
CFG_RUN_x86_64-unknown-bitrig=$(2)
2121
CFG_RUN_TARG_x86_64-unknown-bitrig=$(call CFG_RUN_x86_64-unknown-bitrig,,$(2))
2222
CFG_GNU_TRIPLE_x86_64-unknown-bitrig := x86_64-unknown-bitrig
23+
CFG_DISABLE_JEMALLOC_x86_64-unknown-bitrig := 1

Diff for: mk/cfg/x86_64-unknown-openbsd.mk

+1
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,4 @@ CFG_RUN_x86_64-unknown-openbsd=$(2)
2121
CFG_RUN_TARG_x86_64-unknown-openbsd=$(call CFG_RUN_x86_64-unknown-openbsd,,$(2))
2222
CFG_GNU_TRIPLE_x86_64-unknown-openbsd := x86_64-unknown-openbsd
2323
RUSTC_FLAGS_x86_64-unknown-openbsd=-C linker=$(call FIND_COMPILER,$(CC))
24+
CFG_DISABLE_JEMALLOC_x86_64-unknown-openbsd := 1

Diff for: mk/crates.mk

+26-6
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ TARGET_CRATES := libc std flate arena term \
5353
serialize getopts collections test rand \
5454
log graphviz core rbml alloc \
5555
rustc_unicode rustc_bitflags \
56-
alloc_system
56+
alloc_system alloc_jemalloc
5757
RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_driver \
5858
rustc_trans rustc_back rustc_llvm rustc_privacy rustc_lint \
5959
rustc_data_structures rustc_front rustc_platform_intrinsics \
@@ -64,6 +64,7 @@ TOOLS := compiletest rustdoc rustc rustbook error_index_generator
6464
DEPS_core :=
6565
DEPS_alloc := core libc alloc_system
6666
DEPS_alloc_system := core libc
67+
DEPS_alloc_jemalloc := core libc native:jemalloc
6768
DEPS_collections := core alloc rustc_unicode
6869
DEPS_libc := core
6970
DEPS_rand := core
@@ -135,15 +136,14 @@ ONLY_RLIB_collections := 1
135136
ONLY_RLIB_rustc_unicode := 1
136137
ONLY_RLIB_rustc_bitflags := 1
137138
ONLY_RLIB_alloc_system := 1
139+
ONLY_RLIB_alloc_jemalloc := 1
140+
141+
TARGET_SPECIFIC_alloc_jemalloc := 1
138142

139143
# Documented-by-default crates
140144
DOC_CRATES := std alloc collections core libc rustc_unicode
141145

142146
ifeq ($(CFG_DISABLE_JEMALLOC),)
143-
TARGET_CRATES += alloc_jemalloc
144-
DEPS_std += alloc_jemalloc
145-
DEPS_alloc_jemalloc := core libc native:jemalloc
146-
ONLY_RLIB_alloc_jemalloc := 1
147147
RUSTFLAGS_rustc_back := --cfg 'feature="jemalloc"'
148148
endif
149149

@@ -160,12 +160,32 @@ CRATES := $(TARGET_CRATES) $(HOST_CRATES)
160160
define RUST_CRATE
161161
CRATEFILE_$(1) := $$(SREL)src/lib$(1)/lib.rs
162162
RSINPUTS_$(1) := $$(call rwildcard,$(S)src/lib$(1)/,*.rs)
163-
RUST_DEPS_$(1) := $$(filter-out native:%,$$(DEPS_$(1)))
164163
NATIVE_DEPS_$(1) := $$(patsubst native:%,%,$$(filter native:%,$$(DEPS_$(1))))
165164
endef
166165

167166
$(foreach crate,$(CRATES),$(eval $(call RUST_CRATE,$(crate))))
168167

168+
# $(1) - crate
169+
# $(2) - target
170+
define RUST_CRATE_DEPS
171+
RUST_DEPS_$(1)_T_$(2) := $$(filter-out native:%,$$(DEPS_$(1)))
172+
endef
173+
174+
$(foreach target,$(CFG_TARGET),\
175+
$(foreach crate,$(CRATES),$(eval $(call RUST_CRATE_DEPS,$(crate),$(target)))))
176+
177+
# $(1) - target
178+
# $(2) - crate
179+
define DEFINE_TARGET_CRATES
180+
ifndef TARGET_SPECIFIC_$(2)
181+
TARGET_CRATES_$(1) += $(2)
182+
endif
183+
endef
184+
185+
$(foreach target,$(CFG_TARGET),\
186+
$(foreach crate,$(TARGET_CRATES),\
187+
$(eval $(call DEFINE_TARGET_CRATES,$(target),$(crate)))))
188+
169189
# Similar to the macro above for crates, this macro is for tools
170190
#
171191
# $(1) is the crate to generate variables for

Diff for: mk/docs.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ LIB_DOC_DEP_$(1) = \
158158
$$(CRATEFILE_$(1)) \
159159
$$(RSINPUTS_$(1)) \
160160
$$(RUSTDOC_EXE) \
161-
$$(foreach dep,$$(RUST_DEPS_$(1)), \
161+
$$(foreach dep,$$(RUST_DEPS_$(1)_T_$(CFG_BUILD)), \
162162
$$(TLIB2_T_$(CFG_BUILD)_H_$(CFG_BUILD))/stamp.$$(dep)) \
163-
$$(foreach dep,$$(filter $$(DOC_CRATES), $$(RUST_DEPS_$(1))), \
163+
$$(foreach dep,$$(filter $$(DOC_CRATES), $$(RUST_DEPS_$(1)_T_$(CFG_BUILD))), \
164164
doc/$$(dep)/)
165165
else
166166
LIB_DOC_DEP_$(1) = $$(CRATEFILE_$(1)) $$(RSINPUTS_$(1))

Diff for: mk/host.mk

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ define CP_HOST_STAGE_N_CRATE
2121
ifeq ($$(ONLY_RLIB_$(5)),)
2222
$$(HLIB$(2)_H_$(4))/stamp.$(5): \
2323
$$(TLIB$(1)_T_$(3)_H_$(4))/stamp.$(5) \
24-
$$(RUST_DEPS_$(5):%=$$(HLIB$(2)_H_$(4))/stamp.%) \
24+
$$(RUST_DEPS_$(5)_T_$(3):%=$$(HLIB$(2)_H_$(4))/stamp.%) \
2525
| $$(HLIB$(2)_H_$(4))/
2626
@$$(call E, cp: $$(@D)/lib$(5))
2727
$$(call REMOVE_ALL_OLD_GLOB_MATCHES, \

Diff for: mk/install.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ endif
108108
define INSTALL_RUNTIME_TARGET_N
109109
install-runtime-target-$(1)-host-$(2): $$(TSREQ$$(ISTAGE)_T_$(1)_H_$(2)) $$(SREQ$$(ISTAGE)_T_$(1)_H_$(2))
110110
$$(Q)$$(call ADB_SHELL,mkdir,$(CFG_RUNTIME_PUSH_DIR))
111-
$$(Q)$$(foreach crate,$$(TARGET_CRATES), \
111+
$$(Q)$$(foreach crate,$$(TARGET_CRATES_$(1)), \
112112
$$(call ADB_PUSH,$$(TL$(1)$(2))/$$(call CFG_LIB_GLOB_$(1),$$(crate)), \
113113
$$(CFG_RUNTIME_PUSH_DIR));)
114114
endef
115115

116116
define INSTALL_RUNTIME_TARGET_CLEANUP_N
117117
install-runtime-target-$(1)-cleanup:
118118
$$(Q)$$(call ADB,remount)
119-
$$(Q)$$(foreach crate,$$(TARGET_CRATES), \
119+
$$(Q)$$(foreach crate,$$(TARGET_CRATES_$(1)), \
120120
$$(call ADB_SHELL,rm,$$(CFG_RUNTIME_PUSH_DIR)/$$(call CFG_LIB_GLOB_$(1),$$(crate)));)
121121
endef
122122

Diff for: mk/main.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ TSREQ$(1)_T_$(2)_H_$(3) = \
432432
# target
433433
SREQ$(1)_T_$(2)_H_$(3) = \
434434
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
435-
$$(foreach dep,$$(TARGET_CRATES), \
435+
$$(foreach dep,$$(TARGET_CRATES_$(2)), \
436436
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep)) \
437437
tmp/install-debugger-scripts$(1)_T_$(2)_H_$(3)-$$(call TRIPLE_TO_DEBUGGER_SCRIPT_SETTING,$(2)).done
438438

@@ -441,7 +441,7 @@ SREQ$(1)_T_$(2)_H_$(3) = \
441441
CSREQ$(1)_T_$(2)_H_$(3) = \
442442
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
443443
$$(HBIN$(1)_H_$(3))/rustdoc$$(X_$(3)) \
444-
$$(foreach dep,$$(CRATES),$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep))
444+
$$(foreach dep,$$(HOST_CRATES),$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep))
445445

446446
ifeq ($(1),0)
447447
# Don't run the stage0 compiler under valgrind - that ship has sailed

Diff for: mk/platform.mk

+12
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,18 @@ endef
118118
$(foreach target,$(CFG_TARGET), \
119119
$(eval $(call DEFINE_LINKER,$(target))))
120120

121+
define ADD_JEMALLOC_DEP
122+
ifndef CFG_DISABLE_JEMALLOC_$(1)
123+
ifndef CFG_DISABLE_JEMALLOC
124+
RUST_DEPS_std_T_$(1) += alloc_jemalloc
125+
TARGET_CRATES_$(1) += alloc_jemalloc
126+
endif
127+
endif
128+
endef
129+
130+
$(foreach target,$(CFG_TARGET), \
131+
$(eval $(call ADD_JEMALLOC_DEP,$(target))))
132+
121133
# The -Qunused-arguments sidesteps spurious warnings from clang
122134
define FILTER_FLAGS
123135
ifeq ($$(CFG_USING_CLANG),1)

Diff for: mk/prepare.mk

+3-3
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ prepare-host-lib-$(1)-$(2)-$(3)-$(4): \
122122
prepare-host-lib-$(1)-$(2)-$(3)-$(4): \
123123
PREPARE_WORKING_DEST_LIB_DIR=$$(PREPARE_DEST_DIR)/$$(call PREPARE_TAR_LIB_DIR,$$(HLIB_RELATIVE$(2)_H_$(3)))
124124
prepare-host-lib-$(1)-$(2)-$(3)-$(4): prepare-maybe-clean-$(4) \
125-
$$(foreach dep,$$(RUST_DEPS_$(1)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4)) \
125+
$$(foreach dep,$$(RUST_DEPS_$(1)_T_$(3)),prepare-host-lib-$$(dep)-$(2)-$(3)-$(4)) \
126126
$$(HLIB$(2)_H_$(3))/stamp.$(1) \
127127
prepare-host-dirs-$(4)
128128
$$(if $$(findstring $(2), $$(PREPARE_STAGE)), \
@@ -147,7 +147,7 @@ prepare-target-$(2)-host-$(3)-$(1)-$(4): \
147147
prepare-target-$(2)-host-$(3)-$(1)-$(4): \
148148
PREPARE_DEST_BIN_DIR=$$(PREPARE_DEST_LIB_DIR)/rustlib/$(3)/bin
149149
prepare-target-$(2)-host-$(3)-$(1)-$(4): prepare-maybe-clean-$(4) \
150-
$$(foreach crate,$$(TARGET_CRATES), \
150+
$$(foreach crate,$$(TARGET_CRATES_$(2)), \
151151
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate)) \
152152
$$(if $$(findstring $(2),$$(CFG_HOST)), \
153153
$$(foreach crate,$$(HOST_CRATES), \
@@ -161,7 +161,7 @@ prepare-target-$(2)-host-$(3)-$(1)-$(4): prepare-maybe-clean-$(4) \
161161
$$(if $$(findstring $(3), $$(PREPARE_HOST)), \
162162
$$(call PREPARE_DIR,$$(PREPARE_WORKING_DEST_LIB_DIR)) \
163163
$$(call PREPARE_DIR,$$(PREPARE_DEST_BIN_DIR)) \
164-
$$(foreach crate,$$(TARGET_CRATES), \
164+
$$(foreach crate,$$(TARGET_CRATES_$(2)), \
165165
$$(if $$(or $$(findstring 1, $$(ONLY_RLIB_$$(crate))),$$(findstring 1,$$(CFG_INSTALL_ONLY_RLIB_$(2)))),, \
166166
$$(call PREPARE_LIB,$$(call CFG_LIB_GLOB_$(2),$$(crate)))) \
167167
$$(call PREPARE_LIB,$$(call CFG_RLIB_GLOB,$$(crate)))) \

Diff for: mk/target.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ define RUST_CRATE_FULLDEPS
2828
CRATE_FULLDEPS_$(1)_T_$(2)_H_$(3)_$(4) := \
2929
$$(CRATEFILE_$(4)) \
3030
$$(RSINPUTS_$(4)) \
31-
$$(foreach dep,$$(RUST_DEPS_$(4)), \
31+
$$(foreach dep,$$(RUST_DEPS_$(4)_T_$(2)), \
3232
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(dep)) \
3333
$$(foreach dep,$$(NATIVE_DEPS_$(4)), \
3434
$$(RT_OUTPUT_DIR_$(2))/$$(call CFG_STATIC_LIB_NAME_$(2),$$(dep))) \
@@ -147,7 +147,7 @@ ifeq ($$(CFG_RUSTRT_HAS_STARTUP_OBJS_$(2)), 1)
147147
# Add dependencies on Rust startup objects to all crates that depend on core.
148148
# This ensures that they are built after core (since they depend on it),
149149
# but before everything else (since they are needed for linking dylib crates).
150-
$$(foreach crate, $$(TARGET_CRATES), \
150+
$$(foreach crate, $$(TARGET_CRATES_$(2)), \
151151
$$(if $$(findstring core,$$(DEPS_$$(crate))), \
152152
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate))) : $$(TLIB$(1)_T_$(2)_H_$(3))/$(4).o
153153
endif

Diff for: mk/tests.mk

+2-2
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ $(info check: android device test dir $(CFG_ADB_TEST_DIR) ready \
135135
$(foreach target,$(CFG_TARGET), \
136136
$(if $(findstring android, $(target)), \
137137
$(shell $(CFG_ADB) shell mkdir $(CFG_ADB_TEST_DIR)/$(target)) \
138-
$(foreach crate,$(TARGET_CRATES), \
138+
$(foreach crate,$(TARGET_CRATES_$(target)), \
139139
$(shell $(CFG_ADB) push $(TLIB2_T_$(target)_H_$(CFG_BUILD))/$(call CFG_LIB_GLOB_$(target),$(crate)) \
140140
$(CFG_ADB_TEST_DIR)/$(target))), \
141141
)))
@@ -364,7 +364,7 @@ define TEST_RUNNER
364364
# parent crates.
365365
ifeq ($(NO_REBUILD),)
366366
TESTDEP_$(1)_$(2)_$(3)_$(4) = $$(SREQ$(1)_T_$(2)_H_$(3)) \
367-
$$(foreach crate,$$(TARGET_CRATES), \
367+
$$(foreach crate,$$(TARGET_CRATES_$(2)), \
368368
$$(TLIB$(1)_T_$(2)_H_$(3))/stamp.$$(crate)) \
369369
$$(CRATE_FULLDEPS_$(1)_T_$(2)_H_$(3)_$(4))
370370

0 commit comments

Comments
 (0)