Makefile.in 6.7 KB
Newer Older
1 2 3 4 5
######################################################################
# Residual auto-configuration
######################################################################

include config.mk
G
Graydon Hoare 已提交
6
MKFILES := Makefile config.mk $(wildcard $(CFG_SRC_DIR)/mk/*.mk)
7 8 9 10 11 12 13

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

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

14
ifdef CFG_DISABLE_OPTIMIZE
15
  $(info cfg: disabling rustc optimization (CFG_DISABLE_OPTIMIZE))
16
  CFG_RUSTC_FLAGS :=
17
else
18
  CFG_RUSTC_FLAGS := -O
19
endif
20

21
ifdef SAVE_TEMPS
22
  CFG_RUSTC_FLAGS += --save-temps
23
endif
24 25 26
ifdef TIME_PASSES
  CFG_RUSTC_FLAGS += --time-passes
endif
27 28 29
ifdef NO_TYPESTATE
  CFG_RUSTC_FLAGS += --no-typestate
endif
30 31 32
ifdef DEBUG
  CFG_RUSTC_FLAGS += -g
endif
33

G
Graydon Hoare 已提交
34 35
# platform-specific auto-configuration
include $(CFG_SRC_DIR)/mk/platform.mk
36

37 38 39 40 41 42 43
# Run the stage1/2 compilers under valgrind
ifdef VALGRIND_COMPILE
  CFG_VALGRIND_COMPILE :=$(CFG_VALGRIND)
else
  CFG_VALGRIND_COMPILE :=
endif

44
CFG_RUNTIME :=$(call CFG_LIB_NAME,rustrt)
45
CFG_RUSTLLVM :=$(call CFG_LIB_NAME,rustllvm)
46
CFG_STDLIB :=$(call CFG_LIB_NAME,std)
47
CFG_RUSTCLIB :=$(call CFG_LIB_NAME,rustc)
48

49 50 51 52 53 54 55 56
# version-string calculation
CFG_GIT_DIR := $(CFG_SRC_DIR).git
CFG_VERSION := prerelease
ifneq ($(wildcard $(CFG_GIT_DIR)),)
    CFG_VERSION += $(shell git --git-dir=$(CFG_GIT_DIR) log -1 \
                     --pretty=format:'(%h %ci)')
endif

57 58
ifdef CFG_DISABLE_VALGRIND
  $(info cfg: disabling valgrind (CFG_DISABLE_VALGRIND))
59 60
  CFG_VALGRIND :=
endif
61 62 63 64
ifdef CFG_BAD_VALGRIND
  $(info cfg: disabling valgrind due to its unreliability on this platform)
  CFG_VALGRIND :=
endif
65

G
Graydon Hoare 已提交
66 67 68 69 70 71 72 73 74 75
DOCS :=
ifeq ($(CFG_MAKEINFO),)
  $(info cfg: no makeinfo found, omitting doc/rust.html)
else
  DOCS += doc/rust.html
endif

ifeq ($(CFG_TEXI2PDF),)
  $(info cfg: no texi2pdf found, omitting doc/rust.pdf)
else
76 77 78 79 80
  ifeq ($(CFG_TEX),)
    $(info cfg: no tex found, omitting doc/rust.pdf)
  else
    DOCS += doc/rust.pdf
  endif
G
Graydon Hoare 已提交
81 82
endif

83 84 85 86
ifdef CFG_DISABLE_DOCS
  $(info cfg: disabling doc build (CFG_DISABLE_DOCS))
  DOCS :=
endif
G
Graydon Hoare 已提交
87

88 89 90 91 92 93 94 95 96 97
######################################################################
# Target-and-rule "utility variables"
######################################################################

ifdef VERBOSE
  Q :=
  E =
else
  Q := @
  E = echo $(1)
98 99
endif

100 101 102 103 104 105 106
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.
107 108 109
STAGE0 := $(Q)$(call CFG_RUN_TARG,stage0,\
                stage0/rustc$(X) $(CFG_RUSTC_FLAGS) -L stage1)
STAGE1 := $(Q)$(call CFG_RUN_TARG,stage1, \
110 111
                $(CFG_VALGRIND_COMPILE) stage1/rustc$(X) \
                $(CFG_RUSTC_FLAGS) -L stage2)
112
STAGE2 := $(Q)$(call CFG_RUN_TARG,stage2, \
113 114
                $(CFG_VALGRIND_COMPILE) stage2/rustc$(X) \
                $(CFG_RUSTC_FLAGS) -L stage3)
115 116

# "Source" files we generate in builddir along the way.
G
Graydon Hoare 已提交
117
GENERATED :=
118 119 120 121 122 123 124 125

# Delete the built-in rules.
.SUFFIXES:
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%
126

127 128 129 130
######################################################################
# Standard library variables
######################################################################

G
Graydon Hoare 已提交
131
STDLIB_CRATE := $(S)src/lib/std.rc
132
STDLIB_INPUTS := $(wildcard $(addprefix $(S)src/lib/,*.rc *.rs */*.rs))
133 134

######################################################################
135
# rustc crate variables
136 137
######################################################################

G
Graydon Hoare 已提交
138
COMPILER_CRATE := $(S)src/comp/rustc.rc
139
COMPILER_INPUTS := $(wildcard $(addprefix $(S)src/comp/, \
140 141
                                rustc.rc *.rs */*.rs))

142
######################################################################
G
Graydon Hoare 已提交
143
# Main target dependency variables
144 145
######################################################################

146
LREQ := rt/$(CFG_RUNTIME) rustllvm/$(CFG_RUSTLLVM)
147 148 149
SREQ0 := stage0/rustc$(X) $(LREQ) stage1/glue.o stage1/$(CFG_STDLIB)
SREQ1 := stage1/rustc$(X) $(LREQ) stage2/glue.o stage2/$(CFG_STDLIB)
SREQ2 := stage2/rustc$(X) $(LREQ) stage3/glue.o stage3/$(CFG_STDLIB)
150

G
Graydon Hoare 已提交
151

152 153 154 155 156
######################################################################
# Exports for sub-utilities
######################################################################

export CFG_SRC_DIR
157
export CFG_VERSION
158

P
Patrick Walton 已提交
159 160 161 162 163 164
######################################################################
# Subprograms
######################################################################

LLVM_AS := $(CFG_LLVM_BINDIR)/llvm-as

165

166 167 168
######################################################################
# Single-target rules
######################################################################
169

170 171
ifneq ($(CFG_IN_TRANSITION),)

172
CFG_INFO := $(info cfg:)
173 174
CFG_INFO := $(info cfg: *** compiler is in snapshot transition ***)
CFG_INFO := $(info cfg: *** stage2 and later will not be built ***)
175
CFG_INFO := $(info cfg:)
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190

all: rt/$(CFG_RUNTIME)          \
     rustllvm/$(CFG_RUSTLLVM)   \
     stage0/$(CFG_STDLIB)       \
     stage0/intrinsics.bc       \
     stage0/rustc$(X)           \
     $(GENERATED)               \
     $(DOCS)                    \
     stage1/$(CFG_STDLIB)       \
     stage1/intrinsics.bc       \
     stage1/glue.o              \
     stage1/rustc$(X)           \

else

191
all: rt/$(CFG_RUNTIME)          \
192
     rustllvm/$(CFG_RUSTLLVM)   \
193
     stage0/$(CFG_STDLIB)       \
P
Patrick Walton 已提交
194
     stage0/intrinsics.bc       \
195
     stage0/rustc$(X)           \
G
Graydon Hoare 已提交
196
     $(GENERATED)               \
197 198
     $(DOCS)                    \
     stage1/$(CFG_STDLIB)       \
P
Patrick Walton 已提交
199
     stage1/intrinsics.bc       \
200 201 202
     stage1/glue.o              \
     stage1/rustc$(X)           \
     stage2/$(CFG_STDLIB)       \
P
Patrick Walton 已提交
203
     stage2/intrinsics.bc       \
204
     stage2/glue.o              \
205 206 207
     stage2/rustc$(X)           \
     stage3/$(CFG_STDLIB)       \
     stage3/glue.o              \
P
Patrick Walton 已提交
208
     stage3/intrinsics.bc       \
209
     stage3/rustc$(X)
210

211 212
endif

213 214 215 216 217

######################################################################
# Re-configuration
######################################################################

218
config.mk: $(S)configure $(S)Makefile.in $(S)src/snapshots.txt
219 220 221 222
	@$(call E, cfg: reconfiguring)
	$(S)configure $(CFG_CONFIGURE_ARGS)


223
######################################################################
G
Graydon Hoare 已提交
224
# Additional makefiles
225 226
######################################################################

P
Patrick Walton 已提交
227
include $(CFG_SRC_DIR)/mk/intrinsics.mk
G
Graydon Hoare 已提交
228 229 230
include $(CFG_SRC_DIR)/mk/stage0.mk
include $(CFG_SRC_DIR)/mk/stage1.mk
include $(CFG_SRC_DIR)/mk/stage2.mk
231
include $(CFG_SRC_DIR)/mk/stage3.mk
G
Graydon Hoare 已提交
232 233 234 235 236
include $(CFG_SRC_DIR)/mk/rt.mk
include $(CFG_SRC_DIR)/mk/rustllvm.mk
include $(CFG_SRC_DIR)/mk/docs.mk
include $(CFG_SRC_DIR)/mk/tests.mk
include $(CFG_SRC_DIR)/mk/dist.mk
237
include $(CFG_SRC_DIR)/mk/snap.mk
G
Graydon Hoare 已提交
238 239
include $(CFG_SRC_DIR)/mk/clean.mk
include $(CFG_SRC_DIR)/mk/autodep.mk
240
include $(CFG_SRC_DIR)/mk/fuzzer.mk