###################################################################### # Residual auto-configuration ###################################################################### include config.mk MKFILES := Makefile config.mk $(wildcard $(CFG_SRC_DIR)/mk/*.mk) ifneq ($(MAKE_RESTARTS),) CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS)) endif CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE)) CFG_BOOT_FLAGS := $(BOOT_FLAGS) 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 NO_TYPESTATE CFG_RUSTC_FLAGS += --no-typestate endif # platform-specific auto-configuration include $(CFG_SRC_DIR)/mk/platform.mk CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt) CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm) CFG_STDLIB :=$(call CFG_LIB_NAME,std) ifdef CFG_OCAMLC_OPT $(info cfg: have ocaml native compiler) OPT=.opt else $(info cfg: have only ocaml bytecode compiler) endif ifdef CFG_DISABLE_VALGRIND $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND)) 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 # Compilers we build, we now know how to run. STAGE0 := $(Q)$(call CFG_RUN_TARG,stage0,\ stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1) STAGE1 := $(Q)$(call CFG_RUN_TARG,stage1, \ stage1/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage2) STAGE2 := $(Q)$(call CFG_RUN_TARG,stage2, \ stage2/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage3) # "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)) ###################################################################### # Main target dependency variables ###################################################################### LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM) BREQ := boot/rustboot$(X) stage0/$(CFG_STDLIB) SREQ0 := stage0/rustc$(X) $(LREQ) stage1/glue.o stage1/$(CFG_STDLIB) SREQ1 := stage1/rustc$(X) $(LREQ) stage2/glue.o stage2/$(CFG_STDLIB) SREQ2 := stage2/rustc$(X) $(LREQ) stage3/glue.o stage3/$(CFG_STDLIB) ###################################################################### # Single-target rules ###################################################################### all: boot/rustboot$(X) \ rt/$(CFG_RUNTIME) \ rustllvm/$(CFG_RUSTLLVM) \ stage0/$(CFG_STDLIB) \ stage0/rustc$(X) \ $(GENERATED) \ $(DOCS) \ stage1/$(CFG_STDLIB) \ stage1/glue.o # stage1/rustc$(X) \ # stage2/$(CFG_STDLIB) \ # stage3/$(CFG_STDLIB) \ # stage2/glue.o \ # stage3/glue.o \ # stage2/rustc$(X) \ # stage3/rustc$(X) \ ###################################################################### # Re-configuration ###################################################################### config.mk: $(S)configure $(S)Makefile.in @$(call E, cfg: reconfiguring) $(S)configure $(CFG_CONFIGURE_ARGS) ###################################################################### # Additional makefiles ###################################################################### include $(CFG_SRC_DIR)/mk/boot.mk include $(CFG_SRC_DIR)/mk/stage0.mk include $(CFG_SRC_DIR)/mk/stage1.mk include $(CFG_SRC_DIR)/mk/stage2.mk include $(CFG_SRC_DIR)/mk/rt.mk include $(CFG_SRC_DIR)/mk/rustllvm.mk include $(CFG_SRC_DIR)/mk/docs.mk include $(CFG_SRC_DIR)/mk/tests.mk include $(CFG_SRC_DIR)/mk/dist.mk include $(CFG_SRC_DIR)/mk/clean.mk include $(CFG_SRC_DIR)/mk/autodep.mk