1 # Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 # file at the top-level directory of this distribution and at
3 # http://rust-lang.org/COPYRIGHT.
5 # Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 # http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 # <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 # option. This file may not be copied, modified, or distributed
9 # except according to those terms.
11 # CP_HOST_STAGE_N template: arg 1 is the N we're promoting *from*, arg
12 # 2 is N+1. Must be invoked to promote target artifacts to host
13 # artifacts for stage 1-3 (stage0 host artifacts come from the
14 # snapshot). Arg 3 is the triple we're copying FROM and arg 4 is the
15 # triple we're copying TO.
17 # The easiest way to read this template is to assume we're promoting
18 # stage1 to stage2 and mentally gloss $(1) as 1, $(2) as 2.
20 define CP_HOST_STAGE_N
22 # Host libraries and executables (stage$(2)/bin/rustc and its runtime needs)
24 # Note: $(3) and $(4) are both the same!
26 $$(HBIN$(2)_H_$(4))/rustc$$(X_$(4)): \
27 $$(TBIN$(1)_T_$(4)_H_$(3))/rustc$$(X_$(4)) \
28 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
29 $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
30 $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \
31 $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
32 $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
33 $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
34 | $$(HBIN$(2)_H_$(4))/
39 $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \
40 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
41 $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)) \
42 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
43 $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
44 $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
45 $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
46 $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
47 | $$(HLIB$(2)_H_$(4))/
50 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
52 $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB_$(4)) \
53 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_DSYM_GLOB_$(4))) \
55 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
57 $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \
58 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBSYNTAX_$(4)) \
59 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
60 $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
61 $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
62 $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
63 $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
64 | $$(HLIB$(2)_H_$(4))/
66 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(4)),$$(notdir $$@))
68 $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) \
69 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_DSYM_GLOB_$(4))) \
71 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(4)),$$(notdir $$@))
73 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)): \
74 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) \
75 | $$(HLIB$(2)_H_$(4))/
79 $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \
80 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \
81 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
82 | $$(HLIB$(2)_H_$(4))/
84 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
85 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_RGLOB_$(4)),$$(notdir $$@))
87 # Subtle: We do not let the shell expand $$(STDLIB_DSYM_GLOB) directly rather
88 # we use Make's $$(wildcard) facility. The reason is that, on mac, when using
89 # USE_SNAPSHOT_STDLIB, we copy the std.dylib file out of the snapshot.
90 # In that case, there is no .dSYM file. Annoyingly, bash then refuses to expand
91 # glob, and cp reports an error because libstd-*.dylib.dsym does not exist.
92 # Make instead expands the glob to nothing, which gives us the correct behavior.
93 # (Copy .dsym file if it exists, but do nothing otherwise)
94 $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) \
95 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_RGLOB_$(4))) \
96 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_DSYM_GLOB_$(4))) \
98 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
99 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_RGLOB_$(4)),$$(notdir $$@))
101 $$(HLIB$(2)_H_$(4))/$(CFG_EXTRALIB_$(4)): \
102 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_EXTRALIB_$(4)) \
103 $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)) \
104 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
105 | $$(HLIB$(2)_H_$(4))/
107 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
108 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_RGLOB_$(4)),$$(notdir $$@))
110 $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(EXTRALIB_GLOB_$(4)) \
111 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(EXTRALIB_RGLOB_$(4))) \
112 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(EXTRALIB_DSYM_GLOB_$(4))) \
114 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
115 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_RGLOB_$(4)),$$(notdir $$@))
117 $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTUV_$(4)): \
118 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTUV_$(4)) \
119 $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)) \
120 $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
121 | $$(HLIB$(2)_H_$(4))/
123 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
124 $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_RGLOB_$(4)),$$(notdir $$@))
126 $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTUV_GLOB_$(4)) \
127 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTUV_RGLOB_$(4))) \
128 $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTUV_DSYM_GLOB_$(4))) \
130 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
131 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_RGLOB_$(4)),$$(notdir $$@))
133 $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \
134 $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \
135 | $$(HLIB$(2)_H_$(4))/
139 $$(HBIN$(2)_H_$(4))/:
142 ifneq ($(CFG_LIBDIR),bin)
143 $$(HLIB$(2)_H_$(4))/:
149 $(foreach t,$(CFG_HOST), \
150 $(eval $(call CP_HOST_STAGE_N,0,1,$(t),$(t))) \
151 $(eval $(call CP_HOST_STAGE_N,1,2,$(t),$(t))) \
152 $(eval $(call CP_HOST_STAGE_N,2,3,$(t),$(t))))