blob: 14993f14f528daedc8229817f2d03b2803551b70 [file] [log] [blame]
Graydon Hoare9c6e7e62011-03-16 16:17:321######################################################################
2# Residual auto-configuration
3######################################################################
4
5include config.mk
6MKFILES := Makefile config.mk
7
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 Hoare4c2245d2011-03-18 06:51:4514CFG_GCC_CFLAGS :=
15CFG_GCC_LINK_FLAGS :=
16CFG_BOOT_FLAGS := $(BOOT_FLAGS)
17CFG_RUSTC_FLAGS := -nowarn
18
19# On Darwin, we need to run dsymutil so the debugging information ends
20# up in the right place. On other platforms, it automatically gets
21# embedded into the executable, so use a no-op command.
22CFG_DSYMUTIL := true
23
24ifeq ($(CFG_OSTYPE), FreeBSD)
Graydon Hoarec328ba12011-03-18 23:05:5625 CFG_LIB_NAME=lib$(1).so
Graydon Hoare4c2245d2011-03-18 06:51:4526 CFG_GCC_CFLAGS += -fPIC -march=i686 -I/usr/local/include
27 CFG_GCC_LINK_FLAGS += -shared -fPIC -lpthread -lrt
28 ifeq ($(CFG_CPUTYPE), x86_64)
29 CFG_GCC_CFLAGS += -m32
30 CFG_GCC_LINK_FLAGS += -m32
31 endif
32 CFG_UNIXY := 1
Graydon Hoarea978d532011-03-23 20:10:3033 CFG_LDENV := LD_LIBRARY_PATH
Graydon Hoare9c6e7e62011-03-16 16:17:3234endif
35
Graydon Hoare4c2245d2011-03-18 06:51:4536ifeq ($(CFG_OSTYPE), Linux)
Graydon Hoarec328ba12011-03-18 23:05:5637 CFG_LIB_NAME=lib$(1).so
Graydon Hoare4c2245d2011-03-18 06:51:4538 CFG_GCC_CFLAGS += -fPIC -march=i686
39 CFG_GCC_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
40 ifeq ($(CFG_CPUTYPE), x86_64)
41 CFG_GCC_CFLAGS += -m32
42 CFG_GCC_LINK_FLAGS += -m32
43 endif
44 CFG_UNIXY := 1
Graydon Hoarea978d532011-03-23 20:10:3045 CFG_LDENV := LD_LIBRARY_PATH
Graydon Hoare4c2245d2011-03-18 06:51:4546endif
47
48ifeq ($(CFG_OSTYPE), Darwin)
Graydon Hoarec328ba12011-03-18 23:05:5649 CFG_LIB_NAME=lib$(1).dylib
Graydon Hoare4c2245d2011-03-18 06:51:4550 CFG_UNIXY := 1
Graydon Hoarea978d532011-03-23 20:10:3051 CFG_LDENV := DYLD_LIBRARY_PATH
Graydon Hoare4c2245d2011-03-18 06:51:4552 CFG_GCC_LINK_FLAGS += -dynamiclib -lpthread
53 # Darwin has a very blurry notion of "64 bit", and claims it's running
54 # "on an i386" when the whole userspace is 64-bit and the compiler
55 # emits 64-bit binaries by default. So we just force -m32 here. Smarter
56 # approaches welcome!
57 CFG_GCC_CFLAGS += -m32
58 CFG_GCC_LINK_FLAGS += -m32
59 CFG_DSYMUTIL := dsymutil
60endif
61
62ifneq ($(findstring MINGW,$(CFG_OSTYPE)),)
63 CFG_WINDOWSY := 1
64endif
65
Graydon Hoareaa1e3312011-03-20 01:34:1966CFG_LDPATH :=$(CFG_BUILD_DIR)/rt
Graydon Hoare7ac885e2011-03-22 06:06:4267CFG_LDPATH :=$(CFG_LDPATH):$(CFG_BUILD_DIR)/rustllvm
Graydon Hoareaa1e3312011-03-20 01:34:1968
Graydon Hoare4c2245d2011-03-18 06:51:4569ifdef CFG_WINDOWSY
70 CFG_INFO := $(info cfg: windows-y environment)
71
72 CFG_EXE_SUFFIX := .exe
73 CFG_LIB_NAME=$(1).dll
Graydon Hoareaa1e3312011-03-20 01:34:1974 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
75 CFG_LDPATH :=$(CFG_LDPATH):$$PATH
Patrick Waltona5caa312011-03-21 18:55:1776 CFG_RUN_TEST=PATH="$(CFG_LDPATH)" $(1)
77 CFG_RUN_TARG=PATH="$(CFG_LDPATH)" $(1)
Graydon Hoare4c2245d2011-03-18 06:51:4578
Graydon Hoaree6969922011-03-23 21:35:2879 CFG_PATH_MUNGE := $(strip perl -i.bak -p \
80 -e 's@\\(\S)@/\1@go;' \
Graydon Hoare24e0fc02011-03-20 01:33:1681 -e 's@^/([a-zA-Z])/@\1:/@o;')
Graydon Hoare4c2245d2011-03-18 06:51:4582 ifdef CFG_FLEXLINK
83 CFG_BOOT_NATIVE := 1
84 endif
85 CFG_GCC_CFLAGS += -march=i686
86 CFG_GCC_LINK_FLAGS += -shared -fPIC
87endif
88
89ifdef CFG_UNIXY
90 CFG_INFO := $(info cfg: unix-y environment)
91
Graydon Hoare6e1f52e2011-03-22 23:57:3192 CFG_PATH_MUNGE := /bin/true
Graydon Hoare4c2245d2011-03-18 06:51:4593 CFG_EXE_SUFFIX :=
Graydon Hoareaa1e3312011-03-20 01:34:1994 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_LIBDIR)
Graydon Hoare4691a752011-03-20 08:12:2695 CFG_RUN_TARG=\
Graydon Hoarea978d532011-03-23 20:10:3096 $(CFG_LDENV)=$(dir $(firstword $(1))):$(CFG_LDPATH) $(1)
Graydon Hoare81f3b332011-03-21 18:02:3797 CFG_RUN_TEST=\
Graydon Hoarea978d532011-03-23 20:10:3098 $(CFG_LDENV)=$(dir $(firstword $(1))):$(CFG_LDPATH) \
Graydon Hoaree80c0d52011-03-21 22:29:5999 $(CFG_VALGRIND) $(1)
Graydon Hoare4c2245d2011-03-18 06:51:45100
101 CFG_BOOT_NATIVE := 1
102
103 ifdef MINGW_CROSS
104 CFG_EXE_SUFFIX := .exe
105 CFG_LIB_NAME=$(1).dll
Graydon Hoareaa1e3312011-03-20 01:34:19106 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
107 CFG_LDPATH :=$(CFG_LDPATH):$$PATH
Graydon Hoare4691a752011-03-20 08:12:26108 CFG_RUN_TARG=PATH=$(CFG_LDPATH) $(1)
Graydon Hoare81f3b332011-03-21 18:02:37109 CFG_RUN_TEST=PATH=$(CFG_LDPATH) $(1)
Graydon Hoare4c2245d2011-03-18 06:51:45110
111 CFG_INFO := $(info cfg: mingw-cross)
112 CFG_GCC_CROSS := i586-mingw32msvc-
113 CFG_BOOT_FLAGS += -t win32-x86-pe
114 ifdef CFG_VALGRIND
115 CFG_VALGRIND += wine
116 endif
117 CFG_GCC_CFLAGS := -march=i686
118 CFG_GCC_LINK_FLAGS := -shared
119 ifeq ($(CFG_CPUTYPE), x86_64)
120 CFG_GCC_CFLAGS += -m32
121 CFG_GCC_LINK_FLAGS += -m32
122 endif
123 endif
124 ifdef CFG_VALGRIND
125 CFG_VALGRIND += --leak-check=full \
126 --error-exitcode=1 \
127 --quiet --vex-iropt-level=0 \
Graydon Hoare5f646122011-03-21 18:02:15128 --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
Graydon Hoare4c2245d2011-03-18 06:51:45129 endif
130endif
131
132CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
Graydon Hoare7ac885e2011-03-22 06:06:42133CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
Graydon Hoare4c2245d2011-03-18 06:51:45134CFG_STDLIB :=$(call CFG_LIB_NAME,std)
135
Graydon Hoareb7972d32011-03-19 01:32:31136CFG_LLC_CFLAGS := -march=x86
137
Graydon Hoare4c2245d2011-03-18 06:51:45138ifdef CFG_GCC
139 CFG_INFO := $(info cfg: using gcc)
140 CFG_GCC_CFLAGS += -Wall -Werror -fno-rtti -fno-exceptions -g
141 CFG_GCC_LINK_FLAGS += -g
142 CFG_COMPILE_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -c -o $(1) $(2)
Graydon Hoare7ac885e2011-03-22 06:06:42143 CFG_LINK_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_LINK_FLAGS) -o $(1) $(2)
Graydon Hoare4c2245d2011-03-18 06:51:45144 CFG_DEPEND_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -MT "$(1)" -MM $(2)
145else
146 CFG_ERR := $(error please try on a system with gcc)
147endif
148
149ifdef CFG_OCAMLC_OPT
150 $(info cfg: have ocaml native compiler)
151 OPT=.opt
152else
153 $(info cfg: have only ocaml bytecode compiler)
154endif
155
156ifdef BOOT_PROFILE
157 $(info cfg: forcing native bootstrap compiler (BOOT_PROFILE))
158 CFG_BOOT_NATIVE := 1
Graydon Hoare9c6e7e62011-03-16 16:17:32159 CFG_OCAMLOPT_PROFILE_FLAGS := -p
160endif
161
Graydon Hoare4c2245d2011-03-18 06:51:45162ifdef BOOT_DEBUG
163 $(info cfg: forcing bytecode bootstrap compiler (DEBUG))
164 CFG_BOOT_NATIVE :=
Graydon Hoare9c6e7e62011-03-16 16:17:32165endif
166
Graydon Hoare4c2245d2011-03-18 06:51:45167ifdef CFG_BOOT_NATIVE
Graydon Hoare9c6e7e62011-03-16 16:17:32168 $(info cfg: building native bootstrap compiler)
169else
170 $(info cfg: building bytecode bootstrap compiler)
171endif
172
173ifdef NO_VALGRIND
Graydon Hoare4c2245d2011-03-18 06:51:45174 $(info cfg: disabling valgrind (NO_VALGRIND))
175 CFG_VALGRIND :=
Graydon Hoare9c6e7e62011-03-16 16:17:32176endif
177
Graydon Hoare28a4e772011-03-23 17:37:35178DOCS :=
179ifeq ($(CFG_MAKEINFO),)
180 $(info cfg: no makeinfo found, omitting doc/rust.html)
181else
182 DOCS += doc/rust.html
183endif
184
185ifeq ($(CFG_TEXI2PDF),)
186 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
187else
Graydon Hoaref7407472011-03-23 20:31:51188 ifeq ($(CFG_TEX),)
189 $(info cfg: no tex found, omitting doc/rust.pdf)
190 else
191 DOCS += doc/rust.pdf
192 endif
Graydon Hoare28a4e772011-03-23 17:37:35193endif
194
195
Graydon Hoare4c2245d2011-03-18 06:51:45196######################################################################
197# Target-and-rule "utility variables"
198######################################################################
199
200ifdef VERBOSE
201 Q :=
202 E =
203else
204 Q := @
205 E = echo $(1)
206endif
207
Graydon Hoare4c2245d2011-03-18 06:51:45208S := $(CFG_SRC_DIR)
209X := $(CFG_EXE_SUFFIX)
210
211# Look in doc and src dirs.
212VPATH := $(S)doc $(S)src
213
214# Compilers we build, we now know how to run.
Graydon Hoarec4e00852011-03-21 02:42:27215BOOT := $(Q)OCAMLRUNPARAM="b1" boot/rustboot$(X) $(CFG_BOOT_FLAGS) -L boot
Graydon Hoare0eb6be12011-03-21 21:52:02216STAGE0 := $(Q)$(call CFG_RUN_TARG,\
217 stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage0)
218STAGE1 := $(Q)$(call CFG_RUN_TARG,\
219 stage1/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1)
Graydon Hoare4c2245d2011-03-18 06:51:45220
221# "Source" files we generate in builddir along the way.
222GENERATED := boot/fe/lexer.ml boot/version.ml
223
224# Delete the built-in rules.
225.SUFFIXES:
226%:: %,v
227%:: RCS/%,v
228%:: RCS/%
229%:: s.%
230%:: SCCS/s.%
Graydon Hoare9c6e7e62011-03-16 16:17:32231
232######################################################################
233# Bootstrap compiler variables
234######################################################################
235
236# We must list them in link order.
237# Nobody calculates the link-order DAG automatically, sadly.
238
239BOOT_MLS := \
240 $(addsuffix .ml, \
Graydon Hoare3ae9ca42011-03-17 21:26:24241 boot/version \
242 $(addprefix boot/util/, fmt common bits) \
Graydon Hoare9c6e7e62011-03-16 16:17:32243 $(addprefix boot/driver/, session) \
244 $(addprefix boot/fe/, ast token lexer parser \
245 extfmt pexp item cexp fuzz) \
246 $(addprefix boot/be/, asm il abi) \
247 $(addprefix boot/me/, walk semant resolve alias \
248 simplify type dead layer effect typestate \
249 loop layout transutil trans dwarf) \
250 $(addprefix boot/be/, x86 ra pe elf macho) \
251 $(addprefix boot/driver/, lib glue main)) \
252
253BOOT_CMOS := $(BOOT_MLS:.ml=.cmo)
254BOOT_CMXS := $(BOOT_MLS:.ml=.cmx)
255BOOT_OBJS := $(BOOT_MLS:.ml=.o)
256BOOT_CMIS := $(BOOT_MLS:.ml=.cmi)
257
Graydon Hoare0c06f512011-03-22 23:57:44258BS := $(S)src/boot
Graydon Hoare9c6e7e62011-03-16 16:17:32259
Graydon Hoare4c2245d2011-03-18 06:51:45260BOOT_ML_DEP_INCS := -I $(BS)/fe -I $(BS)/me \
261 -I $(BS)/be -I $(BS)/driver \
262 -I $(BS)/util -I boot
263
264BOOT_ML_INCS := -I boot/fe -I boot/me \
265 -I boot/be -I boot/driver \
266 -I boot/util -I boot
267
Graydon Hoare3ae9ca42011-03-17 21:26:24268BOOT_ML_LIBS := unix.cma nums.cma bigarray.cma
269BOOT_ML_NATIVE_LIBS := unix.cmxa nums.cmxa bigarray.cmxa
270BOOT_OCAMLC_FLAGS := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
Graydon Hoare4c2245d2011-03-18 06:51:45271BOOT_OCAMLOPT_FLAGS := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
Graydon Hoare9c6e7e62011-03-16 16:17:32272
273######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45274# Runtime (C++) library variables
Graydon Hoare9c6e7e62011-03-16 16:17:32275######################################################################
276
Graydon Hoare4c2245d2011-03-18 06:51:45277RUNTIME_CS := rt/sync/timer.cpp \
278 rt/sync/sync.cpp \
279 rt/sync/lock_and_signal.cpp \
280 rt/rust.cpp \
281 rt/rust_builtin.cpp \
282 rt/rust_run_program.cpp \
283 rt/rust_crate.cpp \
284 rt/rust_crate_cache.cpp \
285 rt/rust_crate_reader.cpp \
286 rt/rust_comm.cpp \
287 rt/rust_dom.cpp \
288 rt/rust_task.cpp \
289 rt/rust_task_list.cpp \
290 rt/rust_proxy.cpp \
291 rt/rust_chan.cpp \
292 rt/rust_port.cpp \
293 rt/rust_upcall.cpp \
294 rt/rust_log.cpp \
295 rt/rust_message.cpp \
296 rt/rust_timer.cpp \
297 rt/circular_buffer.cpp \
298 rt/isaac/randport.cpp \
299 rt/rust_srv.cpp \
300 rt/rust_kernel.cpp \
301 rt/memory_region.cpp \
302 rt/test/rust_test_harness.cpp \
303 rt/test/rust_test_runtime.cpp \
304 rt/test/rust_test_util.cpp
Graydon Hoare9c6e7e62011-03-16 16:17:32305
Graydon Hoare4c2245d2011-03-18 06:51:45306RUNTIME_HDR := rt/globals.h \
307 rt/rust.h \
308 rt/rust_dwarf.h \
309 rt/rust_internal.h \
310 rt/rust_util.h \
311 rt/rust_chan.h \
312 rt/rust_port.h \
313 rt/rust_dom.h \
314 rt/rust_task.h \
315 rt/rust_task_list.h \
316 rt/rust_proxy.h \
317 rt/rust_log.h \
318 rt/rust_message.h \
319 rt/circular_buffer.h \
320 rt/util/array_list.h \
321 rt/util/indexed_list.h \
322 rt/util/synchronized_indexed_list.h \
323 rt/util/hash_map.h \
324 rt/sync/sync.h \
325 rt/sync/timer.h \
Graydon Hoareea1321f2011-03-21 23:16:15326 rt/sync/lock_and_signal.h \
Graydon Hoare4c2245d2011-03-18 06:51:45327 rt/sync/lock_free_queue.h \
328 rt/rust_srv.h \
329 rt/rust_kernel.h \
330 rt/memory_region.h \
331 rt/memory.h \
332 rt/test/rust_test_harness.h \
333 rt/test/rust_test_runtime.h \
334 rt/test/rust_test_util.h
Graydon Hoare9c6e7e62011-03-16 16:17:32335
Patrick Waltone6d33082011-03-22 01:05:34336RUNTIME_DEF := $(S)src/rt/rustrt.def
Graydon Hoare4c2245d2011-03-18 06:51:45337RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash
338RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o)
Graydon Hoare9c6e7e62011-03-16 16:17:32339
340######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45341# rustc LLVM-extensions (C++) library variables
Graydon Hoare9c6e7e62011-03-16 16:17:32342######################################################################
343
Graydon Hoare7ac885e2011-03-22 06:06:42344RUSTLLVM_CS := $(addprefix rustllvm/, \
Graydon Hoare4c2245d2011-03-18 06:51:45345 MachOObjectFile.cpp Object.cpp RustWrapper.cpp)
Graydon Hoare9c6e7e62011-03-16 16:17:32346
Graydon Hoare7ac885e2011-03-22 06:06:42347RUSTLLVM_HDR := rustllvm/include/llvm-c/Object.h
348RUSTLLVM_DEF := $(S)src/rustllvm/rustllvm.def
Graydon Hoare4c2245d2011-03-18 06:51:45349
Graydon Hoare7ac885e2011-03-22 06:06:42350RUSTLLVM_INCS := -iquote $(CFG_LLVM_INCDIR) \
351 -iquote $(S)src/rustllvm/include
352RUSTLLVM_OBJS := $(RUSTLLVM_CS:.cpp=.o)
353RUSTLLVM_LIBS := $(CFG_LLVM_LDFLAGS) $(CFG_LLVM_LIBS)
Graydon Hoare4c2245d2011-03-18 06:51:45354
355######################################################################
356# Standard library variables
357######################################################################
358
Graydon Hoare65974392011-03-21 20:42:29359STDLIB_CRATE := $(S)src/lib/std.rc
Graydon Hoare4c2245d2011-03-18 06:51:45360STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
361
362######################################################################
363# rustc crate variables
364######################################################################
365
Graydon Hoare65974392011-03-21 20:42:29366COMPILER_CRATE := $(S)src/comp/rustc.rc
Graydon Hoare874a7bf2011-03-19 00:30:06367COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
Graydon Hoare4c2245d2011-03-18 06:51:45368 rustc.rc *.rs */*.rs))
369
370######################################################################
Graydon Hoare28a4e772011-03-23 17:37:35371# Test dependency variables
Graydon Hoare4691a752011-03-20 08:12:26372######################################################################
373
Graydon Hoare7ac885e2011-03-22 06:06:42374LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM)
Graydon Hoare4691a752011-03-20 08:12:26375BREQ := boot/rustboot$(X) boot/$(CFG_STDLIB)
376SREQ0 := stage0/rustc$(X) $(LREQ)
377SREQ1 := stage1/rustc$(X) $(LREQ)
378
Graydon Hoare28a4e772011-03-23 17:37:35379
Graydon Hoare4691a752011-03-20 08:12:26380######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45381# Single-target rules
382######################################################################
383
Graydon Hoarea599d802011-03-19 00:41:32384all: boot/rustboot$(X) \
Graydon Hoare4691a752011-03-20 08:12:26385 boot/$(CFG_STDLIB) \
Graydon Hoarea599d802011-03-19 00:41:32386 rt/$(CFG_RUNTIME) \
Graydon Hoare7ac885e2011-03-22 06:06:42387 rustllvm/$(CFG_RUSTLLVM) \
Graydon Hoarea599d802011-03-19 00:41:32388 stage0/rustc$(X) \
Graydon Hoareb7972d32011-03-19 01:32:31389 stage0/glue.o \
Graydon Hoare4691a752011-03-20 08:12:26390 stage0/$(CFG_STDLIB) \
Graydon Hoare28a4e772011-03-23 17:37:35391 $(GENERATED) \
392 $(DOCS)
Graydon Hoare4c2245d2011-03-18 06:51:45393
Patrick Waltone6d33082011-03-22 01:05:34394rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF)
Graydon Hoare4c2245d2011-03-18 06:51:45395 @$(call E, link: $@)
Patrick Waltone6d33082011-03-22 01:05:34396 $(Q)$(call CFG_LINK_C,$@,$(RUNTIME_OBJS),$(RUNTIME_DEF))
Graydon Hoare4c2245d2011-03-18 06:51:45397
Graydon Hoare7ac885e2011-03-22 06:06:42398rustllvm/$(CFG_RUSTLLVM): $(RUSTLLVM_OBJS) $(MKFILES) $(RUSTLLVM_HDR) \
399 $(RUSTLLVM_DEF)
Graydon Hoare4c2245d2011-03-18 06:51:45400 @$(call E, link: $@)
Graydon Hoare7ac885e2011-03-22 06:06:42401 $(Q)$(call CFG_LINK_C,$@,$(CFG_LLVM_LDFLAGS) $(RUSTLLVM_OBJS) \
402 $(CFG_LLVM_LIBS) $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF))
Graydon Hoare4c2245d2011-03-18 06:51:45403
404ifdef CFG_BOOT_NATIVE
Graydon Hoare3ae9ca42011-03-17 21:26:24405boot/rustboot$(X): $(BOOT_CMXS) $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45406 @$(call E, link: $@)
407 $(Q)ocamlopt$(OPT) -o $@ $(BOOT_OCAMLOPT_FLAGS) $(BOOT_ML_NATIVE_LIBS) \
Graydon Hoare9c6e7e62011-03-16 16:17:32408 $(BOOT_CMXS)
409else
Graydon Hoare3ae9ca42011-03-17 21:26:24410boot/rustboot$(X): $(BOOT_CMOS) $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45411 @$(call E, link: $@)
Graydon Hoare3ae9ca42011-03-17 21:26:24412 $(Q)ocamlc$(OPT) -o $@ $(BOOT_OCAMLC_FLAGS) $(BOOT_ML_LIBS) $(BOOT_CMOS)
Graydon Hoare9c6e7e62011-03-16 16:17:32413endif
414
Graydon Hoare3ae9ca42011-03-17 21:26:24415boot/version.ml: $(MKFILES)
416 @$(call E, git: $@)
Graydon Hoaref052d9b2011-03-23 18:34:10417 $(Q)(cd $(S) && git log -1 \
418 --pretty=format:'let version = "prerelease (%h %ci)";;') >$@ || exit 1
Graydon Hoare9c6e7e62011-03-16 16:17:32419
Graydon Hoare74a585e2011-03-20 05:55:28420
Graydon Hoarec4e00852011-03-21 02:42:27421
Graydon Hoare65974392011-03-21 20:42:29422boot/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
Graydon Hoare4691a752011-03-20 08:12:26423 boot/rustboot$(X) $(MKFILES)
Graydon Hoarea599d802011-03-19 00:41:32424 @$(call E, compile: $@)
425 $(BOOT) -shared -o $@ $<
426
Graydon Hoare65974392011-03-21 20:42:29427stage0/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
Graydon Hoare74a585e2011-03-20 05:55:28428 stage0/rustc$(X) $(MKFILES)
429 @$(call E, compile: $@)
430 $(STAGE0) -shared -o $@ $<
431
Graydon Hoare65974392011-03-21 20:42:29432stage1/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
Graydon Hoarec4e00852011-03-21 02:42:27433 stage1/rustc$(X) $(MKFILES)
434 @$(call E, compile: $@)
435 $(STAGE1) -shared -o $@ $<
436
Graydon Hoare65974392011-03-21 20:42:29437stage2/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
Graydon Hoarec4e00852011-03-21 02:42:27438 stage2/rustc$(X) $(MKFILES)
439 @$(call E, compile: $@)
440 $(STAGE2) -shared -o $@ $<
441
442
Graydon Hoare74a585e2011-03-20 05:55:28443
Graydon Hoare65974392011-03-21 20:42:29444stage0/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
Graydon Hoare4691a752011-03-20 08:12:26445 $(BREQ)
Graydon Hoarea599d802011-03-19 00:41:32446 @$(call E, compile: $@)
447 $(BOOT) -minimal -o $@ $<
448 $(Q)chmod 0755 $@
449
Graydon Hoare65974392011-03-21 20:42:29450stage1/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
Graydon Hoare4691a752011-03-20 08:12:26451 $(SREQ0) stage0/$(CFG_STDLIB)
Graydon Hoare74a585e2011-03-20 05:55:28452 @$(call E, compile: $@)
453 $(STAGE0) -o $@ $<
454 $(Q)chmod 0755 $@
455
Graydon Hoare65974392011-03-21 20:42:29456stage2/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
Graydon Hoarec4e00852011-03-21 02:42:27457 $(SREQ1) stage1/$(CFG_STDLIB)
458 @$(call E, compile: $@)
459 $(STAGE1) -o $@ $<
460 $(Q)chmod 0755 $@
461
462
Graydon Hoare74a585e2011-03-20 05:55:28463
Graydon Hoare724a9a32011-03-20 01:33:32464stage0/glue.bc: stage0/rustc$(X) stage0/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42465 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoarea599d802011-03-19 00:41:32466 @$(call E, generate: $@)
467 $(STAGE0) -o $@ -glue
Graydon Hoare4c2245d2011-03-18 06:51:45468
Graydon Hoare74a585e2011-03-20 05:55:28469stage1/glue.bc: stage1/rustc$(X) stage1/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42470 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoare74a585e2011-03-20 05:55:28471 @$(call E, generate: $@)
472 $(STAGE1) -o $@ -glue
473
Graydon Hoarec4e00852011-03-21 02:42:27474stage2/glue.bc: stage2/rustc$(X) stage2/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42475 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoarec4e00852011-03-21 02:42:27476 @$(call E, generate: $@)
477 $(STAGE2) -o $@ -glue
478
Graydon Hoare4c2245d2011-03-18 06:51:45479######################################################################
Graydon Hoare4691a752011-03-20 08:12:26480# Library and boot rules
Graydon Hoare4c2245d2011-03-18 06:51:45481######################################################################
482
483rt/%.o: rt/%.cpp $(MKFILES)
484 @$(call E, compile: $@)
485 $(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
486
Graydon Hoare7ac885e2011-03-22 06:06:42487rustllvm/%.o: rustllvm/%.cpp $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45488 @$(call E, compile: $@)
Graydon Hoare7ac885e2011-03-22 06:06:42489 $(Q)$(call CFG_COMPILE_C, $@, $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $<
Graydon Hoare4c2245d2011-03-18 06:51:45490
Graydon Hoare9c6e7e62011-03-16 16:17:32491%.cmo: %.ml $(MKFILES)
492 @$(call E, compile: $@)
Graydon Hoare3ae9ca42011-03-17 21:26:24493 $(Q)ocamlc$(OPT) -c -o $@ $(BOOT_OCAMLC_FLAGS) $<
Graydon Hoare9c6e7e62011-03-16 16:17:32494
495%.cmo: %.cmi $(MKFILES)
Graydon Hoare3ae9ca42011-03-17 21:26:24496
Graydon Hoare4c2245d2011-03-18 06:51:45497%.cmx %.o: %.ml $(MKFILES)
498 @$(call E, compile: $@)
499 $(Q)ocamlopt$(OPT) -c -o $@ $(BOOT_OCAMLOPT_FLAGS) $<
500
501%.ml: %.mll $(MKFILES)
502 @$(call E, lex-gen: $@)
503 $(Q)ocamllex$(OPT) -q -o $@ $<
Graydon Hoare3ae9ca42011-03-17 21:26:24504
Graydon Hoare4691a752011-03-20 08:12:26505
506######################################################################
Graydon Hoare28a4e772011-03-23 17:37:35507# Doc rules
508######################################################################
509
510doc/version.texi: $(MKFILES) rust.texi
Graydon Hoaref052d9b2011-03-23 18:34:10511 (cd $(S) && git log -1 \
512 --pretty=format:'@macro gitversion%n%h %ci%n@end macro%n') >$@
Graydon Hoare28a4e772011-03-23 17:37:35513
514doc/%.pdf: %.texi doc/version.texi
515 texi2pdf -I doc -o $@ --clean $<
516
517doc/%.html: %.texi doc/version.texi
518 makeinfo -I doc --html --ifhtml --force --no-split --output=$@ $<
519
520docsnap: doc/rust.pdf
521 mv $< doc/rust-$(shell date +"%Y-%m-%d")-snap.pdf
522
523
524######################################################################
Graydon Hoare68d76c22011-03-21 20:41:56525# Testing variables
526######################################################################
527
Graydon Hoared96b8cd2011-03-22 23:58:00528# Float doesn't work in boot
529
Graydon Hoared8d9adf2011-03-23 17:40:21530FLOAT_XFAILS := $(S)src/test/run-pass/float.rs \
531 $(S)src/test/run-pass/float2.rs
Graydon Hoared96b8cd2011-03-22 23:58:00532
Graydon Hoare68d76c22011-03-21 20:41:56533# Temporarily xfail tests broken by the nominal-tags change.
534
535NOMINAL_TAG_XFAILS := $(S)src/test/run-pass/mlist.rs
536
537# Temporarily xfail tests broken by the constant-tags change.
538
539CONST_TAG_XFAILS := $(S)src/test/run-pass/generic-tag.rs
540
541# Temporarily xfail some of the task tests, while debugging the
542# overhauled inter-domain messaging system.
543
544TASK_XFAILS := $(addprefix $(S)src/test/run-pass/, \
545 task-comm-8.rs \
546 task-comm-10.rs \
547 task-comm-15.rs \
548 task-comm-12.rs \
549 task-comm-2.rs \
550 task-comm-9.rs \
Brian Anderson3dcb79d2011-03-22 01:30:32551 task-comm-chan-nil.rs \
Graydon Hoare68d76c22011-03-21 20:41:56552 task-life-0.rs \
553 alt-type-simple.rs \
554 many.rs)
555
556TEST_XFAILS_BOOT := $(TASK_XFAILS) \
557 $(NOMINAL_TAG_XFAILS) \
558 $(CONST_TAG_XFAILS) \
Graydon Hoared96b8cd2011-03-22 23:58:00559 $(FLOAT_XFAILS) \
Graydon Hoare68d76c22011-03-21 20:41:56560 $(addprefix $(S)src/test/run-pass/, \
561 arith-unsigned.rs \
562 box-compare.rs \
563 child-outlives-parent.rs \
564 clone-with-exterior.rs \
565 constrained-type.rs \
566 destructor-ordering.rs \
567 obj-as.rs \
568 vec-slice.rs \
569 fn-lval.rs \
Graydon Hoareef01ce92011-03-23 17:39:15570 empty-mutable-vec.rs \
Graydon Hoare68d76c22011-03-21 20:41:56571 generic-bind-2.rs \
572 generic-fn-box.rs \
573 generic-tup.rs \
574 iter-ret.rs \
575 leak-tag-copy.rs \
576 lib-io.rs \
577 maybe-mutable.rs \
578 mlist-cycle.rs \
579 obj-as.rs \
580 seq-compare.rs \
581 task-comm.rs \
582 task-comm-3.rs \
583 vec-slice.rs \
584 while-and-do-while.rs) \
585 $(addprefix $(S)src/test/run-fail/, \
586 task-comm-14.rs) \
587 $(addprefix $(S)src/test/compile-fail/, \
588 bad-expr-path.rs \
589 import.rs \
590 import2.rs \
591 import3.rs \
592 import4.rs \
593 bad-recv.rs \
594 bad-send.rs \
595 infinite-vec-type-recursion.rs \
596 tail-non-call.rs \
597 writing-through-read-alias.rs)
598
599TEST_XFAILS_STAGE0 := $(addprefix $(S)src/test/run-pass/, \
600 acyclic-unwind.rs \
601 alt-pattern-drop.rs \
602 alt-type-simple.rs \
603 basic-1.rs \
604 basic-2.rs \
605 basic.rs \
606 child-outlives-parent.rs \
607 clone-with-exterior.rs \
608 comm.rs \
609 constrained-type.rs \
610 destructor-ordering.rs \
611 iter-ret.rs \
612 lazychan.rs \
613 lib-bitv.rs \
614 lib-deque.rs \
615 lib-int.rs \
616 lib-io.rs \
617 lib-map.rs \
618 lib-rand.rs \
619 lib-sha1.rs \
620 lib-sort.rs \
621 lib-str.rs \
622 lib-str-buf.rs \
623 lib-task.rs \
624 lib-uint.rs \
625 lib-vec-str-conversions.rs \
626 lib-vec.rs \
627 many.rs \
628 mlist-cycle.rs \
629 mlist.rs \
630 mutable-alias-vec.rs \
631 obj-as.rs \
632 obj-dtor.rs \
633 pred.rs \
634 preempt.rs \
635 rt-circular-buffer.rs \
636 size-and-align.rs \
637 spawn-fn.rs \
638 spawn-module-qualified.rs \
639 spawn.rs \
640 str-append.rs \
641 syntax-extension-fmt.rs \
642 syntax-extension-shell.rs \
643 task-comm-0.rs \
644 task-comm-1.rs \
645 task-comm-10.rs \
646 task-comm-11.rs \
647 task-comm-12.rs \
648 task-comm-13-thread.rs \
649 task-comm-13.rs \
650 task-comm-15.rs \
651 task-comm-2.rs \
652 task-comm-3.rs \
653 task-comm-4.rs \
654 task-comm-5.rs \
655 task-comm-6.rs \
656 task-comm-7.rs \
657 task-comm-8.rs \
658 task-comm-9.rs \
659 task-comm.rs \
660 task-killjoin.rs \
661 task-life-0.rs \
662 threads.rs \
663 type-sizes.rs \
664 typestate-cfg-nesting.rs \
665 user.rs \
666 utf8.rs \
667 vec-alloc-append.rs \
668 vec-append.rs \
669 vec-slice.rs \
670 while-with-break.rs \
671 yield.rs \
672 yield2.rs \
673 multi.rc \
674 native-mod.rc \
675 native.rc \
676 ) \
677 $(filter-out \
678 $(addprefix $(S)src/test/compile-fail/, \
679 alt-tag-nullary.rs \
680 alt-tag-unary.rs \
681 arg-count-mismatch.rs \
682 arg-type-mismatch.rs \
683 bad-expr-path.rs \
684 bad-expr-path2.rs \
685 bogus-tag.rs \
686 fru-extra-field.rs \
687 import.rs \
688 import2.rs \
689 import3.rs \
690 import4.rs \
691 import-loop.rs \
692 import-loop-2.rs \
693 multiline-comment-line-tracking.rs \
694 output-type-mismatch.rs \
695 rec-missing-fields.rs \
696 reserved-dec.rs \
697 reserved-f128.rs \
698 reserved-f16.rs \
699 reserved-f80.rs \
700 reserved-m128.rs \
701 reserved-m32.rs \
702 reserved-m64.rs \
703 tail-non-call.rs \
704 tail-typeck.rs \
705 type-shadow.rs \
706 while-type-error.rs \
707 wrong-ret-type.rs \
708 ), \
709 $(wildcard $(S)src/test/*fail/*.rs test/*fail/*.rc)) \
710 $(S)src/test/bench/shootout/fannkuchredux.rs \
711 $(S)src/test/bench/shootout/fasta.rs \
712 $(S)src/test/bench/shootout/binarytrees.rs \
713 $(wildcard $(S)src/test/bench/99-bottles/*rs)
714
715ifdef MINGW_CROSS
716TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
717TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
718endif
719ifdef CFG_WINDOWSY
720TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
721TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
722endif
723
724BENCH_RS := $(wildcard $(S)src/test/bench/shootout/*.rs) \
725 $(wildcard $(S)src/test/bench/99-bottles/*.rs)
726RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
727RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_RS)
728RFAIL_RC := $(wildcard $(S)src/test/run-fail/*.rc)
729RFAIL_RS := $(wildcard $(S)src/test/run-fail/*.rs)
730CFAIL_RC := $(wildcard $(S)src/test/compile-fail/*.rc)
731CFAIL_RS := $(wildcard $(S)src/test/compile-fail/*.rs)
732
733ifdef CHECK_XFAILS
734TEST_RPASS_CRATES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RC))
735TEST_RPASS_CRATES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
736TEST_RPASS_SOURCES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RS))
737TEST_RPASS_SOURCES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
738else
739TEST_RPASS_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RC))
740TEST_RPASS_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
741TEST_RPASS_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RS))
742TEST_RPASS_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
743endif
744
745TEST_RPASS_EXES_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01746 $(subst $(S)src/,,$(TEST_RPASS_CRATES_BOOT:.rc=.boot$(X))) \
747 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56748TEST_RPASS_EXES_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01749 $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE0:.rc=.stage0$(X))) \
750 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56751
752TEST_RPASS_OUTS_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01753 $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare68d76c22011-03-21 20:41:56754TEST_RPASS_OUTS_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01755 $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare68d76c22011-03-21 20:41:56756
757TEST_RPASS_TMPS_BOOT := \
758 $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
759TEST_RPASS_TMPS_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01760 $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56761
762
763TEST_RFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RC))
764TEST_RFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
765TEST_RFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RS))
766TEST_RFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))
767
768TEST_RFAIL_EXES_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01769 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_BOOT:.rc=.boot$(X))) \
770 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56771TEST_RFAIL_EXES_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01772 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
773 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56774
775TEST_RFAIL_OUTS_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01776 $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare68d76c22011-03-21 20:41:56777TEST_RFAIL_OUTS_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01778 $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare68d76c22011-03-21 20:41:56779
780TEST_RFAIL_TMPS_BOOT := \
781 $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
782TEST_RFAIL_TMPS_STAGE0 := \
Graydon Hoare7ed7c022011-03-21 22:53:08783 $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56784
785
786TEST_CFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RC))
787TEST_CFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
788TEST_CFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RS))
789TEST_CFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))
790
791TEST_CFAIL_EXES_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01792 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_BOOT:.rc=.boot$(X))) \
793 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56794TEST_CFAIL_EXES_STAGE0 := \
Graydon Hoare7ed7c022011-03-21 22:53:08795 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
Graydon Hoare72f7b112011-03-21 21:02:01796 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56797
798TEST_CFAIL_OUTS_BOOT := \
Graydon Hoare72f7b112011-03-21 21:02:01799 $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare68d76c22011-03-21 20:41:56800TEST_CFAIL_OUTS_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01801 $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare68d76c22011-03-21 20:41:56802
803TEST_CFAIL_TMPS_BOOT := \
804 $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
805TEST_CFAIL_TMPS_STAGE0 := \
Graydon Hoare72f7b112011-03-21 21:02:01806 $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56807
808
809ALL_TEST_CRATES := $(TEST_CFAIL_CRATES_BOOT) \
810 $(TEST_RFAIL_CRATES_BOOT) \
811 $(TEST_RPASS_CRATES_BOOT) \
812 $(TEST_CFAIL_CRATES_STAGE0) \
813 $(TEST_RFAIL_CRATES_STAGE0) \
814 $(TEST_RPASS_CRATES_STAGE0)
815
816ALL_TEST_SOURCES := $(TEST_CFAIL_SOURCES_BOOT) \
817 $(TEST_RFAIL_SOURCES_BOOT) \
818 $(TEST_RPASS_SOURCES_BOOT) \
819 $(TEST_CFAIL_SOURCES_STAGE0) \
820 $(TEST_RFAIL_SOURCES_STAGE0) \
821 $(TEST_RPASS_SOURCES_STAGE0)
822
823ALL_TEST_INPUTS := $(wildcard $(S)src/test/*/*.rs \
824 $(S)src/test/*/*/*.rs \
825 $(S)src/test/*/*.rc)
826
827# The test suite currently relies on logging to validate results so
828# make sure that logging uses the default configuration
829unexport RUST_LOG
830
831
832check_nocompile: $(TEST_CFAIL_OUTS_BOOT) \
833 $(TEST_CFAIL_OUTS_STAGE0)
834
835check: tidy \
836 $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
837 $(TEST_RPASS_OUTS_BOOT) $(TEST_RFAIL_OUTS_BOOT) \
838 $(TEST_CFAIL_OUTS_BOOT) \
839 $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
840 $(TEST_RPASS_OUTS_STAGE0) $(TEST_RFAIL_OUTS_STAGE0) \
841 $(TEST_CFAIL_OUTS_STAGE0)
842
843
844compile-check: tidy \
845 $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
846 $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0)
847
848
849######################################################################
Graydon Hoare4691a752011-03-20 08:12:26850# Testing rules
851######################################################################
852
Graydon Hoarea36b44d2011-03-21 02:08:37853%.stage0$(X): %.stage0.o rt/$(CFG_RUNTIME) stage0/glue.o
Graydon Hoared22714f2011-03-21 04:05:31854 @$(call E, link [gcc]: $@)
855 $(Q)gcc $(CFG_GCC_CFLAGS) stage0/glue.o -o $@ $< -Lstage0 -Lrt -lrustrt
Graydon Hoare4691a752011-03-20 08:12:26856 @# dsymutil sometimes fails or prints a warning, but the
857 @# program still runs. Since it simplifies debugging other
858 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49859 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoare4691a752011-03-20 08:12:26860
Graydon Hoarec4e00852011-03-21 02:42:27861%.stage1(X): %.stage1.o rt/$(CFG_RUNTIME) stage1/glue.o
Graydon Hoared22714f2011-03-21 04:05:31862 @$(call E, link [gcc]: $@)
863 $(Q)gcc $(CFG_GCC_CFLAGS) stage1/glue.o -o $@ $< -Lstage1 -Lrt -lrustrt
Graydon Hoarec4e00852011-03-21 02:42:27864 @# dsymutil sometimes fails or prints a warning, but the
865 @# program still runs. Since it simplifies debugging other
866 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49867 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoarec4e00852011-03-21 02:42:27868
Graydon Hoare7ed7c022011-03-21 22:53:08869%.stage2$(X): %.stage2.o rt/$(CFG_RUNTIME) stage2/glue.o
Graydon Hoared22714f2011-03-21 04:05:31870 @$(call E, link [gcc]: $@)
871 $(Q)gcc $(CFG_GCC_CFLAGS) stage2/glue.o -o $@ $< -Lstage2 -Lrt -lrustrt
Graydon Hoarec4e00852011-03-21 02:42:27872 @# dsymutil sometimes fails or prints a warning, but the
873 @# program still runs. Since it simplifies debugging other
874 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49875 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoarec4e00852011-03-21 02:42:27876
877
878
879%.boot$(X): %.rs $(BREQ)
880 @$(call E, compile [boot]: $@)
881 $(BOOT) -o $@ $<
882
883%.boot$(X): %.rc $(BREQ)
884 @$(call E, compile [boot]: $@)
885 $(BOOT) -o $@ $<
886
Graydon Hoare4691a752011-03-20 08:12:26887%.stage0.bc: %.rc $(SREQ0)
888 @$(call E, compile [stage0]: $@)
889 $(STAGE0) -o $@ $<
890
891%.stage0.bc: %.rs $(SREQ0)
892 @$(call E, compile [stage0]: $@)
893 $(STAGE0) -o $@ $<
894
Graydon Hoarec4e00852011-03-21 02:42:27895%.stage1.bc: %.rc $(SREQ1)
896 @$(call E, compile [stage1]: $@)
897 $(STAGE1) -o $@ $<
898
899%.stage1.bc: %.rs $(SREQ1)
900 @$(call E, compile [stage1]: $@)
901 $(STAGE1) -o $@ $<
902
903%.stage2.bc: %.rc $(SREQ2)
904 @$(call E, compile [stage2]: $@)
905 $(STAGE2) -o $@ $<
906
907%.stage2.bc: %.rs $(SREQ2)
908 @$(call E, compile [stage2]: $@)
909 $(STAGE2) -o $@ $<
910
911
912
Graydon Hoareb7972d32011-03-19 01:32:31913%.o: %.s
914 @$(call E, assemble [llvm]: $@)
915 $(Q)gcc $(CFG_GCC_CFLAGS) -o $@ -c $<
916
917%.ll: %.bc
918 @$(call E, dis [llvm]: $@)
919 $(Q)$(CFG_LLVM_BINDIR)/llvm-dis -o $@ $<
920
Graydon Hoareb7972d32011-03-19 01:32:31921%.s: %.bc
922 @$(call E, compile [llvm]: $@)
923 $(Q)$(CFG_LLVM_BINDIR)/llc $(CFG_LLC_CFLAGS) -o $@ $<
924
Graydon Hoare4691a752011-03-20 08:12:26925# Cancel the implicit .out rule in GNU make.
926%.out: %
927
928%.out: %.out.tmp
929 $(Q)mv $< $@
930
Graydon Hoare65974392011-03-21 20:42:29931test/run-pass/%.out.tmp: test/run-pass/%$(X) rt/$(CFG_RUNTIME)
Graydon Hoare4691a752011-03-20 08:12:26932 $(Q)rm -f $<.tmp
933 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02934 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26935
936test/bench/shootout/%.out.tmp: test/bench/shootout/%$(X) \
937 rt/$(CFG_RUNTIME)
938 $(Q)rm -f $<.tmp
939 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02940 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26941
942test/bench/99-bottles/%.out.tmp: test/bench/99-bottles/%$(X) \
943 rt/$(CFG_RUNTIME)
944 $(Q)rm -f $<.tmp
945 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02946 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26947
948test/run-fail/%.out.tmp: test/run-fail/%$(X) \
949 rt/$(CFG_RUNTIME)
950 $(Q)rm -f $<.tmp
951 @$(call E, run: $@)
952 $(Q)grep -q error-pattern $(S)src/test/run-fail/$(basename $*).rs
953 $(Q)rm -f $@
Graydon Hoare0eb6be12011-03-21 21:52:02954 $(Q)$(call CFG_RUN_TEST, $<) >$@ 2>&1 ; X=$$? ; \
Graydon Hoare4691a752011-03-20 08:12:26955 if [ $$X -eq 0 ] ; then exit 1 ; else exit 0 ; fi
956 $(Q)grep --text --quiet \
957 "$$(grep error-pattern $(S)src/test/run-fail/$(basename $*).rs \
958 | cut -d : -f 2- | tr -d '\n\r')" $@
959
960test/compile-fail/%.boot.out.tmp: test/compile-fail/%.rs $(BREQ)
961 @$(call E, compile [boot]: $@)
962 $(Q)grep -q error-pattern $<
963 $(Q)rm -f $@
964 $(BOOT) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
965 $(Q)grep --text --quiet \
966 "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@
967
968test/compile-fail/%.stage0.out.tmp: test/compile-fail/%.rs $(SREQ0)
969 @$(call E, compile [stage0]: $@)
970 $(Q)grep -q error-pattern $<
971 $(Q)rm -f $@
972 $(STAGE0) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
973 $(Q)grep --text --quiet \
974 "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@
975
Graydon Hoare6e1f52e2011-03-22 23:57:31976
977######################################################################
978# Auto-dependency
979######################################################################
980
981ML_DEPFILES := $(BOOT_MLS:%.ml=%.d)
982C_DEPFILES := $(RUNTIME_CS:%.cpp=%.d) $(RUSTLLVM_CS:%.cpp=%.d)
983
984rt/%.d: rt/%.cpp $(MKFILES)
985 @$(call E, dep: $@)
986 $(Q)$(call CFG_DEPEND_C, $@ \
987 $(subst $(S)src/,,$(patsubst %.cpp, %.o, $<)), \
988 $(RUNTIME_INCS)) $< >[email protected]
989 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:28990 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:31991 $(Q)mv [email protected] $@
992
993rustllvm/%.d: rustllvm/%.cpp $(MKFILES)
994 @$(call E, dep: $@)
995 $(Q)$(call CFG_DEPEND_C, $@ \
996 $(subst $(S)src/,,$(patsubst %.cpp, %.o, $<)), \
997 $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $< >[email protected]
998 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:28999 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311000 $(Q)mv [email protected] $@
1001
1002%.d: %.ml $(MKFILES)
1003 @$(call E, dep: $@)
1004 $(Q)ocamldep$(OPT) -slash $(BOOT_ML_DEP_INCS) $< >[email protected]
1005 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:281006 $(Q)rm -f [email protected]
1007 $(Q)perl -i.bak -pe "s@$(S)src/@@go" [email protected]
1008 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311009 $(Q)mv [email protected] $@
1010
1011%.d: %.mli $(MKFILES)
1012 @$(call E, dep: $@)
1013 $(Q)ocamldep$(OPT) -slash $(BOOT_ML_DEP_INCS) $< >[email protected]
1014 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:281015 $(Q)rm -f [email protected]
1016 $(Q)perl -i.bak -pe "s@$(S)src/@@go" [email protected]
1017 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311018 $(Q)mv [email protected] $@
1019
1020ifneq ($(MAKECMDGOALS),clean)
1021-include $(ML_DEPFILES) $(C_DEPFILES)
1022endif
1023
1024RUSTBOOT_PROBE := $(wildcard boot/rustboot$(X))
1025
1026ifneq ($(RUSTBOOT_PROBE),)
1027CFG_INFO := $(info cfg: using built boot/rustboot$(X) for rust deps)
1028CRATE_DEPFILES := $(subst $(S)src/,,$(ALL_TEST_CRATES:%.rc=%.d)) \
1029 boot/$(CFG_STDLIB).d \
1030 stage0/rustc$(X).d \
1031 stage0/$(CFG_STDLIB).d
1032
1033boot/$(CFG_STDLIB).d: $(STDLIB_CRATE) $(STDLIB_INPUTS) \
1034 $(MKFILES) boot/rustboot$(X)
1035 @$(call E, dep: $@)
1036 $(BOOT) -o $(patsubst %.d,%,$@) -shared -rdeps $< >[email protected]
1037 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:281038 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311039 $(Q)mv [email protected] $@
1040
1041stage0/rustc$(X).d: $(COMPILER_CRATE) $(COMPILER_INPUTS) \
1042 $(STDLIB_CRATE) $(MKFILES) boot/rustboot$(X)
1043 @$(call E, dep: $@)
1044 $(BOOT) -o $(patsubst %.d,%,$@) -shared -rdeps $< >[email protected]
1045 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:281046 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311047 $(Q)mv [email protected] $@
1048
1049%.d: %.rc $(MKFILES) boot/rustboot$(X)
1050 @$(call E, dep: $@)
1051 $(BOOT) -o $(patsubst %.d,%,$@) -rdeps $< >[email protected]
1052 $(Q)$(CFG_PATH_MUNGE) [email protected]
Graydon Hoaree6969922011-03-23 21:35:281053 $(Q)rm -f [email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311054 $(Q)mv [email protected] $@
1055
1056ifneq ($(MAKECMDGOALS),clean)
1057-include $(CRATE_DEPFILES)
1058endif
1059endif
1060
1061depend: boot/rustboot$(X) $(CRATE_DEPFILES) $(ML_DEPFILES) $(C_DEPFILES)
1062
Graydon Hoaree961f532011-03-21 18:23:191063######################################################################
1064# Distribution
1065######################################################################
1066
1067PKG_NAME := rust
1068PKG_VER = $(shell date +"%Y-%m-%d")-snap
1069PKG_DIR = $(PKG_NAME)-$(PKG_VER)
1070PKG_TAR = $(PKG_DIR).tar.gz
1071
Graydon Hoare5e0ef2a2011-03-21 20:42:141072PKG_3RDPARTY := rt/valgrind.h rt/memcheck.h \
1073 rt/isaac/rand.h rt/isaac/standard.h \
1074 rt/uthash/uthash.h rt/uthash/utlist.h \
1075 rt/bigint/bigint.h rt/bigint/bigint_int.cpp \
1076 rt/bigint/bigint_ext.cpp rt/bigint/low_primes.h
1077
1078PKG_FILES :=\
1079 $(wildcard $(S)src/etc/*.*) \
1080 $(S)LICENSE.txt $(S)README \
1081 $(S)configure $(S)Makefile.in \
1082 $(addprefix $(S)src/, \
1083 README boot/README comp/README \
1084 $(filter-out $(GENERATED), $(BOOT_MLS)) \
1085 $(RUNTIME_CS) $(RUNTIME_HDR) \
Graydon Hoare7ac885e2011-03-22 06:06:421086 $(RUSTLLVM_CS) $(RUSTLLVM_HDR) \
Graydon Hoare5e0ef2a2011-03-21 20:42:141087 $(PKG_3RDPARTY)) \
Graydon Hoareea1321f2011-03-21 23:16:151088 $(GENERATED) \
1089 $(S)src/boot/fe/lexer.ml \
Graydon Hoare5e0ef2a2011-03-21 20:42:141090 $(COMPILER_INPUTS) \
1091 $(STDLIB_INPUTS) \
1092 $(ALL_TEST_INPUTS) \
1093 $(GENERATED)
1094
1095dist: $(PKG_TAR)
1096
Graydon Hoareea1321f2011-03-21 23:16:151097$(PKG_TAR): $(GENERATED)
Graydon Hoare5e0ef2a2011-03-21 20:42:141098 @$(call E, making dist dir)
1099 $(Q)rm -Rf dist
1100 $(Q)mkdir -p dist/$(PKG_DIR)
1101 $(Q)tar -c $(PKG_FILES) | tar -x -C dist/$(PKG_DIR)
1102 $(Q)tar -czf $(PKG_TAR) -C dist $(PKG_DIR)
1103 $(Q)rm -Rf dist
1104
1105distcheck: $(PKG_TAR)
Graydon Hoareea1321f2011-03-21 23:16:151106 $(Q)rm -Rf dist
1107 $(Q)mkdir -p dist
1108 @$(call E, unpacking $(PKG_TAR) in dist/$(PKG_DIR))
1109 $(Q)cd dist && tar -xzf ../$(PKG_TAR)
Graydon Hoare5e0ef2a2011-03-21 20:42:141110 @$(call E, configuring in dist/$(PKG_DIR)-build)
Graydon Hoareea1321f2011-03-21 23:16:151111 $(Q)mkdir -p dist/$(PKG_DIR)-build
Graydon Hoare5e0ef2a2011-03-21 20:42:141112 $(Q)cd dist/$(PKG_DIR)-build && ../$(PKG_DIR)/configure
1113 @$(call E, making 'check' in dist/$(PKG_DIR)-build)
1114 $(Q)make -C dist/$(PKG_DIR)-build check
1115 @$(call E, making 'clean' in dist/$(PKG_DIR)-build)
1116 $(Q)make -C dist/$(PKG_DIR)-build clean
1117 $(Q)rm -Rf dist
1118 @echo
1119 @echo -----------------------------------------------
1120 @echo $(PKG_TAR) ready for distribution
1121 @echo -----------------------------------------------
1122
Graydon Hoare3ae9ca42011-03-17 21:26:241123
1124######################################################################
1125# Cleanup
1126######################################################################
1127
1128.PHONY: clean
1129
Graydon Hoare5e0ef2a2011-03-21 20:42:141130tidy:
1131 @$(call E, check: formatting)
Graydon Hoare0a42d5a2011-03-23 22:05:541132 $(Q)echo \
Graydon Hoareea1321f2011-03-21 23:16:151133 $(filter-out $(GENERATED) $(addprefix $(S)src/, $(GENERATED)) \
Graydon Hoare7ac885e2011-03-22 06:06:421134 $(addprefix $(S)src/, $(RUSTLLVM_CS) $(RUSTLLVM_HDR) \
1135 $(PKG_3RDPARTY)) \
Graydon Hoare0a42d5a2011-03-23 22:05:541136 $(S)src/etc/%, $(PKG_FILES)) \
1137 | xargs -n 10 python $(S)src/etc/tidy.py
Graydon Hoare5e0ef2a2011-03-21 20:42:141138
Graydon Hoare3ae9ca42011-03-17 21:26:241139clean:
1140 @$(call E, cleaning)
Graydon Hoaree961f532011-03-21 18:23:191141 $(Q)rm -f $(RUNTIME_OBJS)
Graydon Hoare7ac885e2011-03-22 06:06:421142 $(Q)rm -f $(RUSTLLVM_OBJS)
Graydon Hoaree961f532011-03-21 18:23:191143 $(Q)rm -f $(BOOT_CMOS) $(BOOT_CMIS) $(BOOT_CMXS) $(BOOT_OBJS)
1144 $(Q)rm -f $(ML_DEPFILES) $(C_DEPFILES) $(CRATE_DEPFILES)
1145 $(Q)rm -f $(ML_DEPFILES:%.d=%.d.tmp)
1146 $(Q)rm -f $(C_DEPFILES:%.d=%.d.tmp)
1147 $(Q)rm -f $(CRATE_DEPFILES:%.d=%.d.tmp)
1148 $(Q)rm -f $(GENERATED)
1149 $(Q)rm -f boot/rustboot$(X) boot/$(CFG_STDLIB)
1150 $(Q)rm -f stage0/rustc$(X) stage0/$(CFG_STDLIB) stage0/glue*
1151 $(Q)rm -f stage1/rustc$(X) stage1/$(CFG_STDLIB) stage1/glue*
1152 $(Q)rm -f stage2/rustc$(X) stage2/$(CFG_STDLIB) stage2/glue*
Graydon Hoare7ac885e2011-03-22 06:06:421153 $(Q)rm -f rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoaree961f532011-03-21 18:23:191154 $(Q)rm -Rf $(PKG_NAME)-*.tar.gz dist
1155 $(Q)rm -f $(foreach ext,cmx cmi cmo cma bc o a d exe,\
1156 $(wildcard boot/*/*.$(ext) boot/*/*/*.$(ext)))
1157 $(Q)rm -Rf $(foreach ext,out out.tmp \
1158 boot$(X) stage0$(X) stage1$(X) stage2$(X) \
1159 bc o s exe dSYM, \
Graydon Hoarea2513432011-03-22 23:58:081160 $(wildcard test/*/*.$(ext) test/bench/*/*.$(ext)))
Graydon Hoare28a4e772011-03-23 17:37:351161 $(Q)rm -Rf $(foreach ext, \
Graydon Hoaree6969922011-03-23 21:35:281162 aux cp fn ky log pdf html pg toc tp vr cps texi, \
Graydon Hoare28a4e772011-03-23 17:37:351163 $(wildcard doc/*.$(ext)))