rust/Makefile.in
Brian Anderson 6306c81826 Fix a variety of things in the makefiles
Make tests and perf work again. Correctly get the host triple in rustc. Add
some FIXMEs about transitional code that needs to be removed.
2011-09-29 22:58:33 -07:00

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