blob: 8954d83053636e9ba194178e8f3ee859d2b4c566 [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
Patrick Waltoned14ea12011-04-08 01:14:1314CFG_GCC_CFLAGS := -fno-strict-aliasing
Graydon Hoare4c2245d2011-03-18 06:51:4515CFG_GCC_LINK_FLAGS :=
16CFG_BOOT_FLAGS := $(BOOT_FLAGS)
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
Patrick Walton3f77e7d2011-04-25 21:20:2830
Graydon Hoare4c2245d2011-03-18 06:51:4531# On Darwin, we need to run dsymutil so the debugging information ends
32# up in the right place. On other platforms, it automatically gets
33# embedded into the executable, so use a no-op command.
34CFG_DSYMUTIL := true
35
36ifeq ($(CFG_OSTYPE), FreeBSD)
Graydon Hoarec328ba12011-03-18 23:05:5637 CFG_LIB_NAME=lib$(1).so
Patrick Waltoned14ea12011-04-08 01:14:1338 CFG_GCC_CFLAGS += -fPIC -march=i686 -I/usr/local/include -O2
Graydon Hoare4c2245d2011-03-18 06:51:4539 CFG_GCC_LINK_FLAGS += -shared -fPIC -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
Patrick Waltona2b9a7c2011-03-24 18:26:4646 CFG_DEF_SUFFIX := .bsd.def
Graydon Hoare9c6e7e62011-03-16 16:17:3247endif
48
Graydon Hoare4c2245d2011-03-18 06:51:4549ifeq ($(CFG_OSTYPE), Linux)
Graydon Hoarec328ba12011-03-18 23:05:5650 CFG_LIB_NAME=lib$(1).so
Patrick Waltoned14ea12011-04-08 01:14:1351 CFG_GCC_CFLAGS += -fPIC -march=i686 -O2
Graydon Hoare4c2245d2011-03-18 06:51:4552 CFG_GCC_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
Rafael Ávila de Espíndolaf8e22cd2011-04-08 17:54:4853 CFG_GCC_DEF_FLAG := -Wl,--export-dynamic,--dynamic-list=
54 CFG_GCC_PRE_LIB_FLAGS := -Wl,-whole-archive
Patrick Walton01485f32011-03-24 21:17:2955 CFG_GCC_POST_LIB_FLAGS := -Wl,-no-whole-archive
Graydon Hoare4c2245d2011-03-18 06:51:4556 ifeq ($(CFG_CPUTYPE), x86_64)
57 CFG_GCC_CFLAGS += -m32
58 CFG_GCC_LINK_FLAGS += -m32
59 endif
60 CFG_UNIXY := 1
Graydon Hoarea978d532011-03-23 20:10:3061 CFG_LDENV := LD_LIBRARY_PATH
Patrick Waltona2b9a7c2011-03-24 18:26:4662 CFG_DEF_SUFFIX := .linux.def
Graydon Hoare4c2245d2011-03-18 06:51:4563endif
64
65ifeq ($(CFG_OSTYPE), Darwin)
Graydon Hoarec328ba12011-03-18 23:05:5666 CFG_LIB_NAME=lib$(1).dylib
Graydon Hoare4c2245d2011-03-18 06:51:4567 CFG_UNIXY := 1
Graydon Hoarea978d532011-03-23 20:10:3068 CFG_LDENV := DYLD_LIBRARY_PATH
Graydon Hoare4c2245d2011-03-18 06:51:4569 CFG_GCC_LINK_FLAGS += -dynamiclib -lpthread
Patrick Walton8c9f5ff2011-03-24 18:43:5170 CFG_GCC_DEF_FLAG := -Wl,-exported_symbols_list,
Graydon Hoare4c2245d2011-03-18 06:51:4571 # Darwin has a very blurry notion of "64 bit", and claims it's running
72 # "on an i386" when the whole userspace is 64-bit and the compiler
73 # emits 64-bit binaries by default. So we just force -m32 here. Smarter
74 # approaches welcome!
Patrick Waltoned14ea12011-04-08 01:14:1375 #
76 # NB: Currently GCC's optimizer breaks rustrt (task-comm-1 hangs) on Darwin.
77 CFG_GCC_CFLAGS += -m32 -O0
Graydon Hoare4c2245d2011-03-18 06:51:4578 CFG_GCC_LINK_FLAGS += -m32
79 CFG_DSYMUTIL := dsymutil
Patrick Waltona2b9a7c2011-03-24 18:26:4680 CFG_DEF_SUFFIX := .darwin.def
Graydon Hoare4c2245d2011-03-18 06:51:4581endif
82
83ifneq ($(findstring MINGW,$(CFG_OSTYPE)),)
84 CFG_WINDOWSY := 1
85endif
86
Graydon Hoareaa1e3312011-03-20 01:34:1987CFG_LDPATH :=$(CFG_BUILD_DIR)/rt
Graydon Hoare7ac885e2011-03-22 06:06:4288CFG_LDPATH :=$(CFG_LDPATH):$(CFG_BUILD_DIR)/rustllvm
Graydon Hoare973fd3c2011-03-29 21:56:2489CFG_TESTLIB=$(dir $(firstword $(1))):$(patsubst .%,%,$(suffix $(1)))
Graydon Hoared7a6c832011-03-29 22:21:3990CFG_EXE_TESTLIB=$(call CFG_TESTLIB,$(patsubst %.exe,%,$(1)))
Graydon Hoareaa1e3312011-03-20 01:34:1991
Graydon Hoare4c2245d2011-03-18 06:51:4592ifdef CFG_WINDOWSY
93 CFG_INFO := $(info cfg: windows-y environment)
94
95 CFG_EXE_SUFFIX := .exe
96 CFG_LIB_NAME=$(1).dll
Graydon Hoareaa1e3312011-03-20 01:34:1997 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
98 CFG_LDPATH :=$(CFG_LDPATH):$$PATH
Graydon Hoare973fd3c2011-03-29 21:56:2499 CFG_RUN_TEST=PATH="$(CFG_LDPATH):$(call CFG_EXE_TESTLIB,$(1))" $(1)
Graydon Hoare0cffc582011-04-24 07:05:47100 CFG_RUN_TARG=PATH="$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH)" $(2)
Graydon Hoare4c2245d2011-03-18 06:51:45101
Graydon Hoaree6969922011-03-23 21:35:28102 CFG_PATH_MUNGE := $(strip perl -i.bak -p \
103 -e 's@\\(\S)@/\1@go;' \
Graydon Hoare24e0fc02011-03-20 01:33:16104 -e 's@^/([a-zA-Z])/@\1:/@o;')
Graydon Hoare4c2245d2011-03-18 06:51:45105 ifdef CFG_FLEXLINK
106 CFG_BOOT_NATIVE := 1
107 endif
Patrick Waltoned14ea12011-04-08 01:14:13108 CFG_GCC_CFLAGS += -march=i686 -O2
Graydon Hoare4c2245d2011-03-18 06:51:45109 CFG_GCC_LINK_FLAGS += -shared -fPIC
Patrick Waltona2b9a7c2011-03-24 18:26:46110 CFG_DEF_SUFFIX := .def
Graydon Hoare4c2245d2011-03-18 06:51:45111endif
112
113ifdef CFG_UNIXY
114 CFG_INFO := $(info cfg: unix-y environment)
115
Patrick Waltone2d4fb02011-03-24 19:40:07116 CFG_PATH_MUNGE := true
Graydon Hoare4c2245d2011-03-18 06:51:45117 CFG_EXE_SUFFIX :=
Graydon Hoareaa1e3312011-03-20 01:34:19118 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_LIBDIR)
Graydon Hoare0cffc582011-04-24 07:05:47119 CFG_RUN_TARG=$(CFG_LDENV)=$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH) $(2)
Graydon Hoare81f3b332011-03-21 18:02:37120 CFG_RUN_TEST=\
Graydon Hoare973fd3c2011-03-29 21:56:24121 $(CFG_LDENV)=$(call CFG_TESTLIB,$(1)):$(CFG_LDPATH) \
Graydon Hoaree80c0d52011-03-21 22:29:59122 $(CFG_VALGRIND) $(1)
Graydon Hoare4c2245d2011-03-18 06:51:45123
124 CFG_BOOT_NATIVE := 1
125
126 ifdef MINGW_CROSS
127 CFG_EXE_SUFFIX := .exe
128 CFG_LIB_NAME=$(1).dll
Graydon Hoareaa1e3312011-03-20 01:34:19129 CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
130 CFG_LDPATH :=$(CFG_LDPATH):$$PATH
Graydon Hoare0cffc582011-04-24 07:05:47131 CFG_RUN_TARG=PATH=$(CFG_BUILD_DIR)/$(1):$(CFG_LDPATH) $(2)
Graydon Hoare973fd3c2011-03-29 21:56:24132 CFG_RUN_TEST=PATH=$(CFG_LDPATH):$(call CFG_EXE_TESTLIB,$(1)) $(1)
Graydon Hoare4c2245d2011-03-18 06:51:45133
134 CFG_INFO := $(info cfg: mingw-cross)
135 CFG_GCC_CROSS := i586-mingw32msvc-
136 CFG_BOOT_FLAGS += -t win32-x86-pe
137 ifdef CFG_VALGRIND
138 CFG_VALGRIND += wine
139 endif
140 CFG_GCC_CFLAGS := -march=i686
141 CFG_GCC_LINK_FLAGS := -shared
142 ifeq ($(CFG_CPUTYPE), x86_64)
143 CFG_GCC_CFLAGS += -m32
144 CFG_GCC_LINK_FLAGS += -m32
145 endif
146 endif
147 ifdef CFG_VALGRIND
148 CFG_VALGRIND += --leak-check=full \
149 --error-exitcode=1 \
150 --quiet --vex-iropt-level=0 \
Graydon Hoare5f646122011-03-21 18:02:15151 --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
Graydon Hoare4c2245d2011-03-18 06:51:45152 endif
153endif
154
155CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
Graydon Hoare7ac885e2011-03-22 06:06:42156CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
Graydon Hoare4c2245d2011-03-18 06:51:45157CFG_STDLIB :=$(call CFG_LIB_NAME,std)
158
159ifdef CFG_GCC
160 CFG_INFO := $(info cfg: using gcc)
161 CFG_GCC_CFLAGS += -Wall -Werror -fno-rtti -fno-exceptions -g
162 CFG_GCC_LINK_FLAGS += -g
163 CFG_COMPILE_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -c -o $(1) $(2)
Graydon Hoare4c2245d2011-03-18 06:51:45164 CFG_DEPEND_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -MT "$(1)" -MM $(2)
Patrick Waltona2b9a7c2011-03-24 18:26:46165 CFG_LINK_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_LINK_FLAGS) -o $(1) \
Patrick Walton8c9f5ff2011-03-24 18:43:51166 $(CFG_GCC_DEF_FLAG)$(3) $(2)
Graydon Hoare4c2245d2011-03-18 06:51:45167else
168 CFG_ERR := $(error please try on a system with gcc)
169endif
170
171ifdef CFG_OCAMLC_OPT
172 $(info cfg: have ocaml native compiler)
173 OPT=.opt
174else
175 $(info cfg: have only ocaml bytecode compiler)
176endif
177
Graydon Hoare94731fa2011-03-30 04:45:09178ifdef CFG_BOOT_PROFILE
179 $(info cfg: forcing native bootstrap compiler (CFG_BOOT_PROFILE))
Graydon Hoare4c2245d2011-03-18 06:51:45180 CFG_BOOT_NATIVE := 1
Graydon Hoare9c6e7e62011-03-16 16:17:32181 CFG_OCAMLOPT_PROFILE_FLAGS := -p
182endif
183
Graydon Hoare94731fa2011-03-30 04:45:09184ifdef CFG_BOOT_DEBUG
185 $(info cfg: forcing bytecode bootstrap compiler (CFG_BOOT_DEBUG))
Graydon Hoare4c2245d2011-03-18 06:51:45186 CFG_BOOT_NATIVE :=
Graydon Hoare9c6e7e62011-03-16 16:17:32187endif
188
Graydon Hoare4c2245d2011-03-18 06:51:45189ifdef CFG_BOOT_NATIVE
Graydon Hoare9c6e7e62011-03-16 16:17:32190 $(info cfg: building native bootstrap compiler)
191else
192 $(info cfg: building bytecode bootstrap compiler)
193endif
194
Graydon Hoare94731fa2011-03-30 04:45:09195ifdef CFG_DISABLE_VALGRIND
196 $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
Graydon Hoare4c2245d2011-03-18 06:51:45197 CFG_VALGRIND :=
Graydon Hoare9c6e7e62011-03-16 16:17:32198endif
199
Graydon Hoare28a4e772011-03-23 17:37:35200DOCS :=
201ifeq ($(CFG_MAKEINFO),)
202 $(info cfg: no makeinfo found, omitting doc/rust.html)
203else
204 DOCS += doc/rust.html
205endif
206
207ifeq ($(CFG_TEXI2PDF),)
208 $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
209else
Graydon Hoaref7407472011-03-23 20:31:51210 ifeq ($(CFG_TEX),)
211 $(info cfg: no tex found, omitting doc/rust.pdf)
212 else
213 DOCS += doc/rust.pdf
214 endif
Graydon Hoare28a4e772011-03-23 17:37:35215endif
216
Graydon Hoare94731fa2011-03-30 04:45:09217ifdef CFG_DISABLE_DOCS
218 $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
219 DOCS :=
220endif
Graydon Hoare28a4e772011-03-23 17:37:35221
Graydon Hoare4c2245d2011-03-18 06:51:45222######################################################################
223# Target-and-rule "utility variables"
224######################################################################
225
226ifdef VERBOSE
227 Q :=
228 E =
229else
230 Q := @
231 E = echo $(1)
232endif
233
Graydon Hoare4c2245d2011-03-18 06:51:45234S := $(CFG_SRC_DIR)
235X := $(CFG_EXE_SUFFIX)
236
237# Look in doc and src dirs.
238VPATH := $(S)doc $(S)src
239
240# Compilers we build, we now know how to run.
Graydon Hoarec4e00852011-03-21 02:42:27241BOOT := $(Q)OCAMLRUNPARAM="b1" boot/rustboot$(X) $(CFG_BOOT_FLAGS) -L boot
Graydon Hoare0cffc582011-04-24 07:05:47242STAGE0 := $(Q)$(call CFG_RUN_TARG,boot,\
Graydon Hoare0eb6be12011-03-21 21:52:02243 stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage0)
Graydon Hoare0cffc582011-04-24 07:05:47244STAGE1 := $(Q)$(call CFG_RUN_TARG,stage0, \
Graydon Hoare0eb6be12011-03-21 21:52:02245 stage1/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1)
Graydon Hoare0cffc582011-04-24 07:05:47246STAGE2 := $(Q)$(call CFG_RUN_TARG,stage1, \
247 stage2/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage2)
Graydon Hoare4c2245d2011-03-18 06:51:45248
249# "Source" files we generate in builddir along the way.
250GENERATED := boot/fe/lexer.ml boot/version.ml
251
252# Delete the built-in rules.
253.SUFFIXES:
254%:: %,v
255%:: RCS/%,v
256%:: RCS/%
257%:: s.%
258%:: SCCS/s.%
Graydon Hoare9c6e7e62011-03-16 16:17:32259
260######################################################################
261# Bootstrap compiler variables
262######################################################################
263
264# We must list them in link order.
265# Nobody calculates the link-order DAG automatically, sadly.
266
267BOOT_MLS := \
268 $(addsuffix .ml, \
Graydon Hoare3ae9ca42011-03-17 21:26:24269 boot/version \
270 $(addprefix boot/util/, fmt common bits) \
Graydon Hoare9c6e7e62011-03-16 16:17:32271 $(addprefix boot/driver/, session) \
272 $(addprefix boot/fe/, ast token lexer parser \
273 extfmt pexp item cexp fuzz) \
274 $(addprefix boot/be/, asm il abi) \
275 $(addprefix boot/me/, walk semant resolve alias \
Graydon Hoared2bd07d2011-04-19 20:35:49276 simplify type dead layer typestate \
Graydon Hoare9c6e7e62011-03-16 16:17:32277 loop layout transutil trans dwarf) \
278 $(addprefix boot/be/, x86 ra pe elf macho) \
279 $(addprefix boot/driver/, lib glue main)) \
280
281BOOT_CMOS := $(BOOT_MLS:.ml=.cmo)
282BOOT_CMXS := $(BOOT_MLS:.ml=.cmx)
283BOOT_OBJS := $(BOOT_MLS:.ml=.o)
284BOOT_CMIS := $(BOOT_MLS:.ml=.cmi)
285
Graydon Hoare0c06f512011-03-22 23:57:44286BS := $(S)src/boot
Graydon Hoare9c6e7e62011-03-16 16:17:32287
Graydon Hoare4c2245d2011-03-18 06:51:45288BOOT_ML_DEP_INCS := -I $(BS)/fe -I $(BS)/me \
289 -I $(BS)/be -I $(BS)/driver \
290 -I $(BS)/util -I boot
291
292BOOT_ML_INCS := -I boot/fe -I boot/me \
293 -I boot/be -I boot/driver \
294 -I boot/util -I boot
295
Graydon Hoare3ae9ca42011-03-17 21:26:24296BOOT_ML_LIBS := unix.cma nums.cma bigarray.cma
297BOOT_ML_NATIVE_LIBS := unix.cmxa nums.cmxa bigarray.cmxa
298BOOT_OCAMLC_FLAGS := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
Graydon Hoare4c2245d2011-03-18 06:51:45299BOOT_OCAMLOPT_FLAGS := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
Graydon Hoare9c6e7e62011-03-16 16:17:32300
Patrick Waltonb7003ae2011-03-23 23:36:43301ifdef CFG_FLEXLINK
302 BOOT_OCAMLOPT_FLAGS += -cclib -L/usr/lib
303endif
304
Graydon Hoare9c6e7e62011-03-16 16:17:32305######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45306# Runtime (C++) library variables
Graydon Hoare9c6e7e62011-03-16 16:17:32307######################################################################
308
Graydon Hoare4c2245d2011-03-18 06:51:45309RUNTIME_CS := rt/sync/timer.cpp \
310 rt/sync/sync.cpp \
311 rt/sync/lock_and_signal.cpp \
312 rt/rust.cpp \
313 rt/rust_builtin.cpp \
314 rt/rust_run_program.cpp \
315 rt/rust_crate.cpp \
316 rt/rust_crate_cache.cpp \
317 rt/rust_crate_reader.cpp \
318 rt/rust_comm.cpp \
319 rt/rust_dom.cpp \
320 rt/rust_task.cpp \
321 rt/rust_task_list.cpp \
322 rt/rust_proxy.cpp \
323 rt/rust_chan.cpp \
324 rt/rust_port.cpp \
325 rt/rust_upcall.cpp \
326 rt/rust_log.cpp \
327 rt/rust_message.cpp \
328 rt/rust_timer.cpp \
329 rt/circular_buffer.cpp \
330 rt/isaac/randport.cpp \
331 rt/rust_srv.cpp \
332 rt/rust_kernel.cpp \
333 rt/memory_region.cpp \
334 rt/test/rust_test_harness.cpp \
335 rt/test/rust_test_runtime.cpp \
336 rt/test/rust_test_util.cpp
Graydon Hoare9c6e7e62011-03-16 16:17:32337
Graydon Hoare4c2245d2011-03-18 06:51:45338RUNTIME_HDR := rt/globals.h \
339 rt/rust.h \
340 rt/rust_dwarf.h \
341 rt/rust_internal.h \
342 rt/rust_util.h \
343 rt/rust_chan.h \
344 rt/rust_port.h \
345 rt/rust_dom.h \
346 rt/rust_task.h \
347 rt/rust_task_list.h \
348 rt/rust_proxy.h \
349 rt/rust_log.h \
350 rt/rust_message.h \
351 rt/circular_buffer.h \
352 rt/util/array_list.h \
353 rt/util/indexed_list.h \
354 rt/util/synchronized_indexed_list.h \
355 rt/util/hash_map.h \
356 rt/sync/sync.h \
357 rt/sync/timer.h \
Graydon Hoareea1321f2011-03-21 23:16:15358 rt/sync/lock_and_signal.h \
Graydon Hoare4c2245d2011-03-18 06:51:45359 rt/sync/lock_free_queue.h \
360 rt/rust_srv.h \
361 rt/rust_kernel.h \
362 rt/memory_region.h \
363 rt/memory.h \
364 rt/test/rust_test_harness.h \
365 rt/test/rust_test_runtime.h \
366 rt/test/rust_test_util.h
Graydon Hoare9c6e7e62011-03-16 16:17:32367
Patrick Waltonf284c5c2011-03-24 19:22:28368RUNTIME_DEF := rt/rustrt$(CFG_DEF_SUFFIX)
Graydon Hoare4c2245d2011-03-18 06:51:45369RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash
370RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o)
Patrick Walton01485f32011-03-24 21:17:29371RUNTIME_LIBS := $(CFG_GCC_POST_LIB_FLAGS)
Graydon Hoare9c6e7e62011-03-16 16:17:32372
373######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45374# rustc LLVM-extensions (C++) library variables
Graydon Hoare9c6e7e62011-03-16 16:17:32375######################################################################
376
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11377RUSTLLVM_LIB_CS := $(addprefix rustllvm/, \
Rafael Ávila de Espíndola01b1d412011-04-13 18:20:36378 MachOObjectFile.cpp Passes.cpp)
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11379
380RUSTLLVM_OBJS_CS := $(addprefix rustllvm/, RustWrapper.cpp)
Graydon Hoare9c6e7e62011-03-16 16:17:32381
Graydon Hoare7ac885e2011-03-22 06:06:42382RUSTLLVM_HDR := rustllvm/include/llvm-c/Object.h
Patrick Waltonf284c5c2011-03-24 19:22:28383RUSTLLVM_DEF := rustllvm/rustllvm$(CFG_DEF_SUFFIX)
Graydon Hoare4c2245d2011-03-18 06:51:45384
Graydon Hoare7ac885e2011-03-22 06:06:42385RUSTLLVM_INCS := -iquote $(CFG_LLVM_INCDIR) \
386 -iquote $(S)src/rustllvm/include
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11387RUSTLLVM_LIB_OBJS := $(RUSTLLVM_LIB_CS:.cpp=.o)
388RUSTLLVM_OBJS_OBJS := $(RUSTLLVM_OBJS_CS:.cpp=.o)
Graydon Hoare4c2245d2011-03-18 06:51:45389
390######################################################################
391# Standard library variables
392######################################################################
393
Graydon Hoare65974392011-03-21 20:42:29394STDLIB_CRATE := $(S)src/lib/std.rc
Graydon Hoare4c2245d2011-03-18 06:51:45395STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
396
397######################################################################
398# rustc crate variables
399######################################################################
400
Graydon Hoare65974392011-03-21 20:42:29401COMPILER_CRATE := $(S)src/comp/rustc.rc
Graydon Hoare874a7bf2011-03-19 00:30:06402COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
Graydon Hoare4c2245d2011-03-18 06:51:45403 rustc.rc *.rs */*.rs))
404
405######################################################################
Graydon Hoare28a4e772011-03-23 17:37:35406# Test dependency variables
Graydon Hoare4691a752011-03-20 08:12:26407######################################################################
408
Graydon Hoare7ac885e2011-03-22 06:06:42409LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM)
Graydon Hoare4691a752011-03-20 08:12:26410BREQ := boot/rustboot$(X) boot/$(CFG_STDLIB)
Graydon Hoareb55c8332011-03-30 00:33:33411SREQ0 := stage0/rustc$(X) $(LREQ) stage0/glue.o stage0/$(CFG_STDLIB)
412SREQ1 := stage1/rustc$(X) $(LREQ) stage1/glue.o stage1/$(CFG_STDLIB)
413SREQ2 := stage2/rustc$(X) $(LREQ) stage2/glue.o stage2/$(CFG_STDLIB)
Graydon Hoare4691a752011-03-20 08:12:26414
Graydon Hoare28a4e772011-03-23 17:37:35415
Graydon Hoare4691a752011-03-20 08:12:26416######################################################################
Graydon Hoare4c2245d2011-03-18 06:51:45417# Single-target rules
418######################################################################
419
Graydon Hoarea599d802011-03-19 00:41:32420all: boot/rustboot$(X) \
Graydon Hoare4691a752011-03-20 08:12:26421 boot/$(CFG_STDLIB) \
Graydon Hoarea599d802011-03-19 00:41:32422 rt/$(CFG_RUNTIME) \
Graydon Hoare7ac885e2011-03-22 06:06:42423 rustllvm/$(CFG_RUSTLLVM) \
Graydon Hoarea599d802011-03-19 00:41:32424 stage0/rustc$(X) \
Graydon Hoareb7972d32011-03-19 01:32:31425 stage0/glue.o \
Graydon Hoare4691a752011-03-20 08:12:26426 stage0/$(CFG_STDLIB) \
Graydon Hoare28a4e772011-03-23 17:37:35427 $(GENERATED) \
428 $(DOCS)
Graydon Hoare4c2245d2011-03-18 06:51:45429
Patrick Waltone6d33082011-03-22 01:05:34430rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF)
Graydon Hoare4c2245d2011-03-18 06:51:45431 @$(call E, link: $@)
Patrick Walton01485f32011-03-24 21:17:29432 $(Q)$(call CFG_LINK_C,$@,$(RUNTIME_LIBS) $(RUNTIME_OBJS),$(RUNTIME_DEF))
Graydon Hoare4c2245d2011-03-18 06:51:45433
Rafael Ávila de Espíndolaf8e22cd2011-04-08 17:54:48434# FIXME: Building a .a is a hack so that we build with both older and newer
435# versions of LLVM. In newer versions some of the bits of this library are
436# already in LLVM itself, so they are skipped.
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11437rustllvm/rustllvmbits.a: $(RUSTLLVM_LIB_OBJS)
Rafael Ávila de Espíndolaf8e22cd2011-04-08 17:54:48438 rm -f $@
439 ar crs $@ $^
440
Rafael Ávila de Espíndola4bd8dcc2011-04-11 19:05:18441# Note: We pass $(CFG_LLVM_LIBS) twice to fix the windows link since
442# it has no -whole-archive.
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11443rustllvm/$(CFG_RUSTLLVM): rustllvm/rustllvmbits.a $(RUSTLLVM_OBJS_OBJS) \
444 $(MKFILES) $(RUSTLLVM_HDR) $(RUSTLLVM_DEF)
Graydon Hoare4c2245d2011-03-18 06:51:45445 @$(call E, link: $@)
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11446 $(Q)$(call CFG_LINK_C,$@,$(RUSTLLVM_OBJS_OBJS) \
447 $(CFG_GCC_PRE_LIB_FLAGS) $(CFG_LLVM_LIBS) \
448 $(CFG_GCC_POST_LIB_FLAGS) rustllvm/rustllvmbits.a \
Rafael Ávila de Espíndola4bd8dcc2011-04-11 19:05:18449 $(CFG_LLVM_LIBS) \
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11450 $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF))
Graydon Hoare4c2245d2011-03-18 06:51:45451
452ifdef CFG_BOOT_NATIVE
Graydon Hoare3ae9ca42011-03-17 21:26:24453boot/rustboot$(X): $(BOOT_CMXS) $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45454 @$(call E, link: $@)
455 $(Q)ocamlopt$(OPT) -o $@ $(BOOT_OCAMLOPT_FLAGS) $(BOOT_ML_NATIVE_LIBS) \
Graydon Hoare9c6e7e62011-03-16 16:17:32456 $(BOOT_CMXS)
457else
Graydon Hoare3ae9ca42011-03-17 21:26:24458boot/rustboot$(X): $(BOOT_CMOS) $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45459 @$(call E, link: $@)
Graydon Hoare3ae9ca42011-03-17 21:26:24460 $(Q)ocamlc$(OPT) -o $@ $(BOOT_OCAMLC_FLAGS) $(BOOT_ML_LIBS) $(BOOT_CMOS)
Graydon Hoare9c6e7e62011-03-16 16:17:32461endif
462
Graydon Hoare3ae9ca42011-03-17 21:26:24463boot/version.ml: $(MKFILES)
464 @$(call E, git: $@)
Graydon Hoaref052d9b2011-03-23 18:34:10465 $(Q)(cd $(S) && git log -1 \
466 --pretty=format:'let version = "prerelease (%h %ci)";;') >$@ || exit 1
Graydon Hoare9c6e7e62011-03-16 16:17:32467
Graydon Hoare74a585e2011-03-20 05:55:28468
Graydon Hoarec4e00852011-03-21 02:42:27469
Graydon Hoare65974392011-03-21 20:42:29470boot/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
Graydon Hoare4691a752011-03-20 08:12:26471 boot/rustboot$(X) $(MKFILES)
Graydon Hoarea599d802011-03-19 00:41:32472 @$(call E, compile: $@)
473 $(BOOT) -shared -o $@ $<
474
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30475stage0/std.o: $(STDLIB_CRATE) $(STDLIB_INPUTS) stage0/rustc$(X) $(MKFILES)
Graydon Hoare74a585e2011-03-20 05:55:28476 @$(call E, compile: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08477 $(STAGE0) -c --shared -o $@ $<
Graydon Hoare74a585e2011-03-20 05:55:28478
Patrick Walton0b9cf792011-03-25 01:43:32479stage0/$(CFG_STDLIB): stage0/std.o stage0/glue.o
480 @$(call E, link: $@)
481 $(Q)gcc $(CFG_GCC_CFLAGS) stage0/glue.o $(CFG_GCC_LINK_FLAGS) -o $@ $< \
482 -Lstage0 -Lrt -lrustrt
483
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30484stage1/std.o: $(STDLIB_CRATE) $(STDLIB_INPUTS) stage1/rustc$(X) $(MKFILES)
Graydon Hoarec4e00852011-03-21 02:42:27485 @$(call E, compile: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08486 $(STAGE1) -c --shared -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27487
Patrick Walton0b9cf792011-03-25 01:43:32488stage1/$(CFG_STDLIB): stage1/std.o stage1/glue.o
489 @$(call E, link: $@)
490 $(Q)gcc $(CFG_GCC_CFLAGS) stage1/glue.o $(CFG_GCC_LINK_FLAGS) -o $@ $< \
491 -Lstage1 -Lrt -lrustrt
492
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30493stage2/std.o: $(STDLIB_CRATE) $(STDLIB_INPUTS) stage2/rustc$(X) $(MKFILES)
Graydon Hoarec4e00852011-03-21 02:42:27494 @$(call E, compile: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08495 $(STAGE2) -c --shared -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27496
Patrick Walton0b9cf792011-03-25 01:43:32497stage2/$(CFG_STDLIB): stage2/std.o stage2/glue.o
498 @$(call E, link: $@)
499 $(Q)gcc $(CFG_GCC_CFLAGS) stage2/glue.o $(CFG_GCC_LINK_FLAGS) -o $@ $< \
500 -Lstage2 -Lrt -lrustrt
501
Graydon Hoarec4e00852011-03-21 02:42:27502
Graydon Hoare74a585e2011-03-20 05:55:28503
Graydon Hoareb55c8332011-03-30 00:33:33504stage0/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) $(BREQ)
Graydon Hoarea599d802011-03-19 00:41:32505 @$(call E, compile: $@)
506 $(BOOT) -minimal -o $@ $<
507 $(Q)chmod 0755 $@
508
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30509stage1/rustc.o: $(COMPILER_CRATE) $(COMPILER_INPUTS) $(SREQ0)
Graydon Hoare74a585e2011-03-20 05:55:28510 @$(call E, compile: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30511 $(STAGE0) -c -o $@ $<
Graydon Hoare74a585e2011-03-20 05:55:28512
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30513stage2/rustc.o: $(COMPILER_CRATE) $(COMPILER_INPUTS) $(SREQ1)
Graydon Hoarec4e00852011-03-21 02:42:27514 @$(call E, compile: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30515 $(STAGE1) -c -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27516
517
Graydon Hoare74a585e2011-03-20 05:55:28518
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30519stage0/glue.o: stage0/rustc$(X) boot/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42520 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoarea599d802011-03-19 00:41:32521 @$(call E, generate: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08522 $(STAGE0) -c -o $@ --glue
Graydon Hoare4c2245d2011-03-18 06:51:45523
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30524stage1/glue.o: stage1/rustc$(X) stage0/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42525 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoare74a585e2011-03-20 05:55:28526 @$(call E, generate: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08527 $(STAGE1) -c -o $@ --glue
Graydon Hoare74a585e2011-03-20 05:55:28528
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30529stage2/glue.o: stage2/rustc$(X) stage1/$(CFG_STDLIB) \
Graydon Hoare7ac885e2011-03-22 06:06:42530 rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoarec4e00852011-03-21 02:42:27531 @$(call E, generate: $@)
Marijn Haverbeke6b11f6c2011-04-26 18:32:08532 $(STAGE2) -c -o $@ --glue
Graydon Hoarec4e00852011-03-21 02:42:27533
Graydon Hoare6d857c02011-03-31 21:58:17534# Due to make not wanting to run the same implicit rules twice on the same
535# rule tree (implicit-rule recursion prevention, see "Chains of Implicit
536# Rules" in GNU Make manual) we have to re-state the %.o and %.s patterns here
537# for different directories, to handle cases where (say) a test relies on a
538# compiler that relies on a .o file.
539
540stage0/%.o: stage0/%.s
Graydon Hoarec470cd22011-04-20 15:21:16541 @$(call E, assemble [gcc]: $@)
Graydon Hoare6d857c02011-03-31 21:58:17542 $(Q)gcc $(CFG_GCC_CFLAGS) -o $@ -c $<
543
Graydon Hoare6d857c02011-03-31 21:58:17544stage1/%.o: stage1/%.s
Graydon Hoarec470cd22011-04-20 15:21:16545 @$(call E, assemble [gcc]: $@)
Graydon Hoare6d857c02011-03-31 21:58:17546 $(Q)gcc $(CFG_GCC_CFLAGS) -o $@ -c $<
547
Graydon Hoare6d857c02011-03-31 21:58:17548stage2/%.o: stage2/%.s
Graydon Hoarec470cd22011-04-20 15:21:16549 @$(call E, assemble [gcc]: $@)
Graydon Hoare6d857c02011-03-31 21:58:17550 $(Q)gcc $(CFG_GCC_CFLAGS) -o $@ -c $<
551
Graydon Hoarec470cd22011-04-20 15:21:16552stage1/%$(X): stage1/%.o $(SREQ0)
553 @$(call E, link [gcc]: $@)
554 $(Q)gcc $(CFG_GCC_CFLAGS) stage0/glue.o -o $@ $< \
Graydon Hoare186717f2011-04-21 06:07:10555 -Lstage0 -Lrustllvm -Lrt -lrustrt -lrustllvm -lstd -lm
Graydon Hoarec470cd22011-04-20 15:21:16556 @# dsymutil sometimes fails or prints a warning, but the
557 @# program still runs. Since it simplifies debugging other
558 @# programs, I\'ll live with the noise.
559 -$(Q)$(CFG_DSYMUTIL) $@
560
561stage2/%$(X): stage2/%.o $(SREQ1)
562 @$(call E, link [gcc]: $@)
563 $(Q)gcc $(CFG_GCC_CFLAGS) stage1/glue.o -o $@ $< \
Graydon Hoare186717f2011-04-21 06:07:10564 -Lstage1 -Lrustllvm -Lrt -lrustrt -lrustllvm -lstd -lm
Graydon Hoarec470cd22011-04-20 15:21:16565 @# dsymutil sometimes fails or prints a warning, but the
566 @# program still runs. Since it simplifies debugging other
567 @# programs, I\'ll live with the noise.
568 -$(Q)$(CFG_DSYMUTIL) $@
569
Graydon Hoare6d857c02011-03-31 21:58:17570
571
Graydon Hoare4c2245d2011-03-18 06:51:45572######################################################################
Graydon Hoare4691a752011-03-20 08:12:26573# Library and boot rules
Graydon Hoare4c2245d2011-03-18 06:51:45574######################################################################
575
576rt/%.o: rt/%.cpp $(MKFILES)
577 @$(call E, compile: $@)
578 $(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<
579
Graydon Hoare7ac885e2011-03-22 06:06:42580rustllvm/%.o: rustllvm/%.cpp $(MKFILES)
Graydon Hoare4c2245d2011-03-18 06:51:45581 @$(call E, compile: $@)
Graydon Hoare7ac885e2011-03-22 06:06:42582 $(Q)$(call CFG_COMPILE_C, $@, $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $<
Graydon Hoare4c2245d2011-03-18 06:51:45583
Graydon Hoare9c6e7e62011-03-16 16:17:32584%.cmo: %.ml $(MKFILES)
585 @$(call E, compile: $@)
Graydon Hoare3ae9ca42011-03-17 21:26:24586 $(Q)ocamlc$(OPT) -c -o $@ $(BOOT_OCAMLC_FLAGS) $<
Graydon Hoare9c6e7e62011-03-16 16:17:32587
588%.cmo: %.cmi $(MKFILES)
Graydon Hoare3ae9ca42011-03-17 21:26:24589
Graydon Hoare4c2245d2011-03-18 06:51:45590%.cmx %.o: %.ml $(MKFILES)
591 @$(call E, compile: $@)
592 $(Q)ocamlopt$(OPT) -c -o $@ $(BOOT_OCAMLOPT_FLAGS) $<
593
594%.ml: %.mll $(MKFILES)
595 @$(call E, lex-gen: $@)
596 $(Q)ocamllex$(OPT) -q -o $@ $<
Graydon Hoare3ae9ca42011-03-17 21:26:24597
Graydon Hoare4691a752011-03-20 08:12:26598
Patrick Waltonf284c5c2011-03-24 19:22:28599%.linux.def: %.def.in $(MKFILES)
600 @$(call E, def: $@)
601 $(Q)echo "{" > $@
602 $(Q)sed 's/.$$/&;/' $< >> $@
603 $(Q)echo "};" >> $@
604
605%.darwin.def: %.def.in $(MKFILES)
606 @$(call E, def: $@)
607 $(Q)sed 's/^./_&/' $< > $@
608
609ifdef CFG_WINDOWSY
610%.def: %.def.in $(MKFILES)
611 @$(call E, def: $@)
612 $(Q)echo LIBRARY $* > $@
613 $(Q)echo EXPORTS >> $@
614 $(Q)sed 's/^./ &/' $< >> $@
615endif
616
Graydon Hoare4691a752011-03-20 08:12:26617######################################################################
Graydon Hoare28a4e772011-03-23 17:37:35618# Doc rules
619######################################################################
620
621doc/version.texi: $(MKFILES) rust.texi
Graydon Hoaref052d9b2011-03-23 18:34:10622 (cd $(S) && git log -1 \
623 --pretty=format:'@macro gitversion%n%h %ci%n@end macro%n') >$@
Graydon Hoare28a4e772011-03-23 17:37:35624
625doc/%.pdf: %.texi doc/version.texi
626 texi2pdf -I doc -o $@ --clean $<
627
628doc/%.html: %.texi doc/version.texi
629 makeinfo -I doc --html --ifhtml --force --no-split --output=$@ $<
630
631docsnap: doc/rust.pdf
632 mv $< doc/rust-$(shell date +"%Y-%m-%d")-snap.pdf
633
634
635######################################################################
Graydon Hoare68d76c22011-03-21 20:41:56636# Testing variables
637######################################################################
638
Graydon Hoareb628c352011-03-27 00:35:26639ALL_TEST_INPUTS = $(wildcard $(S)src/test/*/*.rs \
640 $(S)src/test/*/*/*.rs \
641 $(S)src/test/*/*.rc)
Graydon Hoared96b8cd2011-03-22 23:58:00642
Graydon Hoareb628c352011-03-27 00:35:26643TEST_XFAILS_BOOT = $(shell grep -l xfail-boot $(ALL_TEST_INPUTS))
644TEST_XFAILS_STAGE0 = $(shell grep -l xfail-stage0 $(ALL_TEST_INPUTS))
Graydon Hoare9eec7e32011-04-24 06:06:29645TEST_XFAILS_STAGE1 = $(shell grep -l xfail-stage1 $(ALL_TEST_INPUTS))
646TEST_XFAILS_STAGE2 = $(shell grep -l xfail-stage2 $(ALL_TEST_INPUTS))
Graydon Hoare68d76c22011-03-21 20:41:56647
648ifdef MINGW_CROSS
649TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
650TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
Graydon Hoare9eec7e32011-04-24 06:06:29651TEST_XFAILS_STAGE1 += $(S)src/test/run-pass/native-mod.rc
652TEST_XFAILS_STAGE2 += $(S)src/test/run-pass/native-mod.rc
Graydon Hoare68d76c22011-03-21 20:41:56653endif
654ifdef CFG_WINDOWSY
655TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
656TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
Graydon Hoare9eec7e32011-04-24 06:06:29657TEST_XFAILS_STAGE1 += $(S)src/test/run-pass/native-mod.rc
658TEST_XFAILS_STAGE2 += $(S)src/test/run-pass/native-mod.rc
Graydon Hoare68d76c22011-03-21 20:41:56659endif
660
Graydon Hoare49d9d562011-03-25 19:19:20661BENCH_RS = $(wildcard $(S)src/test/bench/shootout/*.rs) \
Graydon Hoare68d76c22011-03-21 20:41:56662 $(wildcard $(S)src/test/bench/99-bottles/*.rs)
Graydon Hoare49d9d562011-03-25 19:19:20663RPASS_RC = $(wildcard $(S)src/test/run-pass/*.rc)
664RPASS_RS = $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_RS)
665RFAIL_RC = $(wildcard $(S)src/test/run-fail/*.rc)
666RFAIL_RS = $(wildcard $(S)src/test/run-fail/*.rs)
667CFAIL_RC = $(wildcard $(S)src/test/compile-fail/*.rc)
668CFAIL_RS = $(wildcard $(S)src/test/compile-fail/*.rs)
Graydon Hoare68d76c22011-03-21 20:41:56669
670ifdef CHECK_XFAILS
Graydon Hoare49d9d562011-03-25 19:19:20671TEST_RPASS_CRATES_BOOT = $(filter $(TEST_XFAILS_BOOT), $(RPASS_RC))
672TEST_RPASS_CRATES_STAGE0 = $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
Graydon Hoare9eec7e32011-04-24 06:06:29673TEST_RPASS_CRATES_STAGE1 = $(filter $(TEST_XFAILS_STAGE1), $(RPASS_RC))
674TEST_RPASS_CRATES_STAGE2 = $(filter $(TEST_XFAILS_STAGE2), $(RPASS_RC))
Graydon Hoare49d9d562011-03-25 19:19:20675TEST_RPASS_SOURCES_BOOT = $(filter $(TEST_XFAILS_BOOT), $(RPASS_RS))
676TEST_RPASS_SOURCES_STAGE0 = $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
Graydon Hoare9eec7e32011-04-24 06:06:29677TEST_RPASS_SOURCES_STAGE1 = $(filter $(TEST_XFAILS_STAGE1), $(RPASS_RS))
678TEST_RPASS_SOURCES_STAGE2 = $(filter $(TEST_XFAILS_STAGE2), $(RPASS_RS))
Graydon Hoare68d76c22011-03-21 20:41:56679else
Graydon Hoare49d9d562011-03-25 19:19:20680TEST_RPASS_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RC))
681TEST_RPASS_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
Graydon Hoare9eec7e32011-04-24 06:06:29682TEST_RPASS_CRATES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(RPASS_RC))
683TEST_RPASS_CRATES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE2), $(RPASS_RC))
Graydon Hoare49d9d562011-03-25 19:19:20684TEST_RPASS_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RS))
685TEST_RPASS_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
Graydon Hoare9eec7e32011-04-24 06:06:29686TEST_RPASS_SOURCES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(RPASS_RS))
687TEST_RPASS_SOURCES_STAGE2 = $(filter-out $(TEST_XFAILS_STAGE2), $(RPASS_RS))
Graydon Hoare68d76c22011-03-21 20:41:56688endif
689
Graydon Hoare49d9d562011-03-25 19:19:20690TEST_RPASS_EXES_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01691 $(subst $(S)src/,,$(TEST_RPASS_CRATES_BOOT:.rc=.boot$(X))) \
692 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare49d9d562011-03-25 19:19:20693TEST_RPASS_EXES_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01694 $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE0:.rc=.stage0$(X))) \
695 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare9eec7e32011-04-24 06:06:29696TEST_RPASS_EXES_STAGE1 = \
697 $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE1:.rc=.stage1$(X))) \
698 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE1:.rs=.stage1$(X)))
699TEST_RPASS_EXES_STAGE2 = \
700 $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE1:.rc=.stage2$(X))) \
701 $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE1:.rs=.stage2$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56702
Graydon Hoare49d9d562011-03-25 19:19:20703TEST_RPASS_OUTS_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01704 $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare49d9d562011-03-25 19:19:20705TEST_RPASS_OUTS_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01706 $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare9eec7e32011-04-24 06:06:29707TEST_RPASS_OUTS_STAGE1 = \
708 $(TEST_RPASS_EXES_STAGE1:.stage1$(X)=.stage1.out)
709TEST_RPASS_OUTS_STAGE2 = \
710 $(TEST_RPASS_EXES_STAGE2:.stage2$(X)=.stage2.out)
Graydon Hoare68d76c22011-03-21 20:41:56711
Graydon Hoare49d9d562011-03-25 19:19:20712TEST_RPASS_TMPS_BOOT = \
Graydon Hoare68d76c22011-03-21 20:41:56713 $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
Graydon Hoare49d9d562011-03-25 19:19:20714TEST_RPASS_TMPS_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01715 $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare9eec7e32011-04-24 06:06:29716TEST_RPASS_TMPS_STAGE1 = \
717 $(TEST_RPASS_EXES_STAGE1:.stage1$(X)=.stage1$(X).tmp)
718TEST_RPASS_TMPS_STAGE2 = \
719 $(TEST_RPASS_EXES_STAGE2:.stage2$(X)=.stage2$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56720
721
Graydon Hoare49d9d562011-03-25 19:19:20722TEST_RFAIL_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RC))
723TEST_RFAIL_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
Graydon Hoare9eec7e32011-04-24 06:06:29724TEST_RFAIL_CRATES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(RFAIL_RC))
725TEST_RFAIL_CRATES_STAGE2 = $(filter-out $(TEST_XFAILS_STAGE2), $(RFAIL_RC))
Graydon Hoare49d9d562011-03-25 19:19:20726TEST_RFAIL_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RS))
727TEST_RFAIL_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))
Graydon Hoare9eec7e32011-04-24 06:06:29728TEST_RFAIL_SOURCES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(RFAIL_RS))
729TEST_RFAIL_SOURCES_STAGE2 = $(filter-out $(TEST_XFAILS_STAGE2), $(RFAIL_RS))
Graydon Hoare68d76c22011-03-21 20:41:56730
Graydon Hoare49d9d562011-03-25 19:19:20731TEST_RFAIL_EXES_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01732 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_BOOT:.rc=.boot$(X))) \
733 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare49d9d562011-03-25 19:19:20734TEST_RFAIL_EXES_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01735 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
736 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare9eec7e32011-04-24 06:06:29737TEST_RFAIL_EXES_STAGE1 = \
738 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE1:.rc=.stage1$(X))) \
739 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE1:.rs=.stage1$(X)))
740TEST_RFAIL_EXES_STAGE2 = \
741 $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE2:.rc=.stage2$(X))) \
742 $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE2:.rs=.stage2$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56743
Graydon Hoare49d9d562011-03-25 19:19:20744TEST_RFAIL_OUTS_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01745 $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare49d9d562011-03-25 19:19:20746TEST_RFAIL_OUTS_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01747 $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare9eec7e32011-04-24 06:06:29748TEST_RFAIL_OUTS_STAGE1 = \
749 $(TEST_RFAIL_EXES_STAGE0:.stage1$(X)=.stage1.out)
750TEST_RFAIL_OUTS_STAGE2 = \
751 $(TEST_RFAIL_EXES_STAGE0:.stage2$(X)=.stage2.out)
Graydon Hoare68d76c22011-03-21 20:41:56752
Graydon Hoare49d9d562011-03-25 19:19:20753TEST_RFAIL_TMPS_BOOT = \
Graydon Hoare68d76c22011-03-21 20:41:56754 $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
Graydon Hoare49d9d562011-03-25 19:19:20755TEST_RFAIL_TMPS_STAGE0 = \
Graydon Hoare7ed7c022011-03-21 22:53:08756 $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare9eec7e32011-04-24 06:06:29757TEST_RFAIL_TMPS_STAGE1 = \
758 $(TEST_RFAIL_EXES_STAGE1:.stage1$(X)=.stage1$(X).tmp)
759TEST_RFAIL_TMPS_STAGE2 = \
760 $(TEST_RFAIL_EXES_STAGE2:.stage2$(X)=.stage2$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56761
Graydon Hoare49d9d562011-03-25 19:19:20762TEST_CFAIL_CRATES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RC))
763TEST_CFAIL_CRATES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
Graydon Hoare9eec7e32011-04-24 06:06:29764TEST_CFAIL_CRATES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(CFAIL_RC))
765TEST_CFAIL_CRATES_STAGE2 = $(filter-out $(TEST_XFAILS_STAGE2), $(CFAIL_RC))
Graydon Hoare49d9d562011-03-25 19:19:20766TEST_CFAIL_SOURCES_BOOT = $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RS))
767TEST_CFAIL_SOURCES_STAGE0 = $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))
Graydon Hoare9eec7e32011-04-24 06:06:29768TEST_CFAIL_SOURCES_STAGE1 = $(filter-out $(TEST_XFAILS_STAGE1), $(CFAIL_RS))
769TEST_CFAIL_SOURCES_STAGE2 = $(filter-out $(TEST_XFAILS_STAGE2), $(CFAIL_RS))
Graydon Hoare68d76c22011-03-21 20:41:56770
Graydon Hoare49d9d562011-03-25 19:19:20771TEST_CFAIL_EXES_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01772 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_BOOT:.rc=.boot$(X))) \
773 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_BOOT:.rs=.boot$(X)))
Graydon Hoare49d9d562011-03-25 19:19:20774TEST_CFAIL_EXES_STAGE0 = \
Graydon Hoare7ed7c022011-03-21 22:53:08775 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
Graydon Hoare72f7b112011-03-21 21:02:01776 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
Graydon Hoare9eec7e32011-04-24 06:06:29777TEST_CFAIL_EXES_STAGE1 = \
778 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE1:.rc=.stage1$(X))) \
779 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE1:.rs=.stage1$(X)))
780TEST_CFAIL_EXES_STAGE2 = \
781 $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE2:.rc=.stage2$(X))) \
782 $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE2:.rs=.stage2$(X)))
Graydon Hoare68d76c22011-03-21 20:41:56783
Graydon Hoare49d9d562011-03-25 19:19:20784TEST_CFAIL_OUTS_BOOT = \
Graydon Hoare72f7b112011-03-21 21:02:01785 $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot.out)
Graydon Hoare49d9d562011-03-25 19:19:20786TEST_CFAIL_OUTS_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01787 $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
Graydon Hoare9eec7e32011-04-24 06:06:29788TEST_CFAIL_OUTS_STAGE1 = \
789 $(TEST_CFAIL_EXES_STAGE1:.stage1$(X)=.stage1.out)
790TEST_CFAIL_OUTS_STAGE2 = \
791 $(TEST_CFAIL_EXES_STAGE0:.stage2$(X)=.stage2.out)
Graydon Hoare68d76c22011-03-21 20:41:56792
Graydon Hoare49d9d562011-03-25 19:19:20793TEST_CFAIL_TMPS_BOOT = \
Graydon Hoare68d76c22011-03-21 20:41:56794 $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
Graydon Hoare49d9d562011-03-25 19:19:20795TEST_CFAIL_TMPS_STAGE0 = \
Graydon Hoare72f7b112011-03-21 21:02:01796 $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
Graydon Hoare9eec7e32011-04-24 06:06:29797TEST_CFAIL_TMPS_STAGE1 = \
798 $(TEST_CFAIL_EXES_STAGE1:.stage1$(X)=.stage1$(X).tmp)
799TEST_CFAIL_TMPS_STAGE0 = \
800 $(TEST_CFAIL_EXES_STAGE2:.stage2$(X)=.stage2$(X).tmp)
Graydon Hoare68d76c22011-03-21 20:41:56801
802
Graydon Hoare49d9d562011-03-25 19:19:20803ALL_TEST_CRATES = $(TEST_CFAIL_CRATES_BOOT) \
Graydon Hoare68d76c22011-03-21 20:41:56804 $(TEST_RFAIL_CRATES_BOOT) \
805 $(TEST_RPASS_CRATES_BOOT) \
806 $(TEST_CFAIL_CRATES_STAGE0) \
807 $(TEST_RFAIL_CRATES_STAGE0) \
Graydon Hoare9eec7e32011-04-24 06:06:29808 $(TEST_RPASS_CRATES_STAGE0) \
809 $(TEST_CFAIL_CRATES_STAGE1) \
810 $(TEST_RFAIL_CRATES_STAGE1) \
811 $(TEST_RPASS_CRATES_STAGE1) \
812 $(TEST_CFAIL_CRATES_STAGE2) \
813 $(TEST_RFAIL_CRATES_STAGE2) \
814 $(TEST_RPASS_CRATES_STAGE2)
Graydon Hoare68d76c22011-03-21 20:41:56815
Graydon Hoare49d9d562011-03-25 19:19:20816ALL_TEST_SOURCES = $(TEST_CFAIL_SOURCES_BOOT) \
Graydon Hoare68d76c22011-03-21 20:41:56817 $(TEST_RFAIL_SOURCES_BOOT) \
818 $(TEST_RPASS_SOURCES_BOOT) \
819 $(TEST_CFAIL_SOURCES_STAGE0) \
820 $(TEST_RFAIL_SOURCES_STAGE0) \
Graydon Hoare9eec7e32011-04-24 06:06:29821 $(TEST_RPASS_SOURCES_STAGE0) \
822 $(TEST_CFAIL_SOURCES_STAGE1) \
823 $(TEST_RFAIL_SOURCES_STAGE1) \
824 $(TEST_RPASS_SOURCES_STAGE1) \
825 $(TEST_CFAIL_SOURCES_STAGE2) \
826 $(TEST_RFAIL_SOURCES_STAGE2) \
827 $(TEST_RPASS_SOURCES_STAGE2)
Graydon Hoare68d76c22011-03-21 20:41:56828
Graydon Hoare68d76c22011-03-21 20:41:56829# The test suite currently relies on logging to validate results so
830# make sure that logging uses the default configuration
831unexport RUST_LOG
832
833
834check_nocompile: $(TEST_CFAIL_OUTS_BOOT) \
835 $(TEST_CFAIL_OUTS_STAGE0)
836
837check: tidy \
838 $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
839 $(TEST_RPASS_OUTS_BOOT) $(TEST_RFAIL_OUTS_BOOT) \
840 $(TEST_CFAIL_OUTS_BOOT) \
841 $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
842 $(TEST_RPASS_OUTS_STAGE0) $(TEST_RFAIL_OUTS_STAGE0) \
843 $(TEST_CFAIL_OUTS_STAGE0)
Graydon Hoare9eec7e32011-04-24 06:06:29844# $(TEST_RPASS_EXES_STAGE1) $(TEST_RFAIL_EXES_STAGE1) \
845# $(TEST_RPASS_OUTS_STAGE1) $(TEST_RFAIL_OUTS_STAGE1) \
846# $(TEST_CFAIL_OUTS_STAGE1) \
847# $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2) \
848# $(TEST_RPASS_OUTS_STAGE2) $(TEST_RFAIL_OUTS_STAGE2) \
849# $(TEST_CFAIL_OUTS_STAGE2)
Graydon Hoare68d76c22011-03-21 20:41:56850
851
852compile-check: tidy \
853 $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
Graydon Hoare9eec7e32011-04-24 06:06:29854 $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
855 $(TEST_RPASS_EXES_STAGE1) $(TEST_RFAIL_EXES_STAGE1) \
856 $(TEST_RPASS_EXES_STAGE2) $(TEST_RFAIL_EXES_STAGE2)
Graydon Hoare68d76c22011-03-21 20:41:56857
858
859######################################################################
Graydon Hoare4691a752011-03-20 08:12:26860# Testing rules
861######################################################################
862
Graydon Hoareb55c8332011-03-30 00:33:33863%.stage0$(X): %.stage0.o $(SREQ0)
Graydon Hoared22714f2011-03-21 04:05:31864 @$(call E, link [gcc]: $@)
Graydon Hoare973fd3c2011-03-29 21:56:24865 $(Q)gcc $(CFG_GCC_CFLAGS) stage0/glue.o -o $@ $< \
Rafael Ávila de Espíndola2cbe2bc2011-04-08 18:44:07866 -Lstage0 -Lrt -lrustrt -lstd -lm
Graydon Hoare4691a752011-03-20 08:12:26867 @# dsymutil sometimes fails or prints a warning, but the
868 @# program still runs. Since it simplifies debugging other
869 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49870 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoare4691a752011-03-20 08:12:26871
Graydon Hoare9eec7e32011-04-24 06:06:29872%.stage1$(X): %.stage1.o $(SREQ1)
Graydon Hoared22714f2011-03-21 04:05:31873 @$(call E, link [gcc]: $@)
Graydon Hoare973fd3c2011-03-29 21:56:24874 $(Q)gcc $(CFG_GCC_CFLAGS) stage1/glue.o -o $@ $< \
Rafael Ávila de Espíndola2cbe2bc2011-04-08 18:44:07875 -Lstage1 -Lrt -lrustrt -lstd -lm
Graydon Hoarec4e00852011-03-21 02:42:27876 @# dsymutil sometimes fails or prints a warning, but the
877 @# program still runs. Since it simplifies debugging other
878 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49879 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoarec4e00852011-03-21 02:42:27880
Graydon Hoareb55c8332011-03-30 00:33:33881%.stage2$(X): %.stage2.o $(SREQ2)
Graydon Hoared22714f2011-03-21 04:05:31882 @$(call E, link [gcc]: $@)
Graydon Hoare973fd3c2011-03-29 21:56:24883 $(Q)gcc $(CFG_GCC_CFLAGS) stage2/glue.o -o $@ $< \
Rafael Ávila de Espíndola2cbe2bc2011-04-08 18:44:07884 -Lstage2 -Lrt -lrustrt -lstd -lm
Graydon Hoarec4e00852011-03-21 02:42:27885 @# dsymutil sometimes fails or prints a warning, but the
886 @# program still runs. Since it simplifies debugging other
887 @# programs, I\'ll live with the noise.
Graydon Hoare26ec8832011-03-21 04:05:49888 -$(Q)$(CFG_DSYMUTIL) $@
Graydon Hoarec4e00852011-03-21 02:42:27889
890
891
892%.boot$(X): %.rs $(BREQ)
893 @$(call E, compile [boot]: $@)
894 $(BOOT) -o $@ $<
895
896%.boot$(X): %.rc $(BREQ)
897 @$(call E, compile [boot]: $@)
898 $(BOOT) -o $@ $<
899
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30900%.stage0.o: %.rc $(SREQ0)
Graydon Hoare4691a752011-03-20 08:12:26901 @$(call E, compile [stage0]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30902 $(STAGE0) -c -o $@ $<
Graydon Hoare4691a752011-03-20 08:12:26903
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30904%.stage0.o: %.rs $(SREQ0)
Graydon Hoare4691a752011-03-20 08:12:26905 @$(call E, compile [stage0]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30906 $(STAGE0) -c -o $@ $<
Graydon Hoare4691a752011-03-20 08:12:26907
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30908%.stage1.o: %.rc $(SREQ1)
Graydon Hoarec4e00852011-03-21 02:42:27909 @$(call E, compile [stage1]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30910 $(STAGE1) -c -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27911
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30912%.stage1.o: %.rs $(SREQ1)
Graydon Hoarec4e00852011-03-21 02:42:27913 @$(call E, compile [stage1]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30914 $(STAGE1) -c -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27915
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30916%.stage2.o: %.rc $(SREQ2)
Graydon Hoarec4e00852011-03-21 02:42:27917 @$(call E, compile [stage2]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30918 $(STAGE2) -c -o $@ $<
Graydon Hoarec4e00852011-03-21 02:42:27919
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30920%.stage2.o: %.rs $(SREQ2)
Graydon Hoarec4e00852011-03-21 02:42:27921 @$(call E, compile [stage2]: $@)
Rafael Ávila de Espíndolafac8cc32011-04-19 21:07:30922 $(STAGE2) -c -o $@ $<
Graydon Hoareb7972d32011-03-19 01:32:31923
Graydon Hoare4691a752011-03-20 08:12:26924# Cancel the implicit .out rule in GNU make.
925%.out: %
926
927%.out: %.out.tmp
928 $(Q)mv $< $@
929
Graydon Hoare65974392011-03-21 20:42:29930test/run-pass/%.out.tmp: test/run-pass/%$(X) rt/$(CFG_RUNTIME)
Graydon Hoare4691a752011-03-20 08:12:26931 $(Q)rm -f $<.tmp
932 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02933 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26934
935test/bench/shootout/%.out.tmp: test/bench/shootout/%$(X) \
936 rt/$(CFG_RUNTIME)
937 $(Q)rm -f $<.tmp
938 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02939 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26940
941test/bench/99-bottles/%.out.tmp: test/bench/99-bottles/%$(X) \
942 rt/$(CFG_RUNTIME)
943 $(Q)rm -f $<.tmp
944 @$(call E, run: $@)
Graydon Hoare0eb6be12011-03-21 21:52:02945 $(Q)$(call CFG_RUN_TEST, $<) > $@
Graydon Hoare4691a752011-03-20 08:12:26946
947test/run-fail/%.out.tmp: test/run-fail/%$(X) \
948 rt/$(CFG_RUNTIME)
949 $(Q)rm -f $<.tmp
950 @$(call E, run: $@)
951 $(Q)grep -q error-pattern $(S)src/test/run-fail/$(basename $*).rs
952 $(Q)rm -f $@
Graydon Hoare0eb6be12011-03-21 21:52:02953 $(Q)$(call CFG_RUN_TEST, $<) >$@ 2>&1 ; X=$$? ; \
Graydon Hoare4691a752011-03-20 08:12:26954 if [ $$X -eq 0 ] ; then exit 1 ; else exit 0 ; fi
955 $(Q)grep --text --quiet \
956 "$$(grep error-pattern $(S)src/test/run-fail/$(basename $*).rs \
957 | cut -d : -f 2- | tr -d '\n\r')" $@
958
959test/compile-fail/%.boot.out.tmp: test/compile-fail/%.rs $(BREQ)
960 @$(call E, compile [boot]: $@)
961 $(Q)grep -q error-pattern $<
962 $(Q)rm -f $@
963 $(BOOT) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
964 $(Q)grep --text --quiet \
965 "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@
966
967test/compile-fail/%.stage0.out.tmp: test/compile-fail/%.rs $(SREQ0)
968 @$(call E, compile [stage0]: $@)
969 $(Q)grep -q error-pattern $<
970 $(Q)rm -f $@
971 $(STAGE0) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
972 $(Q)grep --text --quiet \
973 "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@
974
Graydon Hoare6e1f52e2011-03-22 23:57:31975
976######################################################################
977# Auto-dependency
978######################################################################
979
980ML_DEPFILES := $(BOOT_MLS:%.ml=%.d)
Rafael Ávila de Espíndolae7333112011-04-11 18:52:11981C_DEPFILES := $(RUNTIME_CS:%.cpp=%.d) $(RUSTLLVM_LIB_CS:%.cpp=%.d) \
982 $(RUSTLLVM_OBJS_CS:%.cpp=%.d)
Graydon Hoare6e1f52e2011-03-22 23:57:31983
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: $@)
Graydon Hoare0f9d4602011-03-25 07:09:201036 $(BOOT) -o $(patsubst %.d,%$(X),$@) -shared -rdeps $< >[email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311037 $(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: $@)
Graydon Hoare0f9d4602011-03-25 07:09:201044 $(BOOT) -o $(patsubst %.d,%$(X),$@) -shared -rdeps $< >[email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311045 $(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: $@)
Graydon Hoare0f9d4602011-03-25 07:09:201051 $(BOOT) -o $(patsubst %.d,%$(X),$@) -rdeps $< >[email protected]
Graydon Hoare6e1f52e2011-03-22 23:57:311052 $(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 Hoare10f33602011-03-25 17:29:451063
1064######################################################################
1065# Re-configuration
1066######################################################################
1067
1068config.mk: $(S)configure $(S)Makefile.in
1069 @$(call E, cfg: reconfiguring)
1070 $(S)configure $(CFG_CONFIGURE_ARGS)
1071
1072
Graydon Hoaree961f532011-03-21 18:23:191073######################################################################
1074# Distribution
1075######################################################################
1076
1077PKG_NAME := rust
1078PKG_VER = $(shell date +"%Y-%m-%d")-snap
1079PKG_DIR = $(PKG_NAME)-$(PKG_VER)
1080PKG_TAR = $(PKG_DIR).tar.gz
1081
Graydon Hoare5e0ef2a2011-03-21 20:42:141082PKG_3RDPARTY := rt/valgrind.h rt/memcheck.h \
1083 rt/isaac/rand.h rt/isaac/standard.h \
1084 rt/uthash/uthash.h rt/uthash/utlist.h \
1085 rt/bigint/bigint.h rt/bigint/bigint_int.cpp \
1086 rt/bigint/bigint_ext.cpp rt/bigint/low_primes.h
1087
Graydon Hoare49d9d562011-03-25 19:19:201088PKG_FILES = \
Graydon Hoare5e0ef2a2011-03-21 20:42:141089 $(wildcard $(S)src/etc/*.*) \
1090 $(S)LICENSE.txt $(S)README \
1091 $(S)configure $(S)Makefile.in \
1092 $(addprefix $(S)src/, \
1093 README boot/README comp/README \
1094 $(filter-out $(GENERATED), $(BOOT_MLS)) \
1095 $(RUNTIME_CS) $(RUNTIME_HDR) \
Rafael Ávila de Espíndolae7333112011-04-11 18:52:111096 $(RUSTLLVM_LIB_CS) $(RUSTLLVM_OBJS_CS) \
1097 $(RUSTLLVM_HDR) \
Graydon Hoare5e0ef2a2011-03-21 20:42:141098 $(PKG_3RDPARTY)) \
Graydon Hoareea1321f2011-03-21 23:16:151099 $(GENERATED) \
1100 $(S)src/boot/fe/lexer.ml \
Graydon Hoare5e0ef2a2011-03-21 20:42:141101 $(COMPILER_INPUTS) \
1102 $(STDLIB_INPUTS) \
1103 $(ALL_TEST_INPUTS) \
1104 $(GENERATED)
1105
1106dist: $(PKG_TAR)
1107
Graydon Hoareea1321f2011-03-21 23:16:151108$(PKG_TAR): $(GENERATED)
Graydon Hoare5e0ef2a2011-03-21 20:42:141109 @$(call E, making dist dir)
1110 $(Q)rm -Rf dist
1111 $(Q)mkdir -p dist/$(PKG_DIR)
1112 $(Q)tar -c $(PKG_FILES) | tar -x -C dist/$(PKG_DIR)
1113 $(Q)tar -czf $(PKG_TAR) -C dist $(PKG_DIR)
1114 $(Q)rm -Rf dist
1115
1116distcheck: $(PKG_TAR)
Graydon Hoareea1321f2011-03-21 23:16:151117 $(Q)rm -Rf dist
1118 $(Q)mkdir -p dist
1119 @$(call E, unpacking $(PKG_TAR) in dist/$(PKG_DIR))
1120 $(Q)cd dist && tar -xzf ../$(PKG_TAR)
Graydon Hoare5e0ef2a2011-03-21 20:42:141121 @$(call E, configuring in dist/$(PKG_DIR)-build)
Graydon Hoareea1321f2011-03-21 23:16:151122 $(Q)mkdir -p dist/$(PKG_DIR)-build
Graydon Hoare5e0ef2a2011-03-21 20:42:141123 $(Q)cd dist/$(PKG_DIR)-build && ../$(PKG_DIR)/configure
1124 @$(call E, making 'check' in dist/$(PKG_DIR)-build)
1125 $(Q)make -C dist/$(PKG_DIR)-build check
1126 @$(call E, making 'clean' in dist/$(PKG_DIR)-build)
1127 $(Q)make -C dist/$(PKG_DIR)-build clean
1128 $(Q)rm -Rf dist
1129 @echo
1130 @echo -----------------------------------------------
1131 @echo $(PKG_TAR) ready for distribution
1132 @echo -----------------------------------------------
1133
Graydon Hoare3ae9ca42011-03-17 21:26:241134
1135######################################################################
1136# Cleanup
1137######################################################################
1138
1139.PHONY: clean
1140
Graydon Hoare5e0ef2a2011-03-21 20:42:141141tidy:
1142 @$(call E, check: formatting)
Graydon Hoare0a42d5a2011-03-23 22:05:541143 $(Q)echo \
Graydon Hoareea1321f2011-03-21 23:16:151144 $(filter-out $(GENERATED) $(addprefix $(S)src/, $(GENERATED)) \
Rafael Ávila de Espíndolae7333112011-04-11 18:52:111145 $(addprefix $(S)src/, $(RUSTLLVM_LIB_CS) $(RUSTLLVM_OBJS_CS) \
1146 $(RUSTLLVM_HDR) $(PKG_3RDPARTY)) \
Graydon Hoare0a42d5a2011-03-23 22:05:541147 $(S)src/etc/%, $(PKG_FILES)) \
1148 | xargs -n 10 python $(S)src/etc/tidy.py
Graydon Hoare5e0ef2a2011-03-21 20:42:141149
Graydon Hoare3ae9ca42011-03-17 21:26:241150clean:
1151 @$(call E, cleaning)
Graydon Hoarea505e3c2011-03-31 21:03:431152 $(Q)rm -f $(RUNTIME_OBJS) $(RUNTIME_DEF)
Rafael Ávila de Espíndolae7333112011-04-11 18:52:111153 $(Q)rm -f $(RUSTLLVM_LIB_OBJS) $(RUSTLLVM_OBJS_OBJS) $(RUSTLLVM_DEF)
Graydon Hoaree961f532011-03-21 18:23:191154 $(Q)rm -f $(BOOT_CMOS) $(BOOT_CMIS) $(BOOT_CMXS) $(BOOT_OBJS)
1155 $(Q)rm -f $(ML_DEPFILES) $(C_DEPFILES) $(CRATE_DEPFILES)
1156 $(Q)rm -f $(ML_DEPFILES:%.d=%.d.tmp)
1157 $(Q)rm -f $(C_DEPFILES:%.d=%.d.tmp)
1158 $(Q)rm -f $(CRATE_DEPFILES:%.d=%.d.tmp)
1159 $(Q)rm -f $(GENERATED)
1160 $(Q)rm -f boot/rustboot$(X) boot/$(CFG_STDLIB)
1161 $(Q)rm -f stage0/rustc$(X) stage0/$(CFG_STDLIB) stage0/glue*
1162 $(Q)rm -f stage1/rustc$(X) stage1/$(CFG_STDLIB) stage1/glue*
1163 $(Q)rm -f stage2/rustc$(X) stage2/$(CFG_STDLIB) stage2/glue*
Graydon Hoare7ac885e2011-03-22 06:06:421164 $(Q)rm -f rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
Graydon Hoaree961f532011-03-21 18:23:191165 $(Q)rm -Rf $(PKG_NAME)-*.tar.gz dist
1166 $(Q)rm -f $(foreach ext,cmx cmi cmo cma bc o a d exe,\
1167 $(wildcard boot/*/*.$(ext) boot/*/*/*.$(ext)))
Graydon Hoarea505e3c2011-03-31 21:03:431168 $(Q)rm -f $(foreach ext,o a d bc s exe,$(wildcard stage*/*.$(ext)))
Graydon Hoaree961f532011-03-21 18:23:191169 $(Q)rm -Rf $(foreach ext,out out.tmp \
1170 boot$(X) stage0$(X) stage1$(X) stage2$(X) \
1171 bc o s exe dSYM, \
Graydon Hoarea2513432011-03-22 23:58:081172 $(wildcard test/*/*.$(ext) test/bench/*/*.$(ext)))
Graydon Hoare28a4e772011-03-23 17:37:351173 $(Q)rm -Rf $(foreach ext, \
Graydon Hoare78c077e2011-03-25 14:35:591174 aux cp fn ky log pdf html pg toc tp vr cps, \
Graydon Hoare28a4e772011-03-23 17:37:351175 $(wildcard doc/*.$(ext)))
Graydon Hoare78c077e2011-03-25 14:35:591176 $(Q)rm -Rf doc/version.texi