blob: e74b4cb29e5b2d42f593521c6b1a1d5b682729d5 [file] [log] [blame]
Graydon Hoare9c6e7e62011-03-16 16:17:321######################################################################
2# Residual auto-configuration
3######################################################################
4
5include config.mk
Graydon Hoare40624e32011-05-01 20:18:526MKFILES := Makefile config.mk $(wildcard $(CFG_SRC_DIR)/mk/*.mk)
Graydon Hoare7da64ae2011-08-05 01:26:547MKFILES += $(CFG_SRC_DIR)/src/rt/libuv/Makefile
8MKFILES += $(wildcard $(CFG_SRC_DIR)/src/rt/libuv/*.mk)
Graydon Hoare9c6e7e62011-03-16 16:17:329
10ifneq ($(MAKE_RESTARTS),)
11CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
12endif
13
Graydon Hoare13215802011-09-21 18:24:5914CFG_INFO := $(info cfg: shell host triple $(CFG_HOST_TRIPLE))
15CFG_INFO := $(info cfg: llvm host triple $(CFG_LLVM_TRIPLE))
Graydon Hoare9c6e7e62011-03-16 16:17:3216
Graydon Hoarecae703c2011-04-08 22:44:4117ifdef CFG_DISABLE_OPTIMIZE
Graydon Hoare19ebc0f2011-04-08 23:29:1918 $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
Patrick Waltonc52fb522011-04-29 17:23:0719 CFG_RUSTC_FLAGS :=
Graydon Hoarecae703c2011-04-08 22:44:4120else
Patrick Waltonc52fb522011-04-29 17:23:0721 CFG_RUSTC_FLAGS := -O
Graydon Hoarecae703c2011-04-08 22:44:4122endif
Graydon Hoare4c2245d2011-03-18 06:51:4523
Patrick Walton3f77e7d2011-04-25 21:20:2824ifdef SAVE_TEMPS
Marijn Haverbeke6b11f6c2011-04-26 18:32:0825 CFG_RUSTC_FLAGS += --save-temps
Patrick Walton3f77e7d2011-04-25 21:20:2826endif
Patrick Walton648c4ae2011-04-29 18:55:3227ifdef TIME_PASSES
28 CFG_RUSTC_FLAGS += --time-passes
29endif
Brian Anderson27522842011-06-19 00:26:4130ifdef TIME_LLVM_PASSES
31 CFG_RUSTC_FLAGS += --time-llvm-passes
32endif
Patrick Walton9aeb6792011-04-29 19:16:1433ifdef NO_TYPESTATE
34 CFG_RUSTC_FLAGS += --no-typestate
35endif
Patrick Walton404db4d2011-05-11 00:48:4936ifdef DEBUG
37 CFG_RUSTC_FLAGS += -g
38endif
Patrick Walton3f77e7d2011-04-25 21:20:2839
Graydon Hoare40624e32011-05-01 20:18:5240# platform-specific auto-configuration
41include $(CFG_SRC_DIR)/mk/platform.mk
Graydon Hoare4c2245d2011-03-18 06:51:4542
Brian Andersoncad8c732011-05-14 03:20:3443# Run the stage1/2 compilers under valgrind
44ifdef VALGRIND_COMPILE
45 CFG_VALGRIND_COMPILE :=$(CFG_VALGRIND)
46else
47 CFG_VALGRIND_COMPILE :=
48endif
49
Graydon Hoare4c2245d2011-03-18 06:51:4550CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
Graydon Hoare7ac885e2011-03-22 06:06:4251CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
Graydon Hoare4c2245d2011-03-18 06:51:4552CFG_STDLIB :=$(call CFG_LIB_NAME,std)
Brian Anderson5fb9cad2011-07-01 06:16:0153CFG_LIBRUSTC :=$(call CFG_LIB_NAME,rustc)
Graydon Hoare4c2245d2011-03-18 06:51:4554
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3655ifdef CFG_DISABLE_SHAREDSTD
Brian Anderson6fc33162011-07-22 06:54:4856 CFG_STDLIB_DEFAULT = $(1)/lib/libstd.rlib
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3657else
Brian Anderson6fc33162011-07-22 06:54:4858 CFG_STDLIB_DEFAULT = $(2)/$(CFG_STDLIB)
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3659endif
60
Graydon Hoare1e03f002011-05-06 18:21:5161# version-string calculation
62CFG_GIT_DIR := $(CFG_SRC_DIR).git
Graydon Hoare79ba3152011-06-25 19:23:2763CFG_VERSION = prerelease
Graydon Hoare0a8f9a32011-06-13 21:45:2664ifneq ($(wildcard $(CFG_GIT)),)
Graydon Hoare1e03f002011-05-06 18:21:5165ifneq ($(wildcard $(CFG_GIT_DIR)),)
66 CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
67 --pretty=format:'(%h %ci)')
68endif
Graydon Hoare0a8f9a32011-06-13 21:45:2669endif
Graydon Hoare1e03f002011-05-06 18:21:5170
Graydon Hoare94731fa2011-03-30 04:45:0971ifdef CFG_DISABLE_VALGRIND
72 $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
Graydon Hoare4c2245d2011-03-18 06:51:4573 CFG_VALGRIND :=
Graydon Hoare9c6e7e62011-03-16 16:17:3274endif
Patrick Walton518e2d22011-05-06 01:11:4075ifdef CFG_BAD_VALGRIND
76 $(info cfg: disabling valgrind due to its unreliability on this platform)
77 CFG_VALGRIND :=
78endif
Graydon Hoare9c6e7e62011-03-16 16:17:3279
Graydon Hoare28a4e772011-03-23 17:37:3580DOCS :=
81ifeq ($(CFG_MAKEINFO),)
82 $(info cfg: no makeinfo found, omitting doc/rust.html)
83else
84 DOCS += doc/rust.html
85endif
86
87ifeq ($(CFG_TEXI2PDF),)
88 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
89else
Graydon Hoaref7407472011-03-23 20:31:5190 ifeq ($(CFG_TEX),)
91 $(info cfg: no tex found, omitting doc/rust.pdf)
92 else
93 DOCS += doc/rust.pdf
94 endif
Graydon Hoare28a4e772011-03-23 17:37:3595endif
96
Graydon Hoare94731fa2011-03-30 04:45:0997ifdef CFG_DISABLE_DOCS
98 $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
99 DOCS :=
100endif
Graydon Hoare28a4e772011-03-23 17:37:35101
Graydon Hoare4c2245d2011-03-18 06:51:45102######################################################################
103# Target-and-rule "utility variables"
104######################################################################
105
106ifdef VERBOSE
107 Q :=
108 E =
109else
110 Q := @
111 E = echo $(1)
112endif
113
Graydon Hoare4c2245d2011-03-18 06:51:45114S := $(CFG_SRC_DIR)
115X := $(CFG_EXE_SUFFIX)
116
117# Look in doc and src dirs.
118VPATH := $(S)doc $(S)src
119
Graydon Hoare4c2245d2011-03-18 06:51:45120# "Source" files we generate in builddir along the way.
Graydon Hoare40624e32011-05-01 20:18:52121GENERATED :=
Graydon Hoare4c2245d2011-03-18 06:51:45122
123# Delete the built-in rules.
124.SUFFIXES:
125%:: %,v
126%:: RCS/%,v
127%:: RCS/%
128%:: s.%
129%:: SCCS/s.%
Graydon Hoare9c6e7e62011-03-16 16:17:32130
Graydon Hoare4c2245d2011-03-18 06:51:45131######################################################################
132# Standard library variables
133######################################################################
134
Graydon Hoare65974392011-03-21 20:42:29135STDLIB_CRATE := $(S)src/lib/std.rc
Graydon Hoare4c2245d2011-03-18 06:51:45136STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
137
138######################################################################
139# rustc crate variables
140######################################################################
141
Graydon Hoare65974392011-03-21 20:42:29142COMPILER_CRATE := $(S)src/comp/rustc.rc
Graydon Hoare874a7bf2011-03-19 00:30:06143COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
Tim Chevalier60399ed2011-05-18 22:34:52144 rustc.rc *.rs */*.rs */*/*.rs))
Graydon Hoare4c2245d2011-03-18 06:51:45145
146######################################################################
Graydon Hoared987b492011-05-03 06:37:52147# Exports for sub-utilities
148######################################################################
149
150export CFG_SRC_DIR
Graydon Hoaread954fc2011-07-23 19:26:47151export CFG_BUILD_DIR
Graydon Hoare1e03f002011-05-06 18:21:51152export CFG_VERSION
Graydon Hoare6a4a85f2011-05-18 19:00:26153export CFG_LLVM_ROOT
Graydon Hoare0dc2aa32011-06-28 18:18:25154export CFG_ENABLE_MINGW_CROSS
Graydon Hoared987b492011-05-03 06:37:52155
Patrick Walton04f966f2011-05-05 01:28:30156######################################################################
157# Subprograms
158######################################################################
159
Graydon Hoare8fc51df2011-06-27 18:53:04160LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as$(X)
Patrick Walton04f966f2011-05-05 01:28:30161
Graydon Hoare8fc51df2011-06-27 18:53:04162LLC := $(CFG_LLVM_BINDIR)/llc$(X)
Graydon Hoared987b492011-05-03 06:37:52163
164######################################################################
Graydon Hoarefafb42e2011-07-15 23:12:41165# Per-stage targets and runner
166######################################################################
167
168define SREQ
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36169ifdef CFG_DISABLE_SHAREDSTD
Graydon Hoarefafb42e2011-07-15 23:12:41170SREQ$(1) = stage$(1)/rustc$(X) \
171 stage$(1)/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21172 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36173 stage$(1)/$$(CFG_RUSTLLVM) \
174 stage$(1)/lib/glue.o \
175 stage$(1)/lib/main.o \
176 stage$(1)/lib/$$(CFG_RUNTIME) \
177 $$(MKFILES)
178else
179SREQ$(1) = stage$(1)/rustc$(X) \
180 stage$(1)/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21181 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
Graydon Hoarefafb42e2011-07-15 23:12:41182 stage$(1)/$$(CFG_RUSTLLVM) \
183 stage$(1)/lib/glue.o \
184 stage$(1)/lib/main.o \
185 stage$(1)/lib/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21186 stage$(1)/lib/$$(CFG_STDLIB) \
Graydon Hoarefafb42e2011-07-15 23:12:41187 $$(MKFILES)
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36188endif
Graydon Hoarefafb42e2011-07-15 23:12:41189
Brian Andersone3d3aaa2011-08-26 18:11:49190ifeq ($(1),0)
191# Don't run the the stage0 compiler under valgrind - that ship has sailed
192CFG_VALGRIND_COMPILE$(1) =
193else
194CFG_VALGRIND_COMPILE$(1) = $$(CFG_VALGRIND_COMPILE)
195endif
196
Rafael Ávila de Espíndolaea371a32011-07-21 19:10:43197STAGE$(1) := $$(Q)$$(call CFG_RUN_TARG,stage$(1), \
Brian Andersone3d3aaa2011-08-26 18:11:49198 $$(CFG_VALGRIND_COMPILE$(1)) stage$(1)/rustc$$(X) \
Graydon Hoarefafb42e2011-07-15 23:12:41199 $$(CFG_RUSTC_FLAGS))
200endef
201
Brian Anderson2cb3a792011-07-20 03:03:13202FUZZ := stage1/fuzzer$(X)
Graydon Hoare46b0aa52011-07-18 22:57:12203
Graydon Hoarefafb42e2011-07-15 23:12:41204$(eval $(call SREQ,0))
205$(eval $(call SREQ,1))
206$(eval $(call SREQ,2))
207$(eval $(call SREQ,3))
208
209######################################################################
210# Entrypoint rule
Graydon Hoare4c2245d2011-03-18 06:51:45211######################################################################
212
Graydon Hoareae784df2011-05-14 00:00:43213ifneq ($(CFG_IN_TRANSITION),)
214
Graydon Hoare9ac29482011-05-16 22:14:58215CFG_INFO := $(info cfg:)
Graydon Hoareae784df2011-05-14 00:00:43216CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
217CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
Graydon Hoare9ac29482011-05-16 22:14:58218CFG_INFO := $(info cfg:)
Graydon Hoareae784df2011-05-14 00:00:43219
Marijn Haverbeke863d1212011-07-27 13:44:21220all: $(SREQ0) $(SREQ1) $(GENERATED) $(DOCS) $(FUZZ)
Graydon Hoareae784df2011-05-14 00:00:43221else
Graydon Hoare46b0aa52011-07-18 22:57:12222all: $(SREQ0) $(SREQ1) $(SREQ2) $(SREQ3) $(GENERATED) $(DOCS) $(FUZZ)
Graydon Hoareae784df2011-05-14 00:00:43223endif
224
Graydon Hoare10f33602011-03-25 17:29:45225
226######################################################################
227# Re-configuration
228######################################################################
229
Graydon Hoareae784df2011-05-14 00:00:43230config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
Graydon Hoare10f33602011-03-25 17:29:45231 @$(call E, cfg: reconfiguring)
Graydon Hoaredf8161d2011-06-30 20:41:20232 $(Q)$(S)configure $(CFG_CONFIGURE_ARGS)
Graydon Hoare10f33602011-03-25 17:29:45233
234
Graydon Hoaree961f532011-03-21 18:23:19235######################################################################
Graydon Hoare79ba3152011-06-25 19:23:27236# Primary-target makefiles
Graydon Hoaree961f532011-03-21 18:23:19237######################################################################
238
Patrick Walton04f966f2011-05-05 01:28:30239include $(CFG_SRC_DIR)/mk/intrinsics.mk
Graydon Hoarefafb42e2011-07-15 23:12:41240include $(CFG_SRC_DIR)/mk/stageN.mk
Michael Sullivanb01ecb12011-07-21 18:58:01241include $(CFG_SRC_DIR)/mk/stage0.mk
Graydon Hoare40624e32011-05-01 20:18:52242include $(CFG_SRC_DIR)/mk/rt.mk
243include $(CFG_SRC_DIR)/mk/rustllvm.mk
Graydon Hoare40624e32011-05-01 20:18:52244include $(CFG_SRC_DIR)/mk/autodep.mk
Brian Andersona5ea56c2011-05-06 00:56:02245include $(CFG_SRC_DIR)/mk/fuzzer.mk
Graydon Hoare79ba3152011-06-25 19:23:27246include $(CFG_SRC_DIR)/mk/docs.mk
247
248
249######################################################################
250# Secondary makefiles, conditionalized for speed
251######################################################################
252
Graydon Hoaredf8161d2011-06-30 20:41:20253ifneq ($(strip $(findstring dist,$(MAKECMDGOALS)) \
254 $(findstring check,$(MAKECMDGOALS)) \
255 $(findstring test,$(MAKECMDGOALS)) \
Graydon Hoare39151f22011-07-13 22:44:09256 $(findstring tidy,$(MAKECMDGOALS)) \
Graydon Hoaredf8161d2011-06-30 20:41:20257 $(findstring clean,$(MAKECMDGOALS))),)
258 CFG_INFO := $(info cfg: including dist rules)
Graydon Hoare79ba3152011-06-25 19:23:27259 include $(CFG_SRC_DIR)/mk/dist.mk
260endif
261
Graydon Hoaredf8161d2011-06-30 20:41:20262ifneq ($(strip $(findstring snap,$(MAKECMDGOALS)) \
263 $(findstring clean,$(MAKECMDGOALS))),)
264 CFG_INFO := $(info cfg: including snap rules)
Graydon Hoare79ba3152011-06-25 19:23:27265 include $(CFG_SRC_DIR)/mk/snap.mk
266endif
267
268ifneq ($(findstring reformat,$(MAKECMDGOALS)),)
Graydon Hoaredf8161d2011-06-30 20:41:20269 CFG_INFO := $(info cfg: including reformat rules)
Graydon Hoare79ba3152011-06-25 19:23:27270 include $(CFG_SRC_DIR)/mk/pp.mk
271endif
272
Graydon Hoaredf8161d2011-06-30 20:41:20273ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
274 $(findstring test,$(MAKECMDGOALS)) \
Graydon Hoared5b2d622011-09-13 22:06:21275 $(findstring perf,$(MAKECMDGOALS)) \
Graydon Hoaredf8161d2011-06-30 20:41:20276 $(findstring tidy,$(MAKECMDGOALS))),)
277 CFG_INFO := $(info cfg: including test rules)
Graydon Hoare79ba3152011-06-25 19:23:27278 include $(CFG_SRC_DIR)/mk/tests.mk
Graydon Hoare79ba3152011-06-25 19:23:27279endif
280
Graydon Hoared5b2d622011-09-13 22:06:21281ifneq ($(findstring perf,$(MAKECMDGOALS)),)
282 CFG_INFO := $(info cfg: including perf rules)
283 include $(CFG_SRC_DIR)/mk/perf.mk
284endif
285
Graydon Hoare79ba3152011-06-25 19:23:27286ifneq ($(findstring clean,$(MAKECMDGOALS)),)
Graydon Hoaredf8161d2011-06-30 20:41:20287 CFG_INFO := $(info cfg: including clean rules)
Graydon Hoare79ba3152011-06-25 19:23:27288 include $(CFG_SRC_DIR)/mk/clean.mk
Michael Sullivanb01ecb12011-07-21 18:58:01289endif