Skip to content

Commit 4dd0fa6

Browse files
committed
Make build products depend on their target directories.
This is an attempt to address Issue #3326 by adding [*order-only*][1] prerequsites of each build product on the directory where it is to go. It is important that the prerequisites be order-only, since the timestamp on a parent directory is not relevant to whether a product is out of date; the parent directory merely needs to exist. (This use case of generating target directories was provided as an [example][2] of how order-only prequisites are used.) [1]: http://www.gnu.org/software/make/manual/html_node/Prerequisite-Types.html [2]: http://www.kolpackov.net/pipermail/notes/2004-January/000001.html
1 parent 326d966 commit 4dd0fa6

File tree

2 files changed

+45
-19
lines changed

2 files changed

+45
-19
lines changed

mk/host.mk

+25-10
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ $$(HBIN$(2)_H_$(4))/rustc$$(X_$(4)): \
2929
$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
3030
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \
3131
$$(HCORELIB_DEFAULT$(2)_H_$(4)) \
32-
$$(HSTDLIB_DEFAULT$(2)_H_$(4))
32+
$$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
33+
| $$(HBIN$(2)_H_$(4))/
34+
3335
@$$(call E, cp: $$@)
3436
$$(Q)cp $$< $$@
3537

@@ -39,7 +41,9 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \
3941
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
4042
$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
4143
$$(HCORELIB_DEFAULT$(2)_H_$(4)) \
42-
$$(HSTDLIB_DEFAULT$(2)_H_$(4))
44+
$$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
45+
| $$(HBIN$(2)_H_$(4))/
46+
4347
@$$(call E, cp: $$@)
4448
$$(Q)cp $$< $$@
4549
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB_$(4)) \
@@ -51,21 +55,24 @@ $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \
5155
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
5256
$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
5357
$$(HCORELIB_DEFAULT$(2)_H_$(4)) \
54-
$$(HSTDLIB_DEFAULT$(2)_H_$(4))
58+
$$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
59+
| $$(HBIN$(2)_H_$(4))/
5560
@$$(call E, cp: $$@)
5661
$$(Q)cp $$< $$@
5762
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) \
5863
$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_DSYM_GLOB_$(4))) \
5964
$$(HLIB$(2)_H_$(4))
6065

6166
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)): \
62-
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4))
67+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) \
68+
| $$(HBIN$(2)_H_$(4))/
6369
@$$(call E, cp: $$@)
6470
$$(Q)cp $$< $$@
6571

6672
$$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)): \
6773
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_CORELIB_$(4)) \
68-
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4))
74+
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
75+
| $$(HBIN$(2)_H_$(4))/
6976
@$$(call E, cp: $$@)
7077
$$(Q)cp $$< $$@
7178
# Subtle: We do not let the shell expand $(CORELIB_DSYM_GLOB) directly rather
@@ -82,7 +89,8 @@ $$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)): \
8289
$$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \
8390
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \
8491
$$(HLIB$(2)_H_$(4))/$(CFG_CORELIB_$(4)) \
85-
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4))
92+
$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
93+
| $$(HBIN$(2)_H_$(4))/
8694
@$$(call E, cp: $$@)
8795
$$(Q)cp $$< $$@
8896
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) \
@@ -91,30 +99,37 @@ $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \
9199

92100
$$(HLIB$(2)_H_$(4))/libcore.rlib: \
93101
$$(TLIB$(1)_T_$(4)_H_$(3))/libcore.rlib \
94-
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))
102+
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
103+
| $$(HBIN$(2)_H_$(4))/
95104
@$$(call E, cp: $$@)
96105
$$(Q)cp $$< $$@
97106

98107
$$(HLIB$(2)_H_$(4))/libstd.rlib: \
99108
$$(TLIB$(1)_T_$(4)_H_$(3))/libstd.rlib \
100109
$$(HLIB$(2)_H_$(4))/libcore.rlib \
101-
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))
110+
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
111+
| $$(HBIN$(2)_H_$(4))/
102112
@$$(call E, cp: $$@)
103113
$$(Q)cp $$< $$@
104114

105115
$$(HLIB$(2)_H_$(4))/librustc.rlib: \
106116
$$(TLIB$(1)_T_$(4)_H_$(3))/librustc.rlib \
107117
$$(HLIB$(2)_H_$(4))/libcore.rlib \
108118
$$(HLIB$(2)_H_$(4))/libstd.rlib \
109-
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4))
119+
$$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
120+
| $$(HBIN$(2)_H_$(4))/
110121
@$$(call E, cp: $$@)
111122
$$(Q)cp $$< $$@
112123

113124
$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \
114-
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4))
125+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \
126+
| $$(HBIN$(2)_H_$(4))/
115127
@$$(call E, cp: $$@)
116128
$$(Q)cp $$< $$@
117129

130+
$$(HBIN$(2)_H_$(4))/:
131+
mkdir -p $@
132+
118133
endef
119134

120135
$(foreach t,$(CFG_HOST_TRIPLES), \

mk/target.mk

+20-9
Original file line numberDiff line numberDiff line change
@@ -18,54 +18,62 @@
1818
define TARGET_STAGE_N
1919

2020
$$(TLIB$(1)_T_$(2)_H_$(3))/libmorestack.a: \
21-
rt/$(2)/arch/$$(HOST_$(2))/libmorestack.a
21+
rt/$(2)/arch/$$(HOST_$(2))/libmorestack.a \
22+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
2223
@$$(call E, cp: $$@)
2324
$$(Q)cp $$< $$@
2425

2526
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUNTIME_$(2)): \
26-
rt/$(2)/$(CFG_RUNTIME_$(2))
27+
rt/$(2)/$(CFG_RUNTIME_$(2)) \
28+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
2729
@$$(call E, cp: $$@)
2830
$$(Q)cp $$< $$@
2931

3032
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_CORELIB_$(2)): \
3133
$$(CORELIB_CRATE) $$(CORELIB_INPUTS) \
32-
$$(TSREQ$(1)_T_$(2)_H_$(3))
34+
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
35+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
3336
@$$(call E, compile_and_link: $$@)
3437
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@
3538

3639
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_STDLIB_$(2)): \
3740
$$(STDLIB_CRATE) $$(STDLIB_INPUTS) \
3841
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_CORELIB_$(2)) \
39-
$$(TSREQ$(1)_T_$(2)_H_$(3))
42+
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
43+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
4044
@$$(call E, compile_and_link: $$@)
4145
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@
4246

4347
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)): \
4448
$$(LIBSYNTAX_CRATE) $$(LIBSYNTAX_INPUTS) \
4549
$$(TSREQ$(1)_T_$(2)_H_$(3)) \
4650
$$(TCORELIB_DEFAULT$(1)_T_$(2)_H_$(3)) \
47-
$$(TSTDLIB_DEFAULT$(1)_T_$(2)_H_$(3))
51+
$$(TSTDLIB_DEFAULT$(1)_T_$(2)_H_$(3)) \
52+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
4853
@$$(call E, compile_and_link: $$@)
4954
$$(STAGE$(1)_T_$(2)_H_$(3)) $(BORROWCK) -o $$@ $$< && touch $$@
5055

5156
# Only build the compiler for host triples
5257
ifneq ($$(findstring $(2),$$(CFG_HOST_TRIPLES)),)
5358

5459
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)): \
55-
rustllvm/$(2)/$(CFG_RUSTLLVM_$(3))
60+
rustllvm/$(2)/$(CFG_RUSTLLVM_$(3)) \
61+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
5662
@$$(call E, cp: $$@)
5763
$$(Q)cp $$< $$@
5864

5965
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)): \
6066
$$(COMPILER_CRATE) $$(COMPILER_INPUTS) \
6167
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBSYNTAX_$(3)) \
62-
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3))
68+
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(3)) \
69+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
6370
@$$(call E, compile_and_link: $$@)
6471
$$(STAGE$(1)_T_$(2)_H_$(3)) -o $$@ $$< && touch $$@
6572

6673
$$(TBIN$(1)_T_$(2)_H_$(3))/rustc$$(X_$(3)): \
67-
$$(DRIVER_CRATE) \
68-
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3))
74+
$$(DRIVER_CRATE) \
75+
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(3)) \
76+
| $$(TLIB$(1)_T_$(2)_H_$(3))/
6977
@$$(call E, compile_and_link: $$@)
7078
$$(STAGE$(1)_T_$(2)_H_$(3)) --cfg rustc -o $$@ $$<
7179
ifdef CFG_ENABLE_PAX_FLAGS
@@ -75,6 +83,9 @@ endif
7583

7684
endif
7785

86+
$$(TLIB$(1)_T_$(2)_H_$(3))/:
87+
mkdir -p $@
88+
7889
endef
7990

8091
# In principle, each host can build each target:

0 commit comments

Comments
 (0)