25f51eeda0
Namely, switched in many places to using GNU make provided functions for directory listing and text processing, rather than spawning a shell process to do that work. In the process of the revision, learned about Target-specific variables, which were very applicable to INSTALL_LIB (which, on a per-recipe basis, was always receiving the same actual arguments for its first two formal parameters in every invocation). http://www.gnu.org/software/make/manual/html_node/Target_002dspecific.html (We might be able to make use of those in future refactorings.) ---- Also adds a cleanup pass to get-snapshot.py as well, since the same problem arises when we unpack libraries from the snapshot archive into a build directory with a prior snapshot's artifacts. (I put this step into the python script rather than the makefile because I wanted to delay the cleanup pass until after we have at least successfully downloaded the tarball. That way, if the download fails, you should not destroy the previous unarchived snapshot libraries and build products.) ---- Also reverted whitespace changes to minimize diff. I plan to put them back in in a dedicated commit elsewhere.
116 lines
3.7 KiB
Makefile
116 lines
3.7 KiB
Makefile
# Extract the snapshot host compiler
|
|
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/:
|
|
mkdir -p $@
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/:
|
|
mkdir -p $@
|
|
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)): \
|
|
$(S)src/snapshots.txt \
|
|
$(S)src/etc/get-snapshot.py $(MKFILE_DEPS) \
|
|
| $(HBIN0_H_$(CFG_BUILD_TRIPLE))/
|
|
|
|
@$(call E, fetch: $@)
|
|
# Note: the variable "SNAPSHOT_FILE" is generally not set, and so
|
|
# we generally only pass one argument to this script.
|
|
ifdef CFG_ENABLE_LOCAL_RUST
|
|
$(Q)$(S)src/etc/local_stage0.sh $(CFG_BUILD_TRIPLE) $(CFG_LOCAL_RUST_ROOT)
|
|
else
|
|
$(Q)$(CFG_PYTHON) $(S)src/etc/get-snapshot.py $(CFG_BUILD_TRIPLE) $(SNAPSHOT_FILE)
|
|
ifdef CFG_ENABLE_PAX_FLAGS
|
|
@$(call E, apply PaX flags: $@)
|
|
@"$(CFG_PAXCTL)" -cm "$@"
|
|
endif
|
|
endif
|
|
$(Q)touch $@
|
|
|
|
# Host libs will be extracted by the above rule
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_RUNTIME_$(CFG_BUILD_TRIPLE)): \
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) \
|
|
| $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
|
|
$(Q)touch $@
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_STDLIB_$(CFG_BUILD_TRIPLE)): \
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) \
|
|
| $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
|
|
$(Q)touch $@
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_EXTRALIB_$(CFG_BUILD_TRIPLE)): \
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) \
|
|
| $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
|
|
$(Q)touch $@
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_LIBRUSTC_$(CFG_BUILD_TRIPLE)): \
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) \
|
|
| $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
|
|
$(Q)touch $@
|
|
|
|
$(HLIB0_H_$(CFG_BUILD_TRIPLE))/$(CFG_RUSTLLVM_$(CFG_BUILD_TRIPLE)): \
|
|
$(HBIN0_H_$(CFG_BUILD_TRIPLE))/rustc$(X_$(CFG_BUILD_TRIPLE)) \
|
|
| $(HLIB0_H_$(CFG_BUILD_TRIPLE))/
|
|
$(Q)touch $@
|
|
|
|
# For other targets, let the host build the target:
|
|
|
|
define BOOTSTRAP_STAGE0
|
|
# $(1) target to bootstrap
|
|
# $(2) stage to bootstrap from
|
|
# $(3) target to bootstrap from
|
|
|
|
$(HBIN0_H_$(1))/:
|
|
mkdir -p $@
|
|
|
|
$(HLIB0_H_$(1))/:
|
|
mkdir -p $@
|
|
|
|
$$(HBIN0_H_$(1))/rustc$$(X_$(1)): \
|
|
$$(TBIN$(2)_T_$(1)_H_$(3))/rustc$$(X_$(1)) \
|
|
| $(HBIN0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(Q)cp $$< $$@
|
|
|
|
$$(HLIB0_H_$(1))/$(CFG_RUNTIME_$(1)): \
|
|
$$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_RUNTIME_$(1)) \
|
|
| $(HLIB0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(Q)cp $$< $$@
|
|
|
|
$$(HLIB0_H_$(1))/$(CFG_STDLIB_$(1)): \
|
|
$$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_STDLIB_$(1)) \
|
|
| $(HLIB0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
|
|
$$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(STDLIB_GLOB_$(1)) $$@
|
|
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
|
|
|
|
$$(HLIB0_H_$(1))/$(CFG_EXTRALIB_$(1)): \
|
|
$$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_EXTRALIB_$(1)) \
|
|
| $(HLIB0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
|
|
$$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(EXTRALIB_GLOB_$(1)) $$@
|
|
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
|
|
|
|
$$(HLIB0_H_$(1))/$(CFG_LIBRUSTC_$(1)): \
|
|
$$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_LIBRUSTC_$(1)) \
|
|
| $(HLIB0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(call CHECK_FOR_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
|
|
$$(Q)cp $$(TLIB$(2)_T_$(1)_H_$(3))/$(LIBRUSTC_GLOB_$(1)) $$@
|
|
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
|
|
|
|
$$(HLIB0_H_$(1))/$(CFG_RUSTLLVM_$(1)): \
|
|
$$(TLIB$(2)_T_$(1)_H_$(3))/$(CFG_RUSTLLVM_$(1)) \
|
|
| $(HLIB0_H_$(1))/
|
|
@$$(call E, cp: $$@)
|
|
$$(Q)cp $$< $$@
|
|
|
|
endef
|
|
|
|
# Use stage1 to build other architectures: then you don't have to wait
|
|
# for stage2, but you get the latest updates to the compiler source.
|
|
$(foreach t,$(NON_BUILD_HOST_TRIPLES), \
|
|
$(eval $(call BOOTSTRAP_STAGE0,$(t),1,$(CFG_BUILD_TRIPLE))))
|