6306c81826
Make tests and perf work again. Correctly get the host triple in rustc. Add some FIXMEs about transitional code that needs to be removed.
299 lines
8.6 KiB
Makefile
299 lines
8.6 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: shell host triple $(CFG_HOST_TRIPLE))
|
|
CFG_INFO := $(info cfg: llvm host triple $(CFG_LLVM_TRIPLE))
|
|
CFG_INFO := $(info cfg: llvm target triples $(CFG_LLVM_TRIPLES))
|
|
|
|
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)/lib/$(CFG_STDLIB)
|
|
endif
|
|
|
|
# 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_HOST_TRIPLE
|
|
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)$(2) = stage$(1)/bin/rustc$(X) \
|
|
stage$(1)/lib/$$(CFG_RUNTIME) \
|
|
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
|
|
stage$(1)/lib/$$(CFG_RUSTLLVM) \
|
|
stage$(1)/lib/rustc/$(2)/$$(CFG_RUNTIME) \
|
|
stage$(1)/lib/rustc/$(2)/$$(CFG_STDLIB) \
|
|
stage$(1)/lib/rustc/$(2)/intrinsics.bc \
|
|
stage$(1)/lib/rustc/$(2)/main.o \
|
|
$$(MKFILES)
|
|
else
|
|
SREQ$(1)$(2) = stage$(1)/bin/rustc$(X) \
|
|
stage$(1)/lib/$$(CFG_RUNTIME) \
|
|
$$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
|
|
stage$(1)/lib/$$(CFG_RUSTLLVM) \
|
|
stage$(1)/lib/rustc/$(2)/$$(CFG_RUNTIME) \
|
|
stage$(1)/lib/rustc/$(2)/$$(CFG_STDLIB) \
|
|
stage$(1)/lib/rustc/$(2)/intrinsics.bc \
|
|
stage$(1)/lib/rustc/$(2)/main.o \
|
|
$$(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) stage$(1)/bin/rustc$$(X) \
|
|
$$(CFG_RUSTC_FLAGS) --target=$(2))
|
|
|
|
PERF_STAGE$(1) := $$(Q)$$(call CFG_RUN_TARG,stage$(1), \
|
|
$$(CFG_PERF_TOOL) stage$(1)/bin/rustc$$(X) \
|
|
$$(CFG_RUSTC_FLAGS) --target=$(2))
|
|
|
|
endef
|
|
|
|
FUZZ := stage1/bin/fuzzer$(X)
|
|
|
|
$(foreach target,$(CFG_TARGET_TRIPLES), \
|
|
$(eval $(call SREQ,0,$(target))) \
|
|
$(eval $(call SREQ,1,$(target))) \
|
|
$(eval $(call SREQ,2,$(target))) \
|
|
$(eval $(call SREQ,3,$(target))))
|
|
|
|
######################################################################
|
|
# 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 perf,$(MAKECMDGOALS)) \
|
|
$(findstring tidy,$(MAKECMDGOALS))),)
|
|
CFG_INFO := $(info cfg: including test rules)
|
|
include $(CFG_SRC_DIR)/mk/tests.mk
|
|
endif
|
|
|
|
ifneq ($(findstring perf,$(MAKECMDGOALS)),)
|
|
CFG_INFO := $(info cfg: including perf rules)
|
|
include $(CFG_SRC_DIR)/mk/perf.mk
|
|
endif
|
|
|
|
ifneq ($(findstring clean,$(MAKECMDGOALS)),)
|
|
CFG_INFO := $(info cfg: including clean rules)
|
|
include $(CFG_SRC_DIR)/mk/clean.mk
|
|
endif
|