blob: bdb55e1c574bbc336208c689f736137d13026536 [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
14CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))
15
Graydon Hoarecae703c2011-04-08 22:44:4116ifdef CFG_DISABLE_OPTIMIZE
Graydon Hoare19ebc0f2011-04-08 23:29:1917 $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
Patrick Waltonc52fb522011-04-29 17:23:0718 CFG_RUSTC_FLAGS :=
Graydon Hoarecae703c2011-04-08 22:44:4119else
Patrick Waltonc52fb522011-04-29 17:23:0720 CFG_RUSTC_FLAGS := -O
Graydon Hoarecae703c2011-04-08 22:44:4121endif
Graydon Hoare4c2245d2011-03-18 06:51:4522
Patrick Walton3f77e7d2011-04-25 21:20:2823ifdef SAVE_TEMPS
Marijn Haverbeke6b11f6c2011-04-26 18:32:0824 CFG_RUSTC_FLAGS += --save-temps
Patrick Walton3f77e7d2011-04-25 21:20:2825endif
Patrick Walton648c4ae2011-04-29 18:55:3226ifdef TIME_PASSES
27 CFG_RUSTC_FLAGS += --time-passes
28endif
Brian Anderson27522842011-06-19 00:26:4129ifdef TIME_LLVM_PASSES
30 CFG_RUSTC_FLAGS += --time-llvm-passes
31endif
Patrick Walton9aeb6792011-04-29 19:16:1432ifdef NO_TYPESTATE
33 CFG_RUSTC_FLAGS += --no-typestate
34endif
Patrick Walton404db4d2011-05-11 00:48:4935ifdef DEBUG
36 CFG_RUSTC_FLAGS += -g
37endif
Patrick Walton3f77e7d2011-04-25 21:20:2838
Graydon Hoare40624e32011-05-01 20:18:5239# platform-specific auto-configuration
40include $(CFG_SRC_DIR)/mk/platform.mk
Graydon Hoare4c2245d2011-03-18 06:51:4541
Brian Andersoncad8c732011-05-14 03:20:3442# Run the stage1/2 compilers under valgrind
43ifdef VALGRIND_COMPILE
44 CFG_VALGRIND_COMPILE :=$(CFG_VALGRIND)
45else
46 CFG_VALGRIND_COMPILE :=
47endif
48
Graydon Hoare4c2245d2011-03-18 06:51:4549CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
Graydon Hoare7ac885e2011-03-22 06:06:4250CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
Graydon Hoare4c2245d2011-03-18 06:51:4551CFG_STDLIB :=$(call CFG_LIB_NAME,std)
Brian Anderson5fb9cad2011-07-01 06:16:0152CFG_LIBRUSTC :=$(call CFG_LIB_NAME,rustc)
Graydon Hoare4c2245d2011-03-18 06:51:4553
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3654ifdef CFG_DISABLE_SHAREDSTD
Brian Anderson6fc33162011-07-22 06:54:4855 CFG_STDLIB_DEFAULT = $(1)/lib/libstd.rlib
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3656else
Brian Anderson6fc33162011-07-22 06:54:4857 CFG_STDLIB_DEFAULT = $(2)/$(CFG_STDLIB)
Rafael Ávila de Espíndola88894b62011-07-20 20:02:3658endif
59
Graydon Hoare1e03f002011-05-06 18:21:5160# version-string calculation
61CFG_GIT_DIR := $(CFG_SRC_DIR).git
Graydon Hoare79ba3152011-06-25 19:23:2762CFG_VERSION = prerelease
Graydon Hoare0a8f9a32011-06-13 21:45:2663ifneq ($(wildcard $(CFG_GIT)),)
Graydon Hoare1e03f002011-05-06 18:21:5164ifneq ($(wildcard $(CFG_GIT_DIR)),)
65 CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
66 --pretty=format:'(%h %ci)')
67endif
Graydon Hoare0a8f9a32011-06-13 21:45:2668endif
Graydon Hoare1e03f002011-05-06 18:21:5169
Graydon Hoare94731fa2011-03-30 04:45:0970ifdef CFG_DISABLE_VALGRIND
71 $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
Graydon Hoare4c2245d2011-03-18 06:51:4572 CFG_VALGRIND :=
Graydon Hoare9c6e7e62011-03-16 16:17:3273endif
Patrick Walton518e2d22011-05-06 01:11:4074ifdef CFG_BAD_VALGRIND
75 $(info cfg: disabling valgrind due to its unreliability on this platform)
76 CFG_VALGRIND :=
77endif
Graydon Hoare9c6e7e62011-03-16 16:17:3278
Graydon Hoare28a4e772011-03-23 17:37:3579DOCS :=
80ifeq ($(CFG_MAKEINFO),)
81 $(info cfg: no makeinfo found, omitting doc/rust.html)
82else
83 DOCS += doc/rust.html
84endif
85
86ifeq ($(CFG_TEXI2PDF),)
87 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
88else
Graydon Hoaref7407472011-03-23 20:31:5189 ifeq ($(CFG_TEX),)
90 $(info cfg: no tex found, omitting doc/rust.pdf)
91 else
92 DOCS += doc/rust.pdf
93 endif
Graydon Hoare28a4e772011-03-23 17:37:3594endif
95
Graydon Hoare94731fa2011-03-30 04:45:0996ifdef CFG_DISABLE_DOCS
97 $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
98 DOCS :=
99endif
Graydon Hoare28a4e772011-03-23 17:37:35100
Graydon Hoare4c2245d2011-03-18 06:51:45101######################################################################
102# Target-and-rule "utility variables"
103######################################################################
104
105ifdef VERBOSE
106 Q :=
107 E =
108else
109 Q := @
110 E = echo $(1)
111endif
112
Graydon Hoare4c2245d2011-03-18 06:51:45113S := $(CFG_SRC_DIR)
114X := $(CFG_EXE_SUFFIX)
115
116# Look in doc and src dirs.
117VPATH := $(S)doc $(S)src
118
Graydon Hoare4c2245d2011-03-18 06:51:45119# "Source" files we generate in builddir along the way.
Graydon Hoare40624e32011-05-01 20:18:52120GENERATED :=
Graydon Hoare4c2245d2011-03-18 06:51:45121
122# Delete the built-in rules.
123.SUFFIXES:
124%:: %,v
125%:: RCS/%,v
126%:: RCS/%
127%:: s.%
128%:: SCCS/s.%
Graydon Hoare9c6e7e62011-03-16 16:17:32129
Graydon Hoare4c2245d2011-03-18 06:51:45130######################################################################
131# Standard library variables
132######################################################################
133
Graydon Hoare65974392011-03-21 20:42:29134STDLIB_CRATE := $(S)src/lib/std.rc
Graydon Hoare4c2245d2011-03-18 06:51:45135STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
136
137######################################################################
138# rustc crate variables
139######################################################################
140
Graydon Hoare65974392011-03-21 20:42:29141COMPILER_CRATE := $(S)src/comp/rustc.rc
Graydon Hoare874a7bf2011-03-19 00:30:06142COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
Tim Chevalier60399ed2011-05-18 22:34:52143 rustc.rc *.rs */*.rs */*/*.rs))
Graydon Hoare4c2245d2011-03-18 06:51:45144
145######################################################################
Graydon Hoared987b492011-05-03 06:37:52146# Exports for sub-utilities
147######################################################################
148
149export CFG_SRC_DIR
Graydon Hoaread954fc2011-07-23 19:26:47150export CFG_BUILD_DIR
Graydon Hoare1e03f002011-05-06 18:21:51151export CFG_VERSION
Graydon Hoare6a4a85f2011-05-18 19:00:26152export CFG_LLVM_ROOT
Graydon Hoare0dc2aa32011-06-28 18:18:25153export CFG_ENABLE_MINGW_CROSS
Graydon Hoared987b492011-05-03 06:37:52154
Patrick Walton04f966f2011-05-05 01:28:30155######################################################################
156# Subprograms
157######################################################################
158
Graydon Hoare8fc51df2011-06-27 18:53:04159LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as$(X)
Patrick Walton04f966f2011-05-05 01:28:30160
Graydon Hoare8fc51df2011-06-27 18:53:04161LLC := $(CFG_LLVM_BINDIR)/llc$(X)
Graydon Hoared987b492011-05-03 06:37:52162
163######################################################################
Graydon Hoarefafb42e2011-07-15 23:12:41164# Per-stage targets and runner
165######################################################################
166
167define SREQ
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36168ifdef CFG_DISABLE_SHAREDSTD
Graydon Hoarefafb42e2011-07-15 23:12:41169SREQ$(1) = stage$(1)/rustc$(X) \
170 stage$(1)/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21171 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36172 stage$(1)/$$(CFG_RUSTLLVM) \
173 stage$(1)/lib/glue.o \
174 stage$(1)/lib/main.o \
175 stage$(1)/lib/$$(CFG_RUNTIME) \
176 $$(MKFILES)
177else
178SREQ$(1) = stage$(1)/rustc$(X) \
179 stage$(1)/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21180 $$(call CFG_STDLIB_DEFAULT,stage$(1),stage$(1)) \
Graydon Hoarefafb42e2011-07-15 23:12:41181 stage$(1)/$$(CFG_RUSTLLVM) \
182 stage$(1)/lib/glue.o \
183 stage$(1)/lib/main.o \
184 stage$(1)/lib/$$(CFG_RUNTIME) \
Marijn Haverbeke863d1212011-07-27 13:44:21185 stage$(1)/lib/$$(CFG_STDLIB) \
Graydon Hoarefafb42e2011-07-15 23:12:41186 $$(MKFILES)
Rafael Ávila de Espíndola88894b62011-07-20 20:02:36187endif
Graydon Hoarefafb42e2011-07-15 23:12:41188
Brian Andersone3d3aaa2011-08-26 18:11:49189ifeq ($(1),0)
190# Don't run the the stage0 compiler under valgrind - that ship has sailed
191CFG_VALGRIND_COMPILE$(1) =
192else
193CFG_VALGRIND_COMPILE$(1) = $$(CFG_VALGRIND_COMPILE)
194endif
195
Rafael Ávila de Espíndolaea371a32011-07-21 19:10:43196STAGE$(1) := $$(Q)$$(call CFG_RUN_TARG,stage$(1), \
Brian Andersone3d3aaa2011-08-26 18:11:49197 $$(CFG_VALGRIND_COMPILE$(1)) stage$(1)/rustc$$(X) \
Graydon Hoarefafb42e2011-07-15 23:12:41198 $$(CFG_RUSTC_FLAGS))
199endef
200
Brian Anderson2cb3a792011-07-20 03:03:13201FUZZ := stage1/fuzzer$(X)
Graydon Hoare46b0aa52011-07-18 22:57:12202
Graydon Hoarefafb42e2011-07-15 23:12:41203$(eval $(call SREQ,0))
204$(eval $(call SREQ,1))
205$(eval $(call SREQ,2))
206$(eval $(call SREQ,3))
207
208######################################################################
209# Entrypoint rule
Graydon Hoare4c2245d2011-03-18 06:51:45210######################################################################
211
Graydon Hoareae784df2011-05-14 00:00:43212ifneq ($(CFG_IN_TRANSITION),)
213
Graydon Hoare9ac29482011-05-16 22:14:58214CFG_INFO := $(info cfg:)
Graydon Hoareae784df2011-05-14 00:00:43215CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
216CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
Graydon Hoare9ac29482011-05-16 22:14:58217CFG_INFO := $(info cfg:)
Graydon Hoareae784df2011-05-14 00:00:43218
Marijn Haverbeke863d1212011-07-27 13:44:21219all: $(SREQ0) $(SREQ1) $(GENERATED) $(DOCS) $(FUZZ)
Graydon Hoareae784df2011-05-14 00:00:43220else
Graydon Hoare46b0aa52011-07-18 22:57:12221all: $(SREQ0) $(SREQ1) $(SREQ2) $(SREQ3) $(GENERATED) $(DOCS) $(FUZZ)
Graydon Hoareae784df2011-05-14 00:00:43222endif
223
Graydon Hoare10f33602011-03-25 17:29:45224
225######################################################################
226# Re-configuration
227######################################################################
228
Graydon Hoareae784df2011-05-14 00:00:43229config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
Graydon Hoare10f33602011-03-25 17:29:45230 @$(call E, cfg: reconfiguring)
Graydon Hoaredf8161d2011-06-30 20:41:20231 $(Q)$(S)configure $(CFG_CONFIGURE_ARGS)
Graydon Hoare10f33602011-03-25 17:29:45232
233
Graydon Hoaree961f532011-03-21 18:23:19234######################################################################
Graydon Hoare79ba3152011-06-25 19:23:27235# Primary-target makefiles
Graydon Hoaree961f532011-03-21 18:23:19236######################################################################
237
Patrick Walton04f966f2011-05-05 01:28:30238include $(CFG_SRC_DIR)/mk/intrinsics.mk
Graydon Hoarefafb42e2011-07-15 23:12:41239include $(CFG_SRC_DIR)/mk/stageN.mk
Michael Sullivanb01ecb12011-07-21 18:58:01240include $(CFG_SRC_DIR)/mk/stage0.mk
Graydon Hoare40624e32011-05-01 20:18:52241include $(CFG_SRC_DIR)/mk/rt.mk
242include $(CFG_SRC_DIR)/mk/rustllvm.mk
Graydon Hoare40624e32011-05-01 20:18:52243include $(CFG_SRC_DIR)/mk/autodep.mk
Brian Andersona5ea56c2011-05-06 00:56:02244include $(CFG_SRC_DIR)/mk/fuzzer.mk
Graydon Hoare79ba3152011-06-25 19:23:27245include $(CFG_SRC_DIR)/mk/docs.mk
246
247
248######################################################################
249# Secondary makefiles, conditionalized for speed
250######################################################################
251
Graydon Hoaredf8161d2011-06-30 20:41:20252ifneq ($(strip $(findstring dist,$(MAKECMDGOALS)) \
253 $(findstring check,$(MAKECMDGOALS)) \
254 $(findstring test,$(MAKECMDGOALS)) \
Graydon Hoare39151f22011-07-13 22:44:09255 $(findstring tidy,$(MAKECMDGOALS)) \
Graydon Hoaredf8161d2011-06-30 20:41:20256 $(findstring clean,$(MAKECMDGOALS))),)
257 CFG_INFO := $(info cfg: including dist rules)
Graydon Hoare79ba3152011-06-25 19:23:27258 include $(CFG_SRC_DIR)/mk/dist.mk
259endif
260
Graydon Hoaredf8161d2011-06-30 20:41:20261ifneq ($(strip $(findstring snap,$(MAKECMDGOALS)) \
262 $(findstring clean,$(MAKECMDGOALS))),)
263 CFG_INFO := $(info cfg: including snap rules)
Graydon Hoare79ba3152011-06-25 19:23:27264 include $(CFG_SRC_DIR)/mk/snap.mk
265endif
266
267ifneq ($(findstring reformat,$(MAKECMDGOALS)),)
Graydon Hoaredf8161d2011-06-30 20:41:20268 CFG_INFO := $(info cfg: including reformat rules)
Graydon Hoare79ba3152011-06-25 19:23:27269 include $(CFG_SRC_DIR)/mk/pp.mk
270endif
271
Graydon Hoaredf8161d2011-06-30 20:41:20272ifneq ($(strip $(findstring check,$(MAKECMDGOALS)) \
273 $(findstring test,$(MAKECMDGOALS)) \
Graydon Hoared5b2d622011-09-13 22:06:21274 $(findstring perf,$(MAKECMDGOALS)) \
Graydon Hoaredf8161d2011-06-30 20:41:20275 $(findstring tidy,$(MAKECMDGOALS))),)
276 CFG_INFO := $(info cfg: including test rules)
Graydon Hoare79ba3152011-06-25 19:23:27277 include $(CFG_SRC_DIR)/mk/tests.mk
Graydon Hoare79ba3152011-06-25 19:23:27278endif
279
Graydon Hoared5b2d622011-09-13 22:06:21280ifneq ($(findstring perf,$(MAKECMDGOALS)),)
281 CFG_INFO := $(info cfg: including perf rules)
282 include $(CFG_SRC_DIR)/mk/perf.mk
283endif
284
Graydon Hoare79ba3152011-06-25 19:23:27285ifneq ($(findstring clean,$(MAKECMDGOALS)),)
Graydon Hoaredf8161d2011-06-30 20:41:20286 CFG_INFO := $(info cfg: including clean rules)
Graydon Hoare79ba3152011-06-25 19:23:27287 include $(CFG_SRC_DIR)/mk/clean.mk
Michael Sullivanb01ecb12011-07-21 18:58:01288endif