diff --git a/mk/stage0.mk b/mk/stage0.mk index 7d0255db4ac4c..b11dca3aa06b8 100644 --- a/mk/stage0.mk +++ b/mk/stage0.mk @@ -6,7 +6,9 @@ $(HBIN0_H_$(CFG_BUILD_TRIPLE))/: $(HLIB0_H_$(CFG_BUILD_TRIPLE))/: mkdir -p $@ -$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)): \ +SNAPSHOT_RUSTC_POST_CLEANUP=$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) + +$(SNAPSHOT_RUSTC_POST_CLEANUP): \ $(S)src/snapshots.txt \ $(S)src/etc/get-snapshot.py $(MKFILE_DEPS) \ | $(HBIN0_H_$(CFG_BUILD_TRIPLE))/ diff --git a/mk/target.mk b/mk/target.mk index 0d798f4cc1b4c..0ddeb84e06aae 100644 --- a/mk/target.mk +++ b/mk/target.mk @@ -27,18 +27,28 @@ WFLAGS_ST2 = -D warnings # $(2) is the target triple # $(3) is the host triple +# Every recipe in TARGET_STAGE_N outputs to $$(TLIB$(1)_T_$(2)_H_$(3), +# a directory that can be cleaned out during the middle of a run of +# the get-snapshot.py script. Therefore, every recipe needs to have +# an order-only dependency either on $(SNAPSHOT_RUSTC_POST_CLEANUP) or +# on $$(TSREQ$(1)_T_$(2)_H_$(3)), to ensure that no products will be +# put into the target area until after the get-snapshot.py script has +# had its chance to clean it out; otherwise the other products will be +# inadvertantly included in the clean out. define TARGET_STAGE_N $$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a: \ rt/$(2)/stage$(1)/arch/$$(HOST_$(2))/libmorestack.a \ - | $$(TLIB$(1)_T_$(2)_H_$(3))/ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ \ + $(SNAPSHOT_RUSTC_POST_CLEANUP) @$$(call E, cp: $$@) $$(Q)cp $$< $$@ $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUNTIME_$(2)): \ rt/$(2)/stage$(1)/$(CFG_RUNTIME_$(2)) \ - | $$(TLIB$(1)_T_$(2)_H_$(3))/ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ \ + $(SNAPSHOT_RUSTC_POST_CLEANUP) @$$(call E, cp: $$@) $$(Q)cp $$< $$@ @@ -77,7 +87,8 @@ ifneq ($$(findstring $(2),$$(CFG_HOST_TRIPLES)),) $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)): \ rustllvm/$(2)/$(CFG_RUSTLLVM_$(3)) \ - | $$(TLIB$(1)_T_$(2)_H_$(3))/ + | $$(TLIB$(1)_T_$(2)_H_$(3))/ \ + $(SNAPSHOT_RUSTC_POST_CLEANUP) @$$(call E, cp: $$@) $$(Q)cp $$< $$@