blob: 5e33d8d9eebe340fe9d517030c4329a4561a8d51 [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 Hoare9c6e7e62011-03-16 16:17:327
8ifneq ($(MAKE_RESTARTS),)
9CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
10endif
11
12CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))
13
Graydon Hoarecae703c2011-04-08 22:44:4114ifdef CFG_DISABLE_OPTIMIZE
Graydon Hoare19ebc0f2011-04-08 23:29:1915 $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
Patrick Waltonc52fb522011-04-29 17:23:0716 CFG_RUSTC_FLAGS :=
Graydon Hoarecae703c2011-04-08 22:44:4117else
Patrick Waltonc52fb522011-04-29 17:23:0718 CFG_RUSTC_FLAGS := -O
Graydon Hoarecae703c2011-04-08 22:44:4119endif
Graydon Hoare4c2245d2011-03-18 06:51:4520
Patrick Walton3f77e7d2011-04-25 21:20:2821ifdef SAVE_TEMPS
Marijn Haverbeke6b11f6c2011-04-26 18:32:0822 CFG_RUSTC_FLAGS += --save-temps
Patrick Walton3f77e7d2011-04-25 21:20:2823endif
Patrick Walton648c4ae2011-04-29 18:55:3224ifdef TIME_PASSES
25 CFG_RUSTC_FLAGS += --time-passes
26endif
Patrick Walton9aeb6792011-04-29 19:16:1427ifdef NO_TYPESTATE
28 CFG_RUSTC_FLAGS += --no-typestate
29endif
Patrick Walton404db4d2011-05-11 00:48:4930ifdef DEBUG
31 CFG_RUSTC_FLAGS += -g
32endif
Patrick Walton3f77e7d2011-04-25 21:20:2833
Graydon Hoare40624e32011-05-01 20:18:5234# platform-specific auto-configuration
35include $(CFG_SRC_DIR)/mk/platform.mk
Graydon Hoare4c2245d2011-03-18 06:51:4536
37CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
Graydon Hoare7ac885e2011-03-22 06:06:4238CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
Graydon Hoare4c2245d2011-03-18 06:51:4539CFG_STDLIB :=$(call CFG_LIB_NAME,std)
Brian Anderson9a12ad62011-05-06 01:32:5840CFG_RUSTCLIB :=$(call CFG_LIB_NAME,rustc)
Graydon Hoare4c2245d2011-03-18 06:51:4541
Graydon Hoare1e03f002011-05-06 18:21:5142# version-string calculation
43CFG_GIT_DIR := $(CFG_SRC_DIR).git
44CFG_VERSION := prerelease
45ifneq ($(wildcard $(CFG_GIT_DIR)),)
46 CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
47 --pretty=format:'(%h %ci)')
48endif
49
Graydon Hoare4c2245d2011-03-18 06:51:4550ifdef CFG_OCAMLC_OPT
51 $(info cfg: have ocaml native compiler)
52 OPT=.opt
Ralph Giles0b2cfca2011-05-04 23:24:4753else ifdef CFG_OCAMLC
Graydon Hoare4c2245d2011-03-18 06:51:4554 $(info cfg: have only ocaml bytecode compiler)
55endif
56
Graydon Hoare94731fa2011-03-30 04:45:0957ifdef CFG_DISABLE_VALGRIND
58 $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
Graydon Hoare4c2245d2011-03-18 06:51:4559 CFG_VALGRIND :=
Graydon Hoare9c6e7e62011-03-16 16:17:3260endif
Patrick Walton518e2d22011-05-06 01:11:4061ifdef CFG_BAD_VALGRIND
62 $(info cfg: disabling valgrind due to its unreliability on this platform)
63 CFG_VALGRIND :=
64endif
Graydon Hoare9c6e7e62011-03-16 16:17:3265
Graydon Hoare28a4e772011-03-23 17:37:3566DOCS :=
67ifeq ($(CFG_MAKEINFO),)
68 $(info cfg: no makeinfo found, omitting doc/rust.html)
69else
70 DOCS += doc/rust.html
71endif
72
73ifeq ($(CFG_TEXI2PDF),)
74 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
75else
Graydon Hoaref7407472011-03-23 20:31:5176 ifeq ($(CFG_TEX),)
77 $(info cfg: no tex found, omitting doc/rust.pdf)
78 else
79 DOCS += doc/rust.pdf
80 endif
Graydon Hoare28a4e772011-03-23 17:37:3581endif
82
Graydon Hoare94731fa2011-03-30 04:45:0983ifdef CFG_DISABLE_DOCS
84 $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
85 DOCS :=
86endif
Graydon Hoare28a4e772011-03-23 17:37:3587
Graydon Hoare4c2245d2011-03-18 06:51:4588######################################################################
89# Target-and-rule "utility variables"
90######################################################################
91
92ifdef VERBOSE
93 Q :=
94 E =
95else
96 Q := @
97 E = echo $(1)
98endif
99
Graydon Hoare4c2245d2011-03-18 06:51:45100S := $(CFG_SRC_DIR)
101X := $(CFG_EXE_SUFFIX)
102
103# Look in doc and src dirs.
104VPATH := $(S)doc $(S)src
105
106# Compilers we build, we now know how to run.
Graydon Hoare73ba2dd2011-04-30 18:44:27107STAGE0 := $(Q)$(call CFG_RUN_TARG,stage0,\
108 stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1)
109STAGE1 := $(Q)$(call CFG_RUN_TARG,stage1, \
110 stage1/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage2)
111STAGE2 := $(Q)$(call CFG_RUN_TARG,stage2, \
112 stage2/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage3)
Graydon Hoare4c2245d2011-03-18 06:51:45113
114# "Source" files we generate in builddir along the way.
Graydon Hoare40624e32011-05-01 20:18:52115GENERATED :=
Graydon Hoare4c2245d2011-03-18 06:51:45116
117# Delete the built-in rules.
118.SUFFIXES:
119%:: %,v
120%:: RCS/%,v
121%:: RCS/%
122%:: s.%
123%:: SCCS/s.%
Graydon Hoare9c6e7e62011-03-16 16:17:32124
Graydon Hoare4c2245d2011-03-18 06:51:45125######################################################################
126# Standard library variables
127######################################################################
128
Graydon Hoare65974392011-03-21 20:42:29129STDLIB_CRATE := $(S)src/lib/std.rc
Graydon Hoare4c2245d2011-03-18 06:51:45130STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
131
132######################################################################
133# rustc crate variables
134######################################################################
135
Graydon Hoare65974392011-03-21 20:42:29136COMPILER_CRATE := $(S)src/comp/rustc.rc
Graydon Hoare874a7bf2011-03-19 00:30:06137COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
Graydon Hoare4c2245d2011-03-18 06:51:45138 rustc.rc *.rs */*.rs))
139
140######################################################################
Graydon Hoare40624e32011-05-01 20:18:52141# Main target dependency variables
Graydon Hoare4691a752011-03-20 08:12:26142######################################################################
143
Graydon Hoare7ac885e2011-03-22 06:06:42144LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM)
Graydon Hoare73ba2dd2011-04-30 18:44:27145SREQ0 := stage0/rustc$(X) $(LREQ) stage1/glue.o stage1/$(CFG_STDLIB)
146SREQ1 := stage1/rustc$(X) $(LREQ) stage2/glue.o stage2/$(CFG_STDLIB)
147SREQ2 := stage2/rustc$(X) $(LREQ) stage3/glue.o stage3/$(CFG_STDLIB)
Graydon Hoare4691a752011-03-20 08:12:26148
Graydon Hoare28a4e772011-03-23 17:37:35149
Graydon Hoare4691a752011-03-20 08:12:26150######################################################################
Graydon Hoared987b492011-05-03 06:37:52151# Exports for sub-utilities
152######################################################################
153
154export CFG_SRC_DIR
Graydon Hoare1e03f002011-05-06 18:21:51155export CFG_VERSION
Graydon Hoared987b492011-05-03 06:37:52156
Patrick Walton04f966f2011-05-05 01:28:30157######################################################################
158# Subprograms
159######################################################################
160
161LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as
162
Graydon Hoared987b492011-05-03 06:37:52163
164######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45165# Single-target rules
166######################################################################
167
Graydon Hoareae784df2011-05-14 00:00:43168ifneq ($(CFG_IN_TRANSITION),)
169
170CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
171CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
172
173all: rt/$(CFG_RUNTIME) \
174 rustllvm/$(CFG_RUSTLLVM) \
175 stage0/$(CFG_STDLIB) \
176 stage0/intrinsics.bc \
177 stage0/rustc$(X) \
178 $(GENERATED) \
179 $(DOCS) \
180 stage1/$(CFG_STDLIB) \
181 stage1/intrinsics.bc \
182 stage1/glue.o \
183 stage1/rustc$(X) \
184
185else
186
Graydon Hoare4f52ab52011-05-03 22:51:21187all: rt/$(CFG_RUNTIME) \
Graydon Hoare7ac885e2011-03-22 06:06:42188 rustllvm/$(CFG_RUSTLLVM) \
Graydon Hoare4691a752011-03-20 08:12:26189 stage0/$(CFG_STDLIB) \
Patrick Walton04f966f2011-05-05 01:28:30190 stage0/intrinsics.bc \
Graydon Hoare73ba2dd2011-04-30 18:44:27191 stage0/rustc$(X) \
Graydon Hoare28a4e772011-03-23 17:37:35192 $(GENERATED) \
Graydon Hoare73ba2dd2011-04-30 18:44:27193 $(DOCS) \
194 stage1/$(CFG_STDLIB) \
Patrick Walton04f966f2011-05-05 01:28:30195 stage1/intrinsics.bc \
Graydon Hoare5d1c8db2011-05-03 00:56:15196 stage1/glue.o \
197 stage1/rustc$(X) \
198 stage2/$(CFG_STDLIB) \
Patrick Walton04f966f2011-05-05 01:28:30199 stage2/intrinsics.bc \
Graydon Hoare5d1c8db2011-05-03 00:56:15200 stage2/glue.o \
Graydon Hoare4f52ab52011-05-03 22:51:21201 stage2/rustc$(X) \
202 stage3/$(CFG_STDLIB) \
203 stage3/glue.o \
Patrick Walton04f966f2011-05-05 01:28:30204 stage3/intrinsics.bc \
Graydon Hoare4f52ab52011-05-03 22:51:21205 stage3/rustc$(X)
Graydon Hoare4c2245d2011-03-18 06:51:45206
Graydon Hoareae784df2011-05-14 00:00:43207endif
208
Graydon Hoare10f33602011-03-25 17:29:45209
210######################################################################
211# Re-configuration
212######################################################################
213
Graydon Hoareae784df2011-05-14 00:00:43214config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
Graydon Hoare10f33602011-03-25 17:29:45215 @$(call E, cfg: reconfiguring)
216 $(S)configure $(CFG_CONFIGURE_ARGS)
217
218
Graydon Hoaree961f532011-03-21 18:23:19219######################################################################
Graydon Hoare40624e32011-05-01 20:18:52220# Additional makefiles
Graydon Hoaree961f532011-03-21 18:23:19221######################################################################
222
Patrick Walton04f966f2011-05-05 01:28:30223include $(CFG_SRC_DIR)/mk/intrinsics.mk
Graydon Hoare40624e32011-05-01 20:18:52224include $(CFG_SRC_DIR)/mk/stage0.mk
225include $(CFG_SRC_DIR)/mk/stage1.mk
226include $(CFG_SRC_DIR)/mk/stage2.mk
Graydon Hoare4f52ab52011-05-03 22:51:21227include $(CFG_SRC_DIR)/mk/stage3.mk
Graydon Hoare40624e32011-05-01 20:18:52228include $(CFG_SRC_DIR)/mk/rt.mk
229include $(CFG_SRC_DIR)/mk/rustllvm.mk
230include $(CFG_SRC_DIR)/mk/docs.mk
231include $(CFG_SRC_DIR)/mk/tests.mk
232include $(CFG_SRC_DIR)/mk/dist.mk
Graydon Hoared987b492011-05-03 06:37:52233include $(CFG_SRC_DIR)/mk/snap.mk
Graydon Hoare40624e32011-05-01 20:18:52234include $(CFG_SRC_DIR)/mk/clean.mk
235include $(CFG_SRC_DIR)/mk/autodep.mk
Brian Andersona5ea56c2011-05-06 00:56:02236include $(CFG_SRC_DIR)/mk/fuzzer.mk