mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
c9c5ee252a
Vectors are now similar to our old, pre-internal vectors, except that they are uniquely owned, not refcounted. Their name should probably change too, then. I've renamed them to vec in the runtime, will do so throughout the compiler later.
290 lines
8.2 KiB
Makefile
290 lines
8.2 KiB
Makefile
######################################################################
|
|
# Residual auto-configuration
|
|
######################################################################
|
|
|
|
include config.mk
|
|
MKFILES := Makefile config.mk $(wildcard $(CFG_SRC_DIR)/mk/*.mk)
|
|
MKFILES += $(CFG_SRC_DIR)/src/rt/libuv/Makefile
|
|
MKFILES += $(wildcard $(CFG_SRC_DIR)/src/rt/libuv/*.mk)
|
|
|
|
ifneq ($(MAKE_RESTARTS),)
|
|
CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
|
|
endif
|
|
|
|
CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))
|
|
|
|
ifdef CFG_DISABLE_OPTIMIZE
|
|
$(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
|
|
CFG_RUSTC_FLAGS :=
|
|
else
|
|
CFG_RUSTC_FLAGS := -O
|
|
endif
|
|
|
|
ifdef SAVE_TEMPS
|
|
CFG_RUSTC_FLAGS += --save-temps
|
|
endif
|
|
ifdef TIME_PASSES
|
|
CFG_RUSTC_FLAGS += --time-passes
|
|
endif
|
|
ifdef TIME_LLVM_PASSES
|
|
CFG_RUSTC_FLAGS += --time-llvm-passes
|
|
endif
|
|
ifdef NO_TYPESTATE
|
|
CFG_RUSTC_FLAGS += --no-typestate
|
|
endif
|
|
ifdef DEBUG
|
|
CFG_RUSTC_FLAGS += -g
|
|
endif
|
|
|
|
# platform-specific auto-configuration
|
|
include $(CFG_SRC_DIR)/mk/platform.mk
|
|
|
|
# Run the stage1/2 compilers under valgrind
|
|
ifdef VALGRIND_COMPILE
|
|
CFG_VALGRIND_COMPILE :=$(CFG_VALGRIND)
|
|
else
|
|
CFG_VALGRIND_COMPILE :=
|
|
endif
|
|
|
|
CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
|
|
CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
|
|
CFG_STDLIB :=$(call CFG_LIB_NAME,std)
|
|
CFG_LIBRUSTC :=$(call CFG_LIB_NAME,rustc)
|
|
|
|
ifdef CFG_DISABLE_SHAREDSTD
|
|
CFG_STDLIB_DEFAULT = $(1)/lib/libstd.rlib
|
|
else
|
|
CFG_STDLIB_DEFAULT = $(2)/$(CFG_STDLIB)
|
|
endif
|
|
|
|
# Uncomment this to temporarily use the snapshot's runtime for stage1.
|
|
# This is useful when making incompatible changes to the parts of the
|
|
# runtime used directly by the compiler -- the binaries built by the
|
|
# snapshot won't know about the changes yet. Don't leave this on. Turn
|
|
# it on, shapshot, and turn it off again.
|
|
CFG_USE_SNAP_LIBS_FOR_STAGE1 = 1
|
|
|
|
# version-string calculation
|
|
CFG_GIT_DIR := $(CFG_SRC_DIR).git
|
|
CFG_VERSION = prerelease
|
|
ifneq ($(wildcard $(CFG_GIT)),)
|
|
ifneq ($(wildcard $(CFG_GIT_DIR)),)
|
|
CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
|
|
--pretty=format:'(%h %ci)')
|
|
endif
|
|
endif
|
|
|
|
ifdef CFG_DISABLE_VALGRIND
|
|
$(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
|
|
CFG_VALGRIND :=
|
|
endif
|
|
ifdef CFG_BAD_VALGRIND
|
|
$(info cfg: disabling valgrind due to its unreliability on this platform)
|
|
CFG_VALGRIND :=
|
|
endif
|
|
|
|
DOCS :=
|
|
ifeq ($(CFG_MAKEINFO),)
|
|
$(info cfg: no makeinfo found, omitting doc/rust.html)
|
|
else
|
|
DOCS += doc/rust.html
|
|
endif
|
|
|
|
ifeq ($(CFG_TEXI2PDF),)
|
|
$(info cfg: no texi2pdf found, omitting doc/rust.pdf)
|
|
else
|
|
ifeq ($(CFG_TEX),)
|
|
$(info cfg: no tex found, omitting doc/rust.pdf)
|
|
else
|
|
DOCS += doc/rust.pdf
|
|
endif
|
|
endif
|
|
|
|
ifdef CFG_DISABLE_DOCS
|
|
$(info cfg: disabling doc build (CFG_DISABLE_DOCS))
|
|
DOCS :=
|
|
endif
|
|
|
|
######################################################################
|
|
# Target-and-rule "utility variables"
|
|
######################################################################
|
|
|
|
ifdef VERBOSE
|
|
Q :=
|
|
E =
|
|
else
|
|
Q := @
|
|
E = echo $(1)
|
|
endif
|
|
|
|
S := $(CFG_SRC_DIR)
|
|
X := $(CFG_EXE_SUFFIX)
|
|
|
|
# Look in doc and src dirs.
|
|
VPATH := $(S)doc $(S)src
|
|
|
|
# "Source" files we generate in builddir along the way.
|
|
GENERATED :=
|
|
|
|
# Delete the built-in rules.
|
|
.SUFFIXES:
|
|
%:: %,v
|
|
%:: RCS/%,v
|
|
%:: RCS/%
|
|
%:: s.%
|
|
%:: SCCS/s.%
|
|
|
|
######################################################################
|
|
# Standard library variables
|
|
######################################################################
|
|
|
|
STDLIB_CRATE := $(S)src/lib/std.rc
|
|
STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
|
|
|
|
######################################################################
|
|
# rustc crate variables
|
|
######################################################################
|
|
|
|
COMPILER_CRATE := $(S)src/comp/rustc.rc
|
|
COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
|
|
rustc.rc *.rs */*.rs */*/*.rs))
|
|
|
|
######################################################################
|
|
# Exports for sub-utilities
|
|
######################################################################
|
|
|
|
export CFG_SRC_DIR
|
|
export CFG_BUILD_DIR
|
|
export CFG_VERSION
|
|
export CFG_LLVM_ROOT
|
|
export CFG_ENABLE_MINGW_CROSS
|
|
|
|
######################################################################
|
|
# Subprograms
|
|
######################################################################
|
|
|
|
LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as$(X)
|
|
|
|
LLC := $(CFG_LLVM_BINDIR)/llc$(X)
|
|
|
|
######################################################################
|
|
# Per-stage targets and runner
|
|
######################################################################
|
|
|
|
define SREQ
|
|
ifdef CFG_DISABLE_SHAREDSTD
|
|
SREQ$(1) = stage$(1)/rustc$(X) \
|
|
stage$(1)/$$(CFG_RUNTIME) \
|
|
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
|
|
stage$(1)/$$(CFG_RUSTLLVM) \
|
|
stage$(1)/lib/glue.o \
|
|
stage$(1)/lib/main.o \
|
|
stage$(1)/lib/$$(CFG_RUNTIME) \
|
|
$$(MKFILES)
|
|
else
|
|
SREQ$(1) = stage$(1)/rustc$(X) \
|
|
stage$(1)/$$(CFG_RUNTIME) \
|
|
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
|
|
stage$(1)/$$(CFG_RUSTLLVM) \
|
|
stage$(1)/lib/glue.o \
|
|
stage$(1)/lib/main.o \
|
|
stage$(1)/lib/$$(CFG_RUNTIME) \
|
|
stage$(1)/lib/$$(CFG_STDLIB) \
|
|
$$(MKFILES)
|
|
endif
|
|
|
|
ifeq ($(1),0)
|
|
# Don't run the the stage0 compiler under valgrind - that ship has sailed
|
|
CFG_VALGRIND_COMPILE$(1) =
|
|
else
|
|
CFG_VALGRIND_COMPILE$(1) = $$(CFG_VALGRIND_COMPILE)
|
|
endif
|
|
|
|
STAGE$(1) := $$(Q)$$(call CFG_RUN_TARG,stage$(1), \
|
|
$$(CFG_VALGRIND_COMPILE$(1)) stage$(1)/rustc$$(X) \
|
|
$$(CFG_RUSTC_FLAGS))
|
|
endef
|
|
|
|
FUZZ := stage1/fuzzer$(X)
|
|
|
|
$(eval $(call SREQ,0))
|
|
$(eval $(call SREQ,1))
|
|
$(eval $(call SREQ,2))
|
|
$(eval $(call SREQ,3))
|
|
|
|
######################################################################
|
|
# Entrypoint rule
|
|
######################################################################
|
|
|
|
ifneq ($(CFG_IN_TRANSITION),)
|
|
|
|
CFG_INFO := $(info cfg:)
|
|
CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
|
|
CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
|
|
CFG_INFO := $(info cfg:)
|
|
|
|
all: $(SREQ0) $(SREQ1) $(GENERATED) $(DOCS) $(FUZZ)
|
|
else
|
|
all: $(SREQ0) $(SREQ1) $(SREQ2) $(SREQ3) $(GENERATED) $(DOCS) $(FUZZ)
|
|
endif
|
|
|
|
|
|
######################################################################
|
|
# Re-configuration
|
|
######################################################################
|
|
|
|
config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
|
|
@$(call E, cfg: reconfiguring)
|
|
$(Q)$(S)configure $(CFG_CONFIGURE_ARGS)
|
|
|
|
|
|
######################################################################
|
|
# Primary-target makefiles
|
|
######################################################################
|
|
|
|
include $(CFG_SRC_DIR)/mk/intrinsics.mk
|
|
include $(CFG_SRC_DIR)/mk/stageN.mk
|
|
include $(CFG_SRC_DIR)/mk/stage0.mk
|
|
include $(CFG_SRC_DIR)/mk/rt.mk
|
|
include $(CFG_SRC_DIR)/mk/rustllvm.mk
|
|
include $(CFG_SRC_DIR)/mk/autodep.mk
|
|
include $(CFG_SRC_DIR)/mk/fuzzer.mk
|
|
include $(CFG_SRC_DIR)/mk/docs.mk
|
|
|
|
|
|
######################################################################
|
|
# Secondary makefiles, conditionalized for speed
|
|
######################################################################
|
|
|
|
ifneq ($(strip $(findstring dist,$(MAKECMDGOALS)) \
|
|
$(findstring check,$(MAKECMDGOALS)) \
|
|
$(findstring test,$(MAKECMDGOALS)) \
|
|
$(findstring tidy,$(MAKECMDGOALS)) \
|
|
$(findstring clean,$(MAKECMDGOALS))),)
|
|
CFG_INFO := $(info cfg: including dist rules)
|
|
include $(CFG_SRC_DIR)/mk/dist.mk
|
|
endif
|
|
|
|
ifneq ($(strip $(findstring snap,$(MAKECMDGOALS)) \
|
|
$(findstring clean,$(MAKECMDGOALS))),)
|
|
CFG_INFO := $(info cfg: including snap rules)
|
|
include $(CFG_SRC_DIR)/mk/snap.mk
|
|
endif
|
|
|
|
ifneq ($(findstring reformat,$(MAKECMDGOALS)),)
|
|
CFG_INFO := $(info cfg: including reformat rules)
|
|
include $(CFG_SRC_DIR)/mk/pp.mk
|
|
endif
|
|
|
|
ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
|
|
$(findstring test,$(MAKECMDGOALS)) \
|
|
$(findstring tidy,$(MAKECMDGOALS))),)
|
|
CFG_INFO := $(info cfg: including test rules)
|
|
include $(CFG_SRC_DIR)/mk/tests.mk
|
|
endif
|
|
|
|
ifneq ($(findstring clean,$(MAKECMDGOALS)),)
|
|
CFG_INFO := $(info cfg: including clean rules)
|
|
include $(CFG_SRC_DIR)/mk/clean.mk
|
|
endif
|