]> git.lizzy.rs Git - rust.git/blobdiff - mk/host.mk
Auto merge of #28263 - christopherdumas:add_help_E0118, r=nikomatsakis
[rust.git] / mk / host.mk
index 9ba2b978f1075775ef028186493da62d9121536c..59a00950b5cfde17634027417cb08d100fff3bcb 100644 (file)
 # option. This file may not be copied, modified, or distributed
 # except according to those terms.
 
-# CP_HOST_STAGE_N template: arg 1 is the N we're promoting *from*, arg
-# 2 is N+1. Must be invoked to promote target artifacts to host
-# artifacts for stage 1-3 (stage0 host artifacts come from the
-# snapshot).  Arg 3 is the triple we're copying FROM and arg 4 is the
-# triple we're copying TO.
+# Generic rule for copying any target crate to a host crate. This rule will also
+# promote any dependent rust crates up to their host locations as well
 #
-# The easiest way to read this template is to assume we're promoting
-# stage1 to stage2 and mentally gloss $(1) as 1, $(2) as 2.
-
-define CP_HOST_STAGE_N
-
-# Host libraries and executables (stage$(2)/bin/rustc and its runtime needs)
-
-# Note: $(3) and $(4) are both the same!
-
-$$(HBIN$(2)_H_$(4))/rustc$$(X_$(4)): \
-       $$(TBIN$(1)_T_$(4)_H_$(3))/rustc$$(X_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \
-       $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
-       $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
-       $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
-       | $$(HBIN$(2)_H_$(4))/
-
-       @$$(call E, cp: $$@)
-       $$(Q)cp $$< $$@
-
-$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
-       $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
-       $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
-       $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-
-       @$$(call E, cp: $$@)
-       $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
-       $$(Q)cp $$< $$@
-       $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_GLOB_$(4)) \
-               $(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTC_DSYM_GLOB_$(4))) \
-               $$(HLIB$(2)_H_$(4))
-       $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTC_GLOB_$(4)),$$(notdir $$@))
-
-$$(HLIB$(2)_H_$(4))/$(CFG_LIBSYNTAX_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBSYNTAX_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)) \
-       $$(HSTDLIB_DEFAULT$(2)_H_$(4)) \
-       $$(HEXTRALIB_DEFAULT$(2)_H_$(4)) \
-       $$(HLIBRUSTUV_DEFAULT$(2)_H_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(4)),$$(notdir $$@))
-       $$(Q)cp $$< $$@
-       $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_GLOB_$(4)) \
-               $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBSYNTAX_DSYM_GLOB_$(4))) \
-               $$(HLIB$(2)_H_$(4))
-       $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBSYNTAX_GLOB_$(4)),$$(notdir $$@))
-
-$$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(Q)cp $$< $$@
-
-$$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_STDLIB_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
-       $$(Q)cp $$< $$@
-# Subtle: We do not let the shell expand $$(STDLIB_DSYM_GLOB) directly rather
-# we use Make's $$(wildcard) facility. The reason is that, on mac, when using
-# USE_SNAPSHOT_STDLIB, we copy the std.dylib file out of the snapshot.
-# In that case, there is no .dSYM file.  Annoyingly, bash then refuses to expand
-# glob, and cp reports an error because libstd-*.dylib.dsym does not exist.
-# Make instead expands the glob to nothing, which gives us the correct behavior.
-# (Copy .dsym file if it exists, but do nothing otherwise)
-       $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_GLOB_$(4)) \
-               $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(STDLIB_DSYM_GLOB_$(4))) \
-               $$(HLIB$(2)_H_$(4))
-       $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(STDLIB_GLOB_$(4)),$$(notdir $$@))
-
-$$(HLIB$(2)_H_$(4))/$(CFG_EXTRALIB_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_EXTRALIB_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
+# $(1) - the stage to copy from
+# $(2) - the stage to copy to
+# $(3) - the host triple
+# $(4) - the target triple (same as $(3))
+# $(5) - the name of the crate being processed
+define CP_HOST_STAGE_N_CRATE
+
+ifeq ($$(ONLY_RLIB_$(5)),)
+$$(HLIB$(2)_H_$(4))/stamp.$(5): \
+       $$(TLIB$(1)_T_$(3)_H_$(4))/stamp.$(5) \
+       $$(RUST_DEPS_$(5):%=$$(HLIB$(2)_H_$(4))/stamp.%) \
        | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
+       @$$(call E, cp: $$(@D)/lib$(5))
+       $$(call REMOVE_ALL_OLD_GLOB_MATCHES, \
+           $$(dir $$@)$$(call CFG_LIB_GLOB_$(3),$(5)))
        $$(Q)cp $$< $$@
-       $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(EXTRALIB_GLOB_$(4)) \
-               $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(EXTRALIB_DSYM_GLOB_$(4))) \
+       $$(Q)cp -R $$(TLIB$(1)_T_$(3)_H_$(4))/$$(call CFG_LIB_GLOB_$(3),$(5)) \
                $$(HLIB$(2)_H_$(4))
-       $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(EXTRALIB_GLOB_$(4)),$$(notdir $$@))
+       $$(call LIST_ALL_OLD_GLOB_MATCHES, \
+           $$(dir $$@)$$(call CFG_LIB_GLOB_$(3),$(5)))
+else
+$$(HLIB$(2)_H_$(4))/stamp.$(5):
+       $$(Q)touch $$@
+endif
 
-$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTUV_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTUV_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_STDLIB_$(4)) \
-       $$(HLIB$(2)_H_$(4))/$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
-       $$(Q)cp $$< $$@
-       $$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTUV_GLOB_$(4)) \
-               $$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTUV_DSYM_GLOB_$(4))) \
-               $$(HLIB$(2)_H_$(4))
-       $$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTUV_GLOB_$(4)),$$(notdir $$@))
+endef
 
-$$(HLIB$(2)_H_$(4))/libstd.rlib: \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/libstd.rlib \
-       $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(Q)cp $$< $$@
+# Same as the above macro, but for tools instead of crates
+define CP_HOST_STAGE_N_TOOL
 
-$$(HLIB$(2)_H_$(4))/libextra.rlib: \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/libextra.rlib \
-       $$(HLIB$(2)_H_$(4))/libstd.rlib \
-       $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
+$$(HBIN$(2)_H_$(4))/$(5)$$(X_$(3)): \
+       $$(TBIN$(1)_T_$(3)_H_$(4))/$(5)$$(X_$(3)) \
+       $$(TOOL_DEPS_$(5):%=$$(HLIB$(2)_H_$(4))/stamp.%) \
+       | $$(HBIN$(2)_H_$(4))/
        @$$(call E, cp: $$@)
        $$(Q)cp $$< $$@
 
-$$(HLIB$(2)_H_$(4))/librustc.rlib: \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/librustc.rlib \
-       $$(HLIB$(2)_H_$(4))/libstd.rlib \
-       $$(HLIB$(2)_H_$(4))/libextra.rlib \
-       $$(HLIB$(2)_H_$(4))/$$(CFG_RUNTIME_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(Q)cp $$< $$@
+endef
 
-$$(HLIB$(2)_H_$(4))/$(CFG_RUSTLLVM_$(4)): \
-       $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_RUSTLLVM_$(4)) \
-       | $$(HLIB$(2)_H_$(4))/
-       @$$(call E, cp: $$@)
-       $$(Q)cp $$< $$@
 
-$$(HBIN$(2)_H_$(4))/:
-       mkdir -p $$@
+# Miscellaneous rules for just making a few directories.
+#
+# $(1) - the stage to copy from
+# $(2) - the stage to copy to
+# $(3) - the target triple
+# $(4) - the host triple (same as $(3))
+define CP_HOST_STAGE_N
 
-ifneq ($(CFG_LIBDIR),bin)
+ifneq ($(CFG_LIBDIR_RELATIVE),bin)
 $$(HLIB$(2)_H_$(4))/:
-       mkdir -p $$@
+       @mkdir -p $$@
 endif
 
 endef
 
-$(foreach t,$(CFG_HOST),                                       \
-       $(eval $(call CP_HOST_STAGE_N,0,1,$(t),$(t)))   \
-       $(eval $(call CP_HOST_STAGE_N,1,2,$(t),$(t)))   \
+$(foreach t,$(CFG_HOST), \
+       $(eval $(call CP_HOST_STAGE_N,0,1,$(t),$(t))) \
+       $(eval $(call CP_HOST_STAGE_N,1,2,$(t),$(t))) \
        $(eval $(call CP_HOST_STAGE_N,2,3,$(t),$(t))))
+
+$(foreach crate,$(CRATES), \
+ $(foreach t,$(CFG_HOST), \
+  $(eval $(call CP_HOST_STAGE_N_CRATE,0,1,$(t),$(t),$(crate))) \
+  $(eval $(call CP_HOST_STAGE_N_CRATE,1,2,$(t),$(t),$(crate))) \
+  $(eval $(call CP_HOST_STAGE_N_CRATE,2,3,$(t),$(t),$(crate)))))
+
+$(foreach tool,$(TOOLS), \
+ $(foreach t,$(CFG_HOST), \
+  $(eval $(call CP_HOST_STAGE_N_TOOL,0,1,$(t),$(t),$(tool))) \
+  $(eval $(call CP_HOST_STAGE_N_TOOL,1,2,$(t),$(t),$(tool))) \
+  $(eval $(call CP_HOST_STAGE_N_TOOL,2,3,$(t),$(t),$(tool)))))