mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
033ac5497e
When building Rust libraries (e.g. librustc, libstd, etc), checks for and verbosely removes previous build products before invoking rustc. (Also, when Make variable VERBOSE is defined, it will list all of the libraries matching the object library's glob after the rustc invocation has completed.) When installing Rust libraries, checks for previous libraries in target install directory, but does not remove them. The thinking behind these two different modes of operation is that the installation target, unlike the build tree, is not under the control of this infrastructure and it is not up to this Makefile to decide if the previous libraries should be removed.
152 lines
5.6 KiB
Makefile
152 lines
5.6 KiB
Makefile
# Copyright 2012 The Rust Project Developers. See the COPYRIGHT
|
|
# file at the top-level directory of this distribution and at
|
|
# http://rust-lang.org/COPYRIGHT.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
|
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
|
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
|
# 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.
|
|
#
|
|
# 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)) \
|
|
| $$(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)) \
|
|
| $$(HLIB$(2)_H_$(4))/
|
|
|
|
@$$(call E, cp: $$@)
|
|
$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT, `dirname $$@`, $(LIBRUSTC_GLOB_$(4)), `basename $$@`)
|
|
$$(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, `dirname $$@`, $(LIBRUSTC_GLOB_$(4)), `basename $$@`)
|
|
|
|
$$(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)) \
|
|
| $$(HLIB$(2)_H_$(4))/
|
|
@$$(call E, cp: $$@)
|
|
$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT, `dirname $$@`, $(LIBSYNTAX_GLOB_$(4)), `basename $$@`)
|
|
$$(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, `dirname $$@`, $(LIBSYNTAX_GLOB_$(4)), `basename $$@`)
|
|
|
|
$$(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, `dirname $$@`, $(STDLIB_GLOB_$(4)), `basename $$@`)
|
|
$$(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, `dirname $$@`, $(STDLIB_GLOB_$(4)), `basename $$@`)
|
|
|
|
$$(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)) \
|
|
| $$(HLIB$(2)_H_$(4))/
|
|
@$$(call E, cp: $$@)
|
|
$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT, `dirname $$@`, $(EXTRALIB_GLOB_$(4)), `basename $$@`)
|
|
$$(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))) \
|
|
$$(HLIB$(2)_H_$(4))
|
|
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT, `dirname $$@`, $(EXTRALIB_GLOB_$(4)), `basename $$@`)
|
|
|
|
$$(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 $$< $$@
|
|
|
|
$$(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))/
|
|
@$$(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 $$< $$@
|
|
|
|
$$(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 $$@
|
|
|
|
ifneq ($(CFG_LIBDIR),bin)
|
|
$$(HLIB$(2)_H_$(4))/:
|
|
mkdir -p $$@
|
|
endif
|
|
|
|
endef
|
|
|
|
$(foreach t,$(CFG_HOST_TRIPLES), \
|
|
$(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))))
|