1 # Extract the snapshot host compiler
3 $(HBIN0_H_$(CFG_BUILD))/:
6 $(HLIB0_H_$(CFG_BUILD))/:
9 $(SNAPSHOT_RUSTC_POST_CLEANUP): \
10 $(S)src/snapshots.txt \
11 $(S)src/etc/get-snapshot.py $(MKFILE_DEPS) \
12 | $(HBIN0_H_$(CFG_BUILD))/
15 # Note: the variable "SNAPSHOT_FILE" is generally not set, and so
16 # we generally only pass one argument to this script.
17 ifdef CFG_ENABLE_LOCAL_RUST
18 $(Q)$(S)src/etc/local_stage0.sh $(CFG_BUILD) $(CFG_LOCAL_RUST_ROOT)
20 $(Q)$(CFG_PYTHON) $(S)src/etc/get-snapshot.py $(CFG_BUILD) $(SNAPSHOT_FILE)
21 ifdef CFG_ENABLE_PAX_FLAGS
22 @$(call E, apply PaX flags: $@)
23 @"$(CFG_PAXCTL)" -cm "$@"
28 # Host libs will be extracted by the above rule
30 $(HLIB0_H_$(CFG_BUILD))/$(CFG_RUNTIME_$(CFG_BUILD)): \
31 $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \
32 | $(HLIB0_H_$(CFG_BUILD))/
35 $(HLIB0_H_$(CFG_BUILD))/$(CFG_STDLIB_$(CFG_BUILD)): \
36 $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \
37 | $(HLIB0_H_$(CFG_BUILD))/
40 $(HLIB0_H_$(CFG_BUILD))/$(CFG_EXTRALIB_$(CFG_BUILD)): \
41 $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \
42 | $(HLIB0_H_$(CFG_BUILD))/
45 $(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_LIBRUSTUV_$(CFG_BUILD)): \
46 $(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD)) \
47 | $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
50 $(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_LIBRUSTC_$(CFG_BUILD)): \
51 $(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD)) \
52 | $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
55 $(HLIB0_H_$(CFG_BUILD))/$(CFG_RUSTLLVM_$(CFG_BUILD)): \
56 $(HBIN0_H_$(CFG_BUILD))/rustc$(X_$(CFG_BUILD)) \
57 | $(HLIB0_H_$(CFG_BUILD))/
60 # For other targets, let the host build the target:
62 define BOOTSTRAP_STAGE0
63 # $(1) target to bootstrap
64 # $(2) stage to bootstrap from
65 # $(3) target to bootstrap from
73 $$(HBIN0_H_$(1))/rustc$$(X_$(1)): \
74 $$(TBIN$(2)_T_$(1)_H_$(3))/rustc$$(X_$(1)) \
79 $$(HLIB0_H_$(1))/$(CFG_RUNTIME_$(1)): \
80 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_RUNTIME_$(1)) \
85 $$(HLIB0_H_$(1))/$(CFG_STDLIB_$(1)): \
86 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_STDLIB_$(1)) \
89 $$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
90 $$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(STDLIB_GLOB_$(1)) $$@
91 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
93 $$(HLIB0_H_$(1))/$(CFG_EXTRALIB_$(1)): \
94 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_EXTRALIB_$(1)) \
97 $$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
98 $$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(EXTRALIB_GLOB_$(1)) $$@
99 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
101 $$(HLIB0_H_$(1))/$(CFG_LIBRUSTUV_$(1)): \
102 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_LIBRUSTUV_$(1)) \
105 $$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
106 $$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(LIBRUSTUV_GLOB_$(1)) $$@
107 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
109 $$(HLIB0_H_$(1))/$(CFG_LIBRUSTC_$(1)): \
110 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_LIBRUSTC_$(1)) \
113 $$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
114 $$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(LIBRUSTC_GLOB_$(1)) $$@
115 $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
117 $$(HLIB0_H_$(1))/$(CFG_RUSTLLVM_$(1)): \
118 $$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_RUSTLLVM_$(1)) \
125 # Use stage1 to build other architectures: then you don't have to wait
126 # for stage2, but you get the latest updates to the compiler source.
127 $(foreach t,$(NON_BUILD_HOSTS), \
128 $(eval $(call BOOTSTRAP_STAGE0,$(t),1,$(CFG_BUILD))))