Makefile.in 34.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
######################################################################
# Residual auto-configuration
######################################################################

include config.mk
MKFILES := Makefile config.mk

ifneq ($(MAKE_RESTARTS),)
CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
endif

CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))

14 15 16 17 18 19 20 21 22 23 24
CFG_GCC_CFLAGS :=
CFG_GCC_LINK_FLAGS :=
CFG_BOOT_FLAGS := $(BOOT_FLAGS)
CFG_RUSTC_FLAGS := -nowarn

# On Darwin, we need to run dsymutil so the debugging information ends
# up in the right place.  On other platforms, it automatically gets
# embedded into the executable, so use a no-op command.
CFG_DSYMUTIL := true

ifeq ($(CFG_OSTYPE), FreeBSD)
25
  CFG_LIB_NAME=lib$(1).so
26 27 28 29 30 31 32 33 34 35
  CFG_GCC_CFLAGS += -fPIC -march=i686 -I/usr/local/include
  CFG_GCC_LINK_FLAGS += -shared -fPIC -lpthread -lrt
  ifeq ($(CFG_CPUTYPE), x86_64)
    CFG_GCC_CFLAGS += -m32
    CFG_GCC_LINK_FLAGS += -m32
  endif
  CFG_UNIXY := 1
endif

ifeq ($(CFG_OSTYPE), Linux)
36
  CFG_LIB_NAME=lib$(1).so
37 38 39 40 41 42 43 44 45 46
  CFG_GCC_CFLAGS += -fPIC -march=i686
  CFG_GCC_LINK_FLAGS += -shared -fPIC -ldl -lpthread -lrt
  ifeq ($(CFG_CPUTYPE), x86_64)
    CFG_GCC_CFLAGS += -m32
    CFG_GCC_LINK_FLAGS += -m32
  endif
  CFG_UNIXY := 1
endif

ifeq ($(CFG_OSTYPE), Darwin)
47
  CFG_LIB_NAME=lib$(1).dylib
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
  CFG_UNIXY := 1
  CFG_GCC_LINK_FLAGS += -dynamiclib -lpthread
  # Darwin has a very blurry notion of "64 bit", and claims it's running
  # "on an i386" when the whole userspace is 64-bit and the compiler
  # emits 64-bit binaries by default. So we just force -m32 here. Smarter
  # approaches welcome!
  CFG_GCC_CFLAGS += -m32
  CFG_GCC_LINK_FLAGS += -m32
  CFG_DSYMUTIL := dsymutil
endif

ifneq ($(findstring MINGW,$(CFG_OSTYPE)),)
  CFG_WINDOWSY := 1
endif

63
CFG_LDPATH :=$(CFG_BUILD_DIR)/rt
64
CFG_LDPATH :=$(CFG_LDPATH):$(CFG_BUILD_DIR)/rustllvm
65

66 67 68 69 70
ifdef CFG_WINDOWSY
  CFG_INFO := $(info cfg: windows-y environment)

  CFG_EXE_SUFFIX := .exe
  CFG_LIB_NAME=$(1).dll
71 72
  CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
  CFG_LDPATH :=$(CFG_LDPATH):$$PATH
73 74
  CFG_RUN_TEST=PATH="$(CFG_LDPATH)" $(1)
  CFG_RUN_TARG=PATH="$(CFG_LDPATH)" $(1)
75

76 77 78
  CFG_PATH_MUNGE := $(strip | perl -p                  \
                           -e 's@\\(.)@/\1@go;'        \
                           -e 's@^/([a-zA-Z])/@\1:/@o;')
79 80 81 82 83 84 85 86 87 88 89
  ifdef CFG_FLEXLINK
    CFG_BOOT_NATIVE := 1
  endif
  CFG_GCC_CFLAGS += -march=i686
  CFG_GCC_LINK_FLAGS += -shared -fPIC
endif

ifdef CFG_UNIXY
  CFG_INFO := $(info cfg: unix-y environment)

  CFG_EXE_SUFFIX :=
90
  CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_LIBDIR)
91
  CFG_RUN_TARG=\
92
      LD_LIBRARY_PATH=$(dir $(firstword $(1))):$(CFG_LDPATH) $(1)
93
  CFG_RUN_TEST=\
94 95
      LD_LIBRARY_PATH=$(dir $(firstword $(1))):$(CFG_LDPATH) \
      $(CFG_VALGRIND) $(1)
96 97 98 99 100 101

  CFG_BOOT_NATIVE := 1

  ifdef MINGW_CROSS
    CFG_EXE_SUFFIX := .exe
    CFG_LIB_NAME=$(1).dll
102 103
    CFG_LDPATH :=$(CFG_LDPATH):$(CFG_LLVM_BINDIR)
    CFG_LDPATH :=$(CFG_LDPATH):$$PATH
104
    CFG_RUN_TARG=PATH=$(CFG_LDPATH) $(1)
105
    CFG_RUN_TEST=PATH=$(CFG_LDPATH) $(1)
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123

    CFG_INFO := $(info cfg: mingw-cross)
    CFG_GCC_CROSS := i586-mingw32msvc-
    CFG_BOOT_FLAGS += -t win32-x86-pe
    ifdef CFG_VALGRIND
      CFG_VALGRIND += wine
    endif
    CFG_GCC_CFLAGS := -march=i686
    CFG_GCC_LINK_FLAGS := -shared
    ifeq ($(CFG_CPUTYPE), x86_64)
      CFG_GCC_CFLAGS += -m32
      CFG_GCC_LINK_FLAGS += -m32
    endif
  endif
  ifdef CFG_VALGRIND
    CFG_VALGRIND += --leak-check=full \
                    --error-exitcode=1 \
                    --quiet --vex-iropt-level=0 \
124
                    --suppressions=$(CFG_SRC_DIR)src/etc/x86.supp
125 126 127 128
  endif
endif

CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
129
CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
130 131
CFG_STDLIB :=$(call CFG_LIB_NAME,std)

G
Graydon Hoare 已提交
132 133
CFG_LLC_CFLAGS := -march=x86

134 135 136 137 138
ifdef CFG_GCC
  CFG_INFO := $(info cfg: using gcc)
  CFG_GCC_CFLAGS += -Wall -Werror -fno-rtti -fno-exceptions -g
  CFG_GCC_LINK_FLAGS += -g
  CFG_COMPILE_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -c -o $(1) $(2)
139
  CFG_LINK_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_LINK_FLAGS) -o $(1) $(2)
140 141 142 143 144
  CFG_DEPEND_C = $(CFG_GCC_CROSS)g++ $(CFG_GCC_CFLAGS) -MT "$(1)" -MM $(2)
else
  CFG_ERR := $(error please try on a system with gcc)
endif

145
ifdef CFG_OCAMLC_OPT
146
  $(info cfg: have ocaml native compiler)
147 148
  OPT=.opt
else
149
  $(info cfg: have only ocaml bytecode compiler)
150 151
endif

152 153 154
ifdef BOOT_PROFILE
  $(info cfg: forcing native bootstrap compiler (BOOT_PROFILE))
  CFG_BOOT_NATIVE := 1
155 156 157
  CFG_OCAMLOPT_PROFILE_FLAGS := -p
endif

158 159 160
ifdef BOOT_DEBUG
  $(info cfg: forcing bytecode bootstrap compiler (DEBUG))
  CFG_BOOT_NATIVE :=
161 162
endif

163
ifdef CFG_BOOT_NATIVE
164 165 166 167 168 169
  $(info cfg: building native bootstrap compiler)
else
  $(info cfg: building bytecode bootstrap compiler)
endif

ifdef NO_VALGRIND
170 171 172 173 174 175 176 177 178 179 180 181 182 183
  $(info cfg: disabling valgrind (NO_VALGRIND))
  CFG_VALGRIND :=
endif

######################################################################
# Target-and-rule "utility variables"
######################################################################

ifdef VERBOSE
  Q :=
  E =
else
  Q := @
  E = echo $(1)
184 185
endif

186 187 188 189 190 191 192
S := $(CFG_SRC_DIR)
X := $(CFG_EXE_SUFFIX)

# Look in doc and src dirs.
VPATH := $(S)doc $(S)src

# Compilers we build, we now know how to run.
193
BOOT := $(Q)OCAMLRUNPARAM="b1" boot/rustboot$(X) $(CFG_BOOT_FLAGS) -L boot
194 195 196 197
STAGE0 := $(Q)$(call CFG_RUN_TARG,\
                stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage0)
STAGE1 := $(Q)$(call CFG_RUN_TARG,\
                stage1/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1)
198 199 200 201 202 203 204 205 206 207 208

# "Source" files we generate in builddir along the way.
GENERATED := boot/fe/lexer.ml boot/version.ml

# Delete the built-in rules.
.SUFFIXES:
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
209 210 211 212 213 214 215 216 217 218

######################################################################
# Bootstrap compiler variables
######################################################################

# We must list them in link order.
# Nobody calculates the link-order DAG automatically, sadly.

BOOT_MLS :=                                              \
    $(addsuffix .ml,                                     \
219 220
        boot/version                                     \
        $(addprefix boot/util/, fmt common bits)         \
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
        $(addprefix boot/driver/, session)               \
        $(addprefix boot/fe/, ast token lexer parser     \
          extfmt pexp item cexp fuzz)                    \
        $(addprefix boot/be/, asm il abi)                \
        $(addprefix boot/me/, walk semant resolve alias  \
          simplify type dead layer effect typestate      \
         loop layout transutil trans dwarf)              \
        $(addprefix boot/be/, x86 ra pe elf macho)       \
        $(addprefix boot/driver/, lib glue main))        \

BOOT_CMOS := $(BOOT_MLS:.ml=.cmo)
BOOT_CMXS := $(BOOT_MLS:.ml=.cmx)
BOOT_OBJS := $(BOOT_MLS:.ml=.o)
BOOT_CMIS := $(BOOT_MLS:.ml=.cmi)

236
BS := $(S)src/boot/
237 238 239 240 241 242 243 244

BOOT_ML_DEP_INCS := -I $(BS)/fe   -I $(BS)/me      \
                    -I $(BS)/be   -I $(BS)/driver  \
                    -I $(BS)/util -I boot

BOOT_ML_INCS    :=  -I boot/fe   -I boot/me      \
                    -I boot/be   -I boot/driver  \
                    -I boot/util -I boot
245

246 247 248
BOOT_ML_LIBS        := unix.cma  nums.cma  bigarray.cma
BOOT_ML_NATIVE_LIBS := unix.cmxa nums.cmxa bigarray.cmxa
BOOT_OCAMLC_FLAGS   := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
249 250 251 252 253
BOOT_OCAMLOPT_FLAGS := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael

######################################################################
# Runtime (C++) library variables
######################################################################
254

255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303
RUNTIME_CS := rt/sync/timer.cpp \
              rt/sync/sync.cpp \
              rt/sync/lock_and_signal.cpp \
              rt/rust.cpp \
              rt/rust_builtin.cpp \
              rt/rust_run_program.cpp \
              rt/rust_crate.cpp \
              rt/rust_crate_cache.cpp \
              rt/rust_crate_reader.cpp \
              rt/rust_comm.cpp \
              rt/rust_dom.cpp \
              rt/rust_task.cpp \
              rt/rust_task_list.cpp \
              rt/rust_proxy.cpp \
              rt/rust_chan.cpp \
              rt/rust_port.cpp \
              rt/rust_upcall.cpp \
              rt/rust_log.cpp \
              rt/rust_message.cpp \
              rt/rust_timer.cpp \
              rt/circular_buffer.cpp \
              rt/isaac/randport.cpp \
              rt/rust_srv.cpp \
              rt/rust_kernel.cpp \
              rt/memory_region.cpp \
              rt/test/rust_test_harness.cpp \
              rt/test/rust_test_runtime.cpp \
              rt/test/rust_test_util.cpp

RUNTIME_HDR := rt/globals.h \
               rt/rust.h \
               rt/rust_dwarf.h \
               rt/rust_internal.h \
               rt/rust_util.h \
               rt/rust_chan.h \
               rt/rust_port.h \
               rt/rust_dom.h \
               rt/rust_task.h \
               rt/rust_task_list.h \
               rt/rust_proxy.h \
               rt/rust_log.h \
               rt/rust_message.h \
               rt/circular_buffer.h \
               rt/util/array_list.h \
               rt/util/indexed_list.h \
               rt/util/synchronized_indexed_list.h \
               rt/util/hash_map.h \
               rt/sync/sync.h \
               rt/sync/timer.h \
G
Graydon Hoare 已提交
304
               rt/sync/lock_and_signal.h \
305 306 307 308 309 310 311 312 313
               rt/sync/lock_free_queue.h \
               rt/rust_srv.h \
               rt/rust_kernel.h \
               rt/memory_region.h \
               rt/memory.h \
               rt/test/rust_test_harness.h \
               rt/test/rust_test_runtime.h \
               rt/test/rust_test_util.h

314
RUNTIME_DEF := $(S)src/rt/rustrt.def
315 316
RUNTIME_INCS := -I $(S)src/rt/isaac -I $(S)src/rt/uthash
RUNTIME_OBJS := $(RUNTIME_CS:.cpp=.o)
317 318

######################################################################
319
# rustc LLVM-extensions (C++) library variables
320 321
######################################################################

322
RUSTLLVM_CS := $(addprefix rustllvm/, \
323
                MachOObjectFile.cpp Object.cpp RustWrapper.cpp)
324

325 326
RUSTLLVM_HDR := rustllvm/include/llvm-c/Object.h
RUSTLLVM_DEF := $(S)src/rustllvm/rustllvm.def
327

328 329 330 331
RUSTLLVM_INCS := -iquote $(CFG_LLVM_INCDIR) \
                 -iquote $(S)src/rustllvm/include
RUSTLLVM_OBJS := $(RUSTLLVM_CS:.cpp=.o)
RUSTLLVM_LIBS := $(CFG_LLVM_LDFLAGS) $(CFG_LLVM_LIBS)
332

333 334 335 336
######################################################################
# Standard library variables
######################################################################

G
Graydon Hoare 已提交
337
STDLIB_CRATE := $(S)src/lib/std.rc
338
STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
339 340

######################################################################
341
# rustc crate variables
342 343
######################################################################

G
Graydon Hoare 已提交
344
COMPILER_CRATE := $(S)src/comp/rustc.rc
345
COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
346 347
                                rustc.rc *.rs */*.rs))

348 349 350 351
######################################################################
# test dependency variables
######################################################################

352
LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM)
353 354 355 356
BREQ := boot/rustboot$(X) boot/$(CFG_STDLIB)
SREQ0 := stage0/rustc$(X) $(LREQ)
SREQ1 := stage1/rustc$(X) $(LREQ)

357 358 359
######################################################################
# Single-target rules
######################################################################
360

361
all: boot/rustboot$(X)          \
362
     boot/$(CFG_STDLIB)         \
363
     rt/$(CFG_RUNTIME)          \
364
     rustllvm/$(CFG_RUSTLLVM)   \
365
     stage0/rustc$(X)           \
G
Graydon Hoare 已提交
366
     stage0/glue.o              \
367
     stage0/$(CFG_STDLIB)       \
368
     $(GENERATED)
369

370
rt/$(CFG_RUNTIME): $(RUNTIME_OBJS) $(MKFILES) $(RUNTIME_HDR) $(RUNTIME_DEF)
371
	@$(call E, link: $@)
372
	$(Q)$(call CFG_LINK_C,$@,$(RUNTIME_OBJS),$(RUNTIME_DEF))
373

374 375
rustllvm/$(CFG_RUSTLLVM): $(RUSTLLVM_OBJS) $(MKFILES) $(RUSTLLVM_HDR) \
                          $(RUSTLLVM_DEF)
376
	@$(call E, link: $@)
377 378
	$(Q)$(call CFG_LINK_C,$@,$(CFG_LLVM_LDFLAGS) $(RUSTLLVM_OBJS) \
          $(CFG_LLVM_LIBS) $(CFG_LLVM_LDFLAGS),$(RUSTLLVM_DEF))
379 380

ifdef CFG_BOOT_NATIVE
381
boot/rustboot$(X): $(BOOT_CMXS) $(MKFILES)
382 383
	@$(call E, link: $@)
	$(Q)ocamlopt$(OPT) -o $@ $(BOOT_OCAMLOPT_FLAGS) $(BOOT_ML_NATIVE_LIBS) \
384 385
        $(BOOT_CMXS)
else
386
boot/rustboot$(X): $(BOOT_CMOS) $(MKFILES)
387
	@$(call E, link: $@)
388
	$(Q)ocamlc$(OPT) -o $@ $(BOOT_OCAMLC_FLAGS) $(BOOT_ML_LIBS) $(BOOT_CMOS)
389 390
endif

391 392
boot/version.ml: $(MKFILES)
	@$(call E, git: $@)
393 394 395
	$(Q)git log -1 \
      --pretty=format:'let version = "prerelease (%h %ci)";;' >$@ || exit 1

G
Graydon Hoare 已提交
396

397

G
Graydon Hoare 已提交
398
boot/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
399
                    boot/rustboot$(X) $(MKFILES)
400 401 402
	@$(call E, compile: $@)
	$(BOOT) -shared -o $@ $<

G
Graydon Hoare 已提交
403
stage0/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
G
Graydon Hoare 已提交
404 405 406 407
                      stage0/rustc$(X) $(MKFILES)
	@$(call E, compile: $@)
	$(STAGE0) -shared -o $@ $<

G
Graydon Hoare 已提交
408
stage1/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
409 410 411 412
                      stage1/rustc$(X) $(MKFILES)
	@$(call E, compile: $@)
	$(STAGE1) -shared -o $@ $<

G
Graydon Hoare 已提交
413
stage2/$(CFG_STDLIB): $(STDLIB_CRATE) $(STDLIB_INPUTS) \
414 415 416 417 418
                      stage2/rustc$(X) $(MKFILES)
	@$(call E, compile: $@)
	$(STAGE2) -shared -o $@ $<


G
Graydon Hoare 已提交
419

G
Graydon Hoare 已提交
420
stage0/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
421
                  $(BREQ)
422 423 424 425
	@$(call E, compile: $@)
	$(BOOT) -minimal -o $@ $<
	$(Q)chmod 0755 $@

G
Graydon Hoare 已提交
426
stage1/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
427
                  $(SREQ0) stage0/$(CFG_STDLIB)
G
Graydon Hoare 已提交
428 429 430 431
	@$(call E, compile: $@)
	$(STAGE0) -o $@ $<
	$(Q)chmod 0755 $@

G
Graydon Hoare 已提交
432
stage2/rustc$(X): $(COMPILER_CRATE) $(COMPILER_INPUTS) \
433 434 435 436 437 438
                  $(SREQ1) stage1/$(CFG_STDLIB)
	@$(call E, compile: $@)
	$(STAGE1) -o $@ $<
	$(Q)chmod 0755 $@


G
Graydon Hoare 已提交
439

G
Graydon Hoare 已提交
440
stage0/glue.bc: stage0/rustc$(X) stage0/$(CFG_STDLIB) \
441
                rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
442 443
	@$(call E, generate: $@)
	$(STAGE0) -o $@ -glue
444

G
Graydon Hoare 已提交
445
stage1/glue.bc: stage1/rustc$(X) stage1/$(CFG_STDLIB) \
446
                rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
G
Graydon Hoare 已提交
447 448 449
	@$(call E, generate: $@)
	$(STAGE1) -o $@ -glue

450
stage2/glue.bc: stage2/rustc$(X) stage2/$(CFG_STDLIB) \
451
                rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
452 453 454
	@$(call E, generate: $@)
	$(STAGE2) -o $@ -glue

455
######################################################################
456
# Library and boot rules
457 458 459 460 461 462
######################################################################

rt/%.o: rt/%.cpp $(MKFILES)
	@$(call E, compile: $@)
	$(Q)$(call CFG_COMPILE_C, $@, $(RUNTIME_INCS)) $<

463
rustllvm/%.o: rustllvm/%.cpp $(MKFILES)
464
	@$(call E, compile: $@)
465
	$(Q)$(call CFG_COMPILE_C, $@, $(CFG_LLVM_CXXFLAGS) $(RUSTLLVM_INCS)) $<
466

467 468
%.cmo: %.ml $(MKFILES)
	@$(call E, compile: $@)
469
	$(Q)ocamlc$(OPT) -c -o $@ $(BOOT_OCAMLC_FLAGS) $<
470 471

%.cmo: %.cmi $(MKFILES)
472

473 474 475 476 477 478 479
%.cmx %.o: %.ml $(MKFILES)
	@$(call E, compile: $@)
	$(Q)ocamlopt$(OPT) -c -o $@ $(BOOT_OCAMLOPT_FLAGS) $<

%.ml: %.mll $(MKFILES)
	@$(call E, lex-gen: $@)
	$(Q)ocamllex$(OPT) -q -o $@ $<
480

481

G
Graydon Hoare 已提交
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695
######################################################################
# Testing variables
######################################################################

# Temporarily xfail tests broken by the nominal-tags change.

NOMINAL_TAG_XFAILS := $(S)src/test/run-pass/mlist.rs

# Temporarily xfail tests broken by the constant-tags change.

CONST_TAG_XFAILS := $(S)src/test/run-pass/generic-tag.rs

# Temporarily xfail some of the task tests, while debugging the
# overhauled inter-domain messaging system.

TASK_XFAILS := $(addprefix $(S)src/test/run-pass/, \
                 task-comm-8.rs \
                 task-comm-10.rs \
                 task-comm-15.rs \
                 task-comm-12.rs \
                 task-comm-2.rs \
                 task-comm-9.rs \
                 task-life-0.rs \
                 alt-type-simple.rs \
                 many.rs)

TEST_XFAILS_BOOT := $(TASK_XFAILS) \
                    $(NOMINAL_TAG_XFAILS) \
                    $(CONST_TAG_XFAILS) \
                    $(addprefix $(S)src/test/run-pass/, \
                      arith-unsigned.rs \
                      box-compare.rs \
                      child-outlives-parent.rs \
                      clone-with-exterior.rs \
                      constrained-type.rs \
                      destructor-ordering.rs \
                      obj-as.rs \
                      vec-slice.rs \
                      fn-lval.rs \
                      generic-bind-2.rs \
                      generic-fn-box.rs \
                      generic-tup.rs \
                      iter-ret.rs \
                      leak-tag-copy.rs \
                      lib-io.rs \
                      maybe-mutable.rs \
                      mlist-cycle.rs \
                      obj-as.rs \
                      seq-compare.rs \
                      task-comm.rs \
                      task-comm-3.rs \
                      vec-slice.rs \
                      while-and-do-while.rs) \
                    $(addprefix $(S)src/test/run-fail/, \
                      task-comm-14.rs) \
                    $(addprefix $(S)src/test/compile-fail/, \
                      bad-expr-path.rs \
                      import.rs \
                      import2.rs \
                      import3.rs \
                      import4.rs \
                      bad-recv.rs \
                      bad-send.rs \
                      infinite-vec-type-recursion.rs \
                      tail-non-call.rs \
                      writing-through-read-alias.rs)

TEST_XFAILS_STAGE0 := $(addprefix $(S)src/test/run-pass/, \
                        acyclic-unwind.rs \
                        alt-pattern-drop.rs \
                        alt-type-simple.rs \
                        basic-1.rs \
                        basic-2.rs \
                        basic.rs \
                        child-outlives-parent.rs \
                        clone-with-exterior.rs \
                        comm.rs \
                        constrained-type.rs \
                        destructor-ordering.rs \
                        iter-ret.rs \
                        lazychan.rs \
                        lib-bitv.rs \
                        lib-deque.rs \
                        lib-int.rs \
                        lib-io.rs \
                        lib-map.rs \
                        lib-rand.rs \
                        lib-sha1.rs \
                        lib-sort.rs \
                        lib-str.rs \
                        lib-str-buf.rs \
                        lib-task.rs \
                        lib-uint.rs \
                        lib-vec-str-conversions.rs \
                        lib-vec.rs \
                        many.rs \
                        mlist-cycle.rs \
                        mlist.rs \
                        mutable-alias-vec.rs \
                        obj-as.rs \
                        obj-dtor.rs \
                        pred.rs \
                        preempt.rs \
                        rt-circular-buffer.rs \
                        size-and-align.rs \
                        spawn-fn.rs \
                        spawn-module-qualified.rs \
                        spawn.rs \
                        str-append.rs \
                        syntax-extension-fmt.rs \
                        syntax-extension-shell.rs \
                        task-comm-0.rs \
                        task-comm-1.rs \
                        task-comm-10.rs \
                        task-comm-11.rs \
                        task-comm-12.rs \
                        task-comm-13-thread.rs \
                        task-comm-13.rs \
                        task-comm-15.rs \
                        task-comm-2.rs \
                        task-comm-3.rs \
                        task-comm-4.rs \
                        task-comm-5.rs \
                        task-comm-6.rs \
                        task-comm-7.rs \
                        task-comm-8.rs \
                        task-comm-9.rs \
                        task-comm.rs \
                        task-killjoin.rs \
                        task-life-0.rs \
                        threads.rs \
                        type-sizes.rs \
                        typestate-cfg-nesting.rs \
                        user.rs \
                        utf8.rs \
                        vec-alloc-append.rs \
                        vec-append.rs \
                        vec-slice.rs \
                        while-with-break.rs \
                        yield.rs \
                        yield2.rs \
                        multi.rc \
                        native-mod.rc \
                        native.rc \
                        ) \
                     $(filter-out \
                      $(addprefix $(S)src/test/compile-fail/, \
                        alt-tag-nullary.rs \
                        alt-tag-unary.rs \
                        arg-count-mismatch.rs \
                        arg-type-mismatch.rs \
                        bad-expr-path.rs \
                        bad-expr-path2.rs \
                        bogus-tag.rs \
                        fru-extra-field.rs \
                        import.rs \
                        import2.rs \
                        import3.rs \
                        import4.rs \
                        import-loop.rs \
                        import-loop-2.rs \
                        multiline-comment-line-tracking.rs \
                        output-type-mismatch.rs \
                        rec-missing-fields.rs \
                        reserved-dec.rs \
                        reserved-f128.rs \
                        reserved-f16.rs \
                        reserved-f80.rs \
                        reserved-m128.rs \
                        reserved-m32.rs \
                        reserved-m64.rs \
                        tail-non-call.rs \
                        tail-typeck.rs \
                        type-shadow.rs \
                        while-type-error.rs \
                        wrong-ret-type.rs \
                        ), \
                     $(wildcard $(S)src/test/*fail/*.rs test/*fail/*.rc)) \
                     $(S)src/test/bench/shootout/fannkuchredux.rs \
                     $(S)src/test/bench/shootout/fasta.rs \
                     $(S)src/test/bench/shootout/binarytrees.rs \
                     $(wildcard $(S)src/test/bench/99-bottles/*rs)

ifdef MINGW_CROSS
TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
endif
ifdef CFG_WINDOWSY
TEST_XFAILS_BOOT += $(S)src/test/run-pass/native-mod.rc
TEST_XFAILS_STAGE0 += $(S)src/test/run-pass/native-mod.rc
endif

BENCH_RS := $(wildcard $(S)src/test/bench/shootout/*.rs) \
            $(wildcard $(S)src/test/bench/99-bottles/*.rs)
RPASS_RC := $(wildcard $(S)src/test/run-pass/*.rc)
RPASS_RS := $(wildcard $(S)src/test/run-pass/*.rs) $(BENCH_RS)
RFAIL_RC := $(wildcard $(S)src/test/run-fail/*.rc)
RFAIL_RS := $(wildcard $(S)src/test/run-fail/*.rs)
CFAIL_RC := $(wildcard $(S)src/test/compile-fail/*.rc)
CFAIL_RS := $(wildcard $(S)src/test/compile-fail/*.rs)

ifdef CHECK_XFAILS
TEST_RPASS_CRATES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RC))
TEST_RPASS_SOURCES_BOOT := $(filter $(TEST_XFAILS_BOOT), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE0 := $(filter $(TEST_XFAILS_STAGE0), $(RPASS_RS))
else
TEST_RPASS_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RC))
TEST_RPASS_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RC))
TEST_RPASS_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RPASS_RS))
TEST_RPASS_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RPASS_RS))
endif

TEST_RPASS_EXES_BOOT := \
696 697
  $(subst $(S)src/,,$(TEST_RPASS_CRATES_BOOT:.rc=.boot$(X))) \
  $(subst $(S)src/,,$(TEST_RPASS_SOURCES_BOOT:.rs=.boot$(X)))
G
Graydon Hoare 已提交
698
TEST_RPASS_EXES_STAGE0 := \
699 700
  $(subst $(S)src/,,$(TEST_RPASS_CRATES_STAGE0:.rc=.stage0$(X))) \
  $(subst $(S)src/,,$(TEST_RPASS_SOURCES_STAGE0:.rs=.stage0$(X)))
G
Graydon Hoare 已提交
701 702

TEST_RPASS_OUTS_BOOT  := \
703
  $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot.out)
G
Graydon Hoare 已提交
704
TEST_RPASS_OUTS_STAGE0 := \
705
  $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0.out)
G
Graydon Hoare 已提交
706 707 708 709

TEST_RPASS_TMPS_BOOT  := \
  $(TEST_RPASS_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
TEST_RPASS_TMPS_STAGE0 := \
710
  $(TEST_RPASS_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
G
Graydon Hoare 已提交
711 712 713 714 715 716 717 718


TEST_RFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RC))
TEST_RFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RC))
TEST_RFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(RFAIL_RS))
TEST_RFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(RFAIL_RS))

TEST_RFAIL_EXES_BOOT := \
719 720
  $(subst $(S)src/,,$(TEST_RFAIL_CRATES_BOOT:.rc=.boot$(X))) \
  $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_BOOT:.rs=.boot$(X)))
G
Graydon Hoare 已提交
721
TEST_RFAIL_EXES_STAGE0 := \
722 723
  $(subst $(S)src/,,$(TEST_RFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
  $(subst $(S)src/,,$(TEST_RFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
G
Graydon Hoare 已提交
724 725

TEST_RFAIL_OUTS_BOOT  := \
726
  $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot.out)
G
Graydon Hoare 已提交
727
TEST_RFAIL_OUTS_STAGE0 := \
728
  $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
G
Graydon Hoare 已提交
729 730 731 732

TEST_RFAIL_TMPS_BOOT  := \
  $(TEST_RFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
TEST_RFAIL_TMPS_STAGE0 := \
733
  $(TEST_RFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
G
Graydon Hoare 已提交
734 735 736 737 738 739 740 741


TEST_CFAIL_CRATES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RC))
TEST_CFAIL_CRATES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RC))
TEST_CFAIL_SOURCES_BOOT := $(filter-out $(TEST_XFAILS_BOOT), $(CFAIL_RS))
TEST_CFAIL_SOURCES_STAGE0 := $(filter-out $(TEST_XFAILS_STAGE0), $(CFAIL_RS))

TEST_CFAIL_EXES_BOOT := \
742 743
  $(subst $(S)src/,,$(TEST_CFAIL_CRATES_BOOT:.rc=.boot$(X))) \
  $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_BOOT:.rs=.boot$(X)))
G
Graydon Hoare 已提交
744
TEST_CFAIL_EXES_STAGE0 := \
745
  $(subst $(S)src/,,$(TEST_CFAIL_CRATES_STAGE0:.rc=.stage0$(X))) \
746
  $(subst $(S)src/,,$(TEST_CFAIL_SOURCES_STAGE0:.rs=.stage0$(X)))
G
Graydon Hoare 已提交
747 748

TEST_CFAIL_OUTS_BOOT := \
749
  $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot.out)
G
Graydon Hoare 已提交
750
TEST_CFAIL_OUTS_STAGE0 := \
751
  $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0.out)
G
Graydon Hoare 已提交
752 753 754 755

TEST_CFAIL_TMPS_BOOT := \
  $(TEST_CFAIL_EXES_BOOT:.boot$(X)=.boot$(X).tmp)
TEST_CFAIL_TMPS_STAGE0 := \
756
  $(TEST_CFAIL_EXES_STAGE0:.stage0$(X)=.stage0$(X).tmp)
G
Graydon Hoare 已提交
757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798


ALL_TEST_CRATES := $(TEST_CFAIL_CRATES_BOOT) \
                   $(TEST_RFAIL_CRATES_BOOT) \
                   $(TEST_RPASS_CRATES_BOOT) \
                   $(TEST_CFAIL_CRATES_STAGE0) \
                   $(TEST_RFAIL_CRATES_STAGE0) \
                   $(TEST_RPASS_CRATES_STAGE0)

ALL_TEST_SOURCES := $(TEST_CFAIL_SOURCES_BOOT) \
                    $(TEST_RFAIL_SOURCES_BOOT) \
                    $(TEST_RPASS_SOURCES_BOOT) \
                    $(TEST_CFAIL_SOURCES_STAGE0) \
                    $(TEST_RFAIL_SOURCES_STAGE0) \
                    $(TEST_RPASS_SOURCES_STAGE0)

ALL_TEST_INPUTS := $(wildcard $(S)src/test/*/*.rs   \
                              $(S)src/test/*/*/*.rs \
                              $(S)src/test/*/*.rc)

# The test suite currently relies on logging to validate results so
# make sure that logging uses the default configuration
unexport RUST_LOG


check_nocompile: $(TEST_CFAIL_OUTS_BOOT) \
                 $(TEST_CFAIL_OUTS_STAGE0)

check: tidy \
       $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
       $(TEST_RPASS_OUTS_BOOT) $(TEST_RFAIL_OUTS_BOOT) \
       $(TEST_CFAIL_OUTS_BOOT) \
       $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0) \
       $(TEST_RPASS_OUTS_STAGE0) $(TEST_RFAIL_OUTS_STAGE0) \
       $(TEST_CFAIL_OUTS_STAGE0)


compile-check: tidy \
       $(TEST_RPASS_EXES_BOOT) $(TEST_RFAIL_EXES_BOOT) \
       $(TEST_RPASS_EXES_STAGE0) $(TEST_RFAIL_EXES_STAGE0)


799 800 801 802
######################################################################
# Testing rules
######################################################################

803
%.stage0$(X): %.stage0.o rt/$(CFG_RUNTIME) stage0/glue.o
804 805
	@$(call E, link [gcc]: $@)
	$(Q)gcc $(CFG_GCC_CFLAGS) stage0/glue.o -o $@ $< -Lstage0 -Lrt -lrustrt
806 807 808
	@# dsymutil sometimes fails or prints a warning, but the
	@# program still runs.  Since it simplifies debugging other
	@# programs, I\'ll live with the noise.
G
Graydon Hoare 已提交
809
	-$(Q)$(CFG_DSYMUTIL) $@
810

811
%.stage1(X): %.stage1.o rt/$(CFG_RUNTIME) stage1/glue.o
812 813
	@$(call E, link [gcc]: $@)
	$(Q)gcc $(CFG_GCC_CFLAGS) stage1/glue.o -o $@ $< -Lstage1 -Lrt -lrustrt
814 815 816
	@# dsymutil sometimes fails or prints a warning, but the
	@# program still runs.  Since it simplifies debugging other
	@# programs, I\'ll live with the noise.
G
Graydon Hoare 已提交
817
	-$(Q)$(CFG_DSYMUTIL) $@
818

819
%.stage2$(X): %.stage2.o rt/$(CFG_RUNTIME) stage2/glue.o
820 821
	@$(call E, link [gcc]: $@)
	$(Q)gcc $(CFG_GCC_CFLAGS) stage2/glue.o -o $@ $< -Lstage2 -Lrt -lrustrt
822 823 824
	@# dsymutil sometimes fails or prints a warning, but the
	@# program still runs.  Since it simplifies debugging other
	@# programs, I\'ll live with the noise.
G
Graydon Hoare 已提交
825
	-$(Q)$(CFG_DSYMUTIL) $@
826 827 828 829 830 831 832 833 834 835 836



%.boot$(X): %.rs $(BREQ)
	@$(call E, compile [boot]: $@)
	$(BOOT) -o $@ $<

%.boot$(X): %.rc $(BREQ)
	@$(call E, compile [boot]: $@)
	$(BOOT) -o $@ $<

837 838 839 840 841 842 843 844
%.stage0.bc: %.rc $(SREQ0)
	@$(call E, compile [stage0]: $@)
	$(STAGE0) -o $@ $<

%.stage0.bc: %.rs $(SREQ0)
	@$(call E, compile [stage0]: $@)
	$(STAGE0) -o $@ $<

845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862
%.stage1.bc: %.rc $(SREQ1)
	@$(call E, compile [stage1]: $@)
	$(STAGE1) -o $@ $<

%.stage1.bc: %.rs $(SREQ1)
	@$(call E, compile [stage1]: $@)
	$(STAGE1) -o $@ $<

%.stage2.bc: %.rc $(SREQ2)
	@$(call E, compile [stage2]: $@)
	$(STAGE2) -o $@ $<

%.stage2.bc: %.rs $(SREQ2)
	@$(call E, compile [stage2]: $@)
	$(STAGE2) -o $@ $<



G
Graydon Hoare 已提交
863 864 865 866 867 868 869 870 871 872 873 874
%.o: %.s
	@$(call E, assemble [llvm]: $@)
	$(Q)gcc $(CFG_GCC_CFLAGS) -o $@ -c $<

%.ll: %.bc
	@$(call E, dis [llvm]: $@)
	$(Q)$(CFG_LLVM_BINDIR)/llvm-dis -o $@ $<

%.s: %.bc
	@$(call E, compile [llvm]: $@)
	$(Q)$(CFG_LLVM_BINDIR)/llc $(CFG_LLC_CFLAGS) -o $@ $<

875 876 877 878 879 880
# Cancel the implicit .out rule in GNU make.
%.out: %

%.out: %.out.tmp
	$(Q)mv $< $@

G
Graydon Hoare 已提交
881
test/run-pass/%.out.tmp: test/run-pass/%$(X) rt/$(CFG_RUNTIME)
882 883
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
884
	$(Q)$(call CFG_RUN_TEST, $<) > $@
885 886 887 888 889

test/bench/shootout/%.out.tmp: test/bench/shootout/%$(X) \
                               rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
890
	$(Q)$(call CFG_RUN_TEST, $<) > $@
891 892 893 894 895

test/bench/99-bottles/%.out.tmp: test/bench/99-bottles/%$(X) \
                                 rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
896
	$(Q)$(call CFG_RUN_TEST, $<) > $@
897 898 899 900 901 902 903

test/run-fail/%.out.tmp: test/run-fail/%$(X) \
                         rt/$(CFG_RUNTIME)
	$(Q)rm -f $<.tmp
	@$(call E, run: $@)
	$(Q)grep -q error-pattern $(S)src/test/run-fail/$(basename $*).rs
	$(Q)rm -f $@
904
	$(Q)$(call CFG_RUN_TEST, $<) >$@ 2>&1 ; X=$$? ; \
905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925
      if [ $$X -eq 0 ] ; then exit 1 ; else exit 0 ; fi
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $(S)src/test/run-fail/$(basename $*).rs \
        | cut -d : -f 2- | tr -d '\n\r')" $@

test/compile-fail/%.boot.out.tmp: test/compile-fail/%.rs $(BREQ)
	@$(call E, compile [boot]: $@)
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
	$(BOOT) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

test/compile-fail/%.stage0.out.tmp: test/compile-fail/%.rs $(SREQ0)
	@$(call E, compile [stage0]: $@)
	$(Q)grep -q error-pattern $<
	$(Q)rm -f $@
	$(STAGE0) -o $(@:.out=$(X)) $< >$@ 2>&1; test $$? -ne 0
	$(Q)grep --text --quiet \
      "$$(grep error-pattern $< | cut -d : -f 2- | tr -d '\n\r')" $@

926 927 928 929 930 931 932 933 934
######################################################################
# Distribution
######################################################################

PKG_NAME := rust
PKG_VER  = $(shell date +"%Y-%m-%d")-snap
PKG_DIR = $(PKG_NAME)-$(PKG_VER)
PKG_TAR = $(PKG_DIR).tar.gz

935 936 937 938 939 940 941 942 943 944 945 946 947 948
PKG_3RDPARTY := rt/valgrind.h rt/memcheck.h \
                rt/isaac/rand.h rt/isaac/standard.h \
                rt/uthash/uthash.h rt/uthash/utlist.h \
                rt/bigint/bigint.h rt/bigint/bigint_int.cpp \
                rt/bigint/bigint_ext.cpp rt/bigint/low_primes.h

PKG_FILES :=\
    $(wildcard $(S)src/etc/*.*)                \
    $(S)LICENSE.txt $(S)README                 \
    $(S)configure $(S)Makefile.in              \
    $(addprefix $(S)src/,                      \
      README boot/README comp/README           \
      $(filter-out $(GENERATED), $(BOOT_MLS))  \
      $(RUNTIME_CS) $(RUNTIME_HDR)             \
949
      $(RUSTLLVM_CS) $(RUSTLLVM_HDR)           \
950
      $(PKG_3RDPARTY))                         \
G
Graydon Hoare 已提交
951 952
    $(GENERATED)                               \
    $(S)src/boot/fe/lexer.ml                   \
953 954 955 956 957 958 959
    $(COMPILER_INPUTS)                         \
    $(STDLIB_INPUTS)                           \
    $(ALL_TEST_INPUTS)                         \
    $(GENERATED)

dist: $(PKG_TAR)

G
Graydon Hoare 已提交
960
$(PKG_TAR): $(GENERATED)
961 962 963 964 965 966 967 968
	@$(call E, making dist dir)
	$(Q)rm -Rf dist
	$(Q)mkdir -p dist/$(PKG_DIR)
	$(Q)tar -c $(PKG_FILES) | tar -x -C dist/$(PKG_DIR)
	$(Q)tar -czf $(PKG_TAR) -C dist $(PKG_DIR)
	$(Q)rm -Rf dist

distcheck: $(PKG_TAR)
G
Graydon Hoare 已提交
969 970 971 972
	$(Q)rm -Rf dist
	$(Q)mkdir -p dist
	@$(call E, unpacking $(PKG_TAR) in dist/$(PKG_DIR))
	$(Q)cd dist && tar -xzf ../$(PKG_TAR)
973
	@$(call E, configuring in dist/$(PKG_DIR)-build)
G
Graydon Hoare 已提交
974
	$(Q)mkdir -p dist/$(PKG_DIR)-build
975 976 977 978 979 980 981 982 983 984 985
	$(Q)cd dist/$(PKG_DIR)-build && ../$(PKG_DIR)/configure
	@$(call E, making 'check' in dist/$(PKG_DIR)-build)
	$(Q)make -C dist/$(PKG_DIR)-build check
	@$(call E, making 'clean' in dist/$(PKG_DIR)-build)
	$(Q)make -C dist/$(PKG_DIR)-build clean
	$(Q)rm -Rf dist
	@echo
	@echo -----------------------------------------------
	@echo $(PKG_TAR) ready for distribution
	@echo -----------------------------------------------

986 987 988 989 990 991 992

######################################################################
# Cleanup
######################################################################

.PHONY: clean

993 994 995
tidy:
	@$(call E, check: formatting)
	$(Q)python $(S)src/etc/tidy.py \
G
Graydon Hoare 已提交
996
      $(filter-out $(GENERATED) $(addprefix $(S)src/, $(GENERATED)) \
997 998
        $(addprefix $(S)src/, $(RUSTLLVM_CS) $(RUSTLLVM_HDR) \
          $(PKG_3RDPARTY)) \
999 1000
        $(S)src/etc/%, $(PKG_FILES))

1001 1002
clean:
	@$(call E, cleaning)
1003
	$(Q)rm -f $(RUNTIME_OBJS)
1004
	$(Q)rm -f $(RUSTLLVM_OBJS)
1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
	$(Q)rm -f $(BOOT_CMOS) $(BOOT_CMIS) $(BOOT_CMXS) $(BOOT_OBJS)
	$(Q)rm -f $(ML_DEPFILES) $(C_DEPFILES) $(CRATE_DEPFILES)
	$(Q)rm -f $(ML_DEPFILES:%.d=%.d.tmp)
	$(Q)rm -f $(C_DEPFILES:%.d=%.d.tmp)
	$(Q)rm -f $(CRATE_DEPFILES:%.d=%.d.tmp)
	$(Q)rm -f $(GENERATED)
	$(Q)rm -f boot/rustboot$(X) boot/$(CFG_STDLIB)
	$(Q)rm -f stage0/rustc$(X) stage0/$(CFG_STDLIB) stage0/glue*
	$(Q)rm -f stage1/rustc$(X) stage1/$(CFG_STDLIB) stage1/glue*
	$(Q)rm -f stage2/rustc$(X) stage2/$(CFG_STDLIB) stage2/glue*
1015
	$(Q)rm -f rustllvm/$(CFG_RUSTLLVM) rt/$(CFG_RUNTIME)
1016 1017 1018 1019 1020 1021 1022
	$(Q)rm -Rf $(PKG_NAME)-*.tar.gz dist
	$(Q)rm -f $(foreach ext,cmx cmi cmo cma bc o a d exe,\
                        $(wildcard boot/*/*.$(ext) boot/*/*/*.$(ext)))
	$(Q)rm -Rf $(foreach ext,out out.tmp                               \
                             boot$(X) stage0$(X) stage1$(X) stage2$(X) \
                             bc o s exe dSYM,                          \
                        $(wildcard test/*/*.$(ext)))