1 ######################################################################
2 # Residual auto-configuration
3 ######################################################################
6 MKFILES := Makefile config.mk $(wildcard $(CFG_SRC_DIR)/mk/*.mk)
7 MKFILES += $(CFG_SRC_DIR)/src/rt/libuv/Makefile
8 MKFILES += $(wildcard $(CFG_SRC_DIR)/src/rt/libuv/*.mk)
10 ifneq ($(MAKE_RESTARTS),)
11 CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
14 CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))
16 ifdef CFG_DISABLE_OPTIMIZE
17 $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
24 CFG_RUSTC_FLAGS += --save-temps
27 CFG_RUSTC_FLAGS += --time-passes
29 ifdef TIME_LLVM_PASSES
30 CFG_RUSTC_FLAGS += --time-llvm-passes
33 CFG_RUSTC_FLAGS += --no-typestate
39 # platform-specific auto-configuration
40 include $(CFG_SRC_DIR)/mk/platform.mk
42 # Run the stage1/2 compilers under valgrind
43 ifdef VALGRIND_COMPILE
44 CFG_VALGRIND_COMPILE :=$(CFG_VALGRIND)
46 CFG_VALGRIND_COMPILE :=
49 CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
50 CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
51 CFG_STDLIB :=$(call CFG_LIB_NAME,std)
52 CFG_LIBRUSTC :=$(call CFG_LIB_NAME,rustc)
54 ifdef CFG_DISABLE_SHAREDSTD
55 CFG_STDLIB_DEFAULT = $(1)/lib/libstd.rlib
57 CFG_STDLIB_DEFAULT = $(2)/$(CFG_STDLIB)
60 # version-string calculation
61 CFG_GIT_DIR := $(CFG_SRC_DIR).git
62 CFG_VERSION = prerelease
63 ifneq ($(wildcard $(CFG_GIT)),)
64 ifneq ($(wildcard $(CFG_GIT_DIR)),)
65 CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
66 --pretty=format:'(%h %ci)')
70 ifdef CFG_DISABLE_VALGRIND
71 $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
74 ifdef CFG_BAD_VALGRIND
75 $(info cfg: disabling valgrind due to its unreliability on this platform)
80 ifeq ($(CFG_MAKEINFO),)
81 $(info cfg: no makeinfo found, omitting doc/rust.html)
86 ifeq ($(CFG_TEXI2PDF),)
87 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
90 $(info cfg: no tex found, omitting doc/rust.pdf)
96 ifdef CFG_DISABLE_DOCS
97 $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
101 ######################################################################
102 # Target-and-rule "utility variables"
103 ######################################################################
114 X := $(CFG_EXE_SUFFIX)
116 # Look in doc and src dirs.
117 VPATH := $(S)doc $(S)src
119 # "Source" files we generate in builddir along the way.
122 # Delete the built-in rules.
130 ######################################################################
131 # Standard library variables
132 ######################################################################
134 STDLIB_CRATE := $(S)src/lib/std.rc
135 STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
137 ######################################################################
138 # rustc crate variables
139 ######################################################################
141 COMPILER_CRATE := $(S)src/comp/rustc.rc
142 COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
143 rustc.rc *.rs */*.rs */*/*.rs))
145 ######################################################################
146 # Exports for sub-utilities
147 ######################################################################
153 export CFG_ENABLE_MINGW_CROSS
155 ######################################################################
157 ######################################################################
159 LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as$(X)
161 LLC := $(CFG_LLVM_BINDIR)/llc$(X)
163 ######################################################################
164 # Per-stage targets and runner
165 ######################################################################
168 ifdef CFG_DISABLE_SHAREDSTD
169 SREQ$(1) = stage$(1)/rustc$(X) \
170 stage$(1)/$$(CFG_RUNTIME) \
171 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
172 stage$(1)/$$(CFG_RUSTLLVM) \
173 stage$(1)/lib/glue.o \
174 stage$(1)/lib/main.o \
175 stage$(1)/lib/$$(CFG_RUNTIME) \
178 SREQ$(1) = stage$(1)/rustc$(X) \
179 stage$(1)/$$(CFG_RUNTIME) \
180 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
181 stage$(1)/$$(CFG_RUSTLLVM) \
182 stage$(1)/lib/glue.o \
183 stage$(1)/lib/main.o \
184 stage$(1)/lib/$$(CFG_RUNTIME) \
185 stage$(1)/lib/$$(CFG_STDLIB) \
190 # Don't run the the stage0 compiler under valgrind - that ship has sailed
191 CFG_VALGRIND_COMPILE$(1) =
193 CFG_VALGRIND_COMPILE$(1) = $$(CFG_VALGRIND_COMPILE)
196 STAGE$(1) := $$(Q)$$(call CFG_RUN_TARG,stage$(1), \
197 $$(CFG_VALGRIND_COMPILE$(1)) stage$(1)/rustc$$(X) \
201 FUZZ := stage1/fuzzer$(X)
203 $(eval $(call SREQ,0))
204 $(eval $(call SREQ,1))
205 $(eval $(call SREQ,2))
206 $(eval $(call SREQ,3))
208 ######################################################################
210 ######################################################################
212 ifneq ($(CFG_IN_TRANSITION),)
214 CFG_INFO := $(info cfg:)
215 CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
216 CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
217 CFG_INFO := $(info cfg:)
219 all: $(SREQ0) $(SREQ1) $(GENERATED) $(DOCS) $(FUZZ)
221 all: $(SREQ0) $(SREQ1) $(SREQ2) $(SREQ3) $(GENERATED) $(DOCS) $(FUZZ)
225 ######################################################################
227 ######################################################################
229 config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
230 @$(call E, cfg: reconfiguring)
231 $(Q)$(S)configure $(CFG_CONFIGURE_ARGS)
234 ######################################################################
235 # Primary-target makefiles
236 ######################################################################
238 include $(CFG_SRC_DIR)/mk/intrinsics.mk
239 include $(CFG_SRC_DIR)/mk/stageN.mk
240 include $(CFG_SRC_DIR)/mk/stage0.mk
241 include $(CFG_SRC_DIR)/mk/rt.mk
242 include $(CFG_SRC_DIR)/mk/rustllvm.mk
243 include $(CFG_SRC_DIR)/mk/autodep.mk
244 include $(CFG_SRC_DIR)/mk/fuzzer.mk
245 include $(CFG_SRC_DIR)/mk/docs.mk
248 ######################################################################
249 # Secondary makefiles, conditionalized for speed
250 ######################################################################
252 ifneq ($(strip $(findstring dist,$(MAKECMDGOALS)) \
253 $(findstring check,$(MAKECMDGOALS)) \
254 $(findstring test,$(MAKECMDGOALS)) \
255 $(findstring tidy,$(MAKECMDGOALS)) \
256 $(findstring clean,$(MAKECMDGOALS))),)
257 CFG_INFO := $(info cfg: including dist rules)
258 include $(CFG_SRC_DIR)/mk/dist.mk
261 ifneq ($(strip $(findstring snap,$(MAKECMDGOALS)) \
262 $(findstring clean,$(MAKECMDGOALS))),)
263 CFG_INFO := $(info cfg: including snap rules)
264 include $(CFG_SRC_DIR)/mk/snap.mk
267 ifneq ($(findstring reformat,$(MAKECMDGOALS)),)
268 CFG_INFO := $(info cfg: including reformat rules)
269 include $(CFG_SRC_DIR)/mk/pp.mk
272 ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
273 $(findstring test,$(MAKECMDGOALS)) \
274 $(findstring tidy,$(MAKECMDGOALS))),)
275 CFG_INFO := $(info cfg: including test rules)
276 include $(CFG_SRC_DIR)/mk/tests.mk
279 ifneq ($(findstring clean,$(MAKECMDGOALS)),)
280 CFG_INFO := $(info cfg: including clean rules)
281 include $(CFG_SRC_DIR)/mk/clean.mk