tools.mk 10.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# Copyright 2012 The Rust Project Developers. See the COPYRIGHT
# file at the top-level directory of this distribution and at
# http://rust-lang.org/COPYRIGHT.
#
# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.

11 12 13
# Rules for non-core tools built with the compiler, both for target
# and host architectures

14
# The test runner that runs the cfail/rfail/rpass and bxench tests
15 16
COMPILETEST_CRATE := $(S)src/compiletest/compiletest.rs
COMPILETEST_INPUTS := $(wildcard $(S)src/compiletest/*.rs)
17

18
# Rustpkg, the package manager and build system
19 20
RUSTPKG_LIB := $(S)src/librustpkg/rustpkg.rs
RUSTPKG_INPUTS := $(wildcard $(S)src/librustpkg/*.rs)
21

G
Graydon Hoare 已提交
22
# Rustdoc, the documentation tool
23
RUSTDOC_LIB := $(S)src/librustdoc/rustdoc.rs
B
Brian Anderson 已提交
24
RUSTDOC_INPUTS := $(wildcard $(S)src/librustdoc/*.rs)
G
Graydon Hoare 已提交
25

C
Corey Richardson 已提交
26 27
# rustdoc_ng, the next generation documentation tool

28 29
RUSTDOCNG_LIB := $(S)src/rustdoc_ng/lib.rs
RUSTDOCNG_INPUTS := $(wildcard $(S)src/rustdoc_ng/*.rs)
C
Corey Richardson 已提交
30

31
# Rusti, the JIT REPL
32
RUSTI_LIB := $(S)src/librusti/rusti.rs
B
Brian Anderson 已提交
33
RUSTI_INPUTS := $(wildcard $(S)src/librusti/*.rs)
34

35
# Rust, the convenience tool
36
RUST_LIB := $(S)src/librust/rust.rs
37 38
RUST_INPUTS := $(wildcard $(S)src/librust/*.rs)

39 40
# FIXME: These are only built for the host arch. Eventually we'll
# have tools that need to built for other targets.
41
define TOOLS_STAGE_N_TARGET
42

43
$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X_$(4)):			\
44
		$$(COMPILETEST_CRATE) $$(COMPILETEST_INPUTS)	\
45
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
46
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
47 48 49
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$<

50
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4)):		\
51
		$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS)		    \
52
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
53
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
54
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
55
	@$$(call E, compile_and_link: $$@)
56
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
57
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
58
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
59

60
$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X_$(4)):				\
61
		$$(DRIVER_CRATE) 							\
62 63
		$$(TSREQ$(1)_T_$(4)_H_$(3))				\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4))	\
64
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
65
	@$$(call E, compile_and_link: $$@)
66
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustpkg -o $$@ $$<
67

68
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4)):		\
69
		$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS)			\
70
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
71
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
72
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
73
	@$$(call E, compile_and_link: $$@)
74
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
75
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
76
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
77

78 79
$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X_$(4)):			\
		$$(DRIVER_CRATE) 							\
80
		$$(TSREQ$(1)_T_$(4)_H_$(3))						\
81
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4))			\
82
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
83 84 85
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc -o $$@ $$<

86 87 88 89 90 91 92 93 94 95
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4)):		\
		$$(RUSTDOCNG_LIB) $$(RUSTDOCNG_INPUTS)			\
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
	@$$(call E, compile_and_link: $$@)
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
	$$(STAGE$(1)_T_$(4)_H_$(3)) --out-dir $$(@D) $$< && touch $$@
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))

C
Corey Richardson 已提交
96 97 98 99 100 101 102 103
$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc_ng$$(X_$(4)):			\
		$$(DRIVER_CRATE) 							\
		$$(TSREQ$(1)_T_$(4)_H_$(3))						\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4))			\
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc_ng -o $$@ $$<

104
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)):		\
105
		$$(RUSTI_LIB) $$(RUSTI_INPUTS)			\
106
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
107 108
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4))	\
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
109
	@$$(call E, compile_and_link: $$@)
110
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
111
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
112
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
113

114
$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X_$(4)):			\
115
		$$(DRIVER_CRATE) 							\
116
		$$(TSREQ$(1)_T_$(4)_H_$(3))			\
117 118
		$$(TLIB$(1)_T_$(4)_H_$(4))/$(CFG_LIBRUSTI_$(4)) \
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
119 120 121
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rusti -o $$@ $$<

122 123
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4)):		\
		$$(RUST_LIB) $$(RUST_INPUTS)			\
124
		$$(SREQ$(1)_T_$(4)_H_$(3))				\
125 126 127
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4))	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4))		\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4))	\
128
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4))	\
129 130
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4))		\
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
131
	@$$(call E, compile_and_link: $$@)
132
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
133
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
134
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
135

136
$$(TBIN$(1)_T_$(4)_H_$(3))/rust$$(X_$(4)):			\
137
		$$(DRIVER_CRATE) 							\
138
		$$(TSREQ$(1)_T_$(4)_H_$(3))			\
139
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4)) \
140
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
141 142 143
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rust -o $$@ $$<

144 145 146 147
endef

define TOOLS_STAGE_N_HOST

148 149
$$(HBIN$(2)_H_$(4))/compiletest$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X_$(4))	\
150
		$$(HSREQ$(2)_H_$(4))					\
151
		| $$(HBIN$(2)_H_$(4))/
152 153 154
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

155

156 157 158
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTPKG_$(4)):				\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))		\
159 160
		$$(HSREQ$(2)_H_$(4))					\
		| $$(HLIB$(2)_H_$(4))/
161
	@$$(call E, cp: $$@)
162
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
163
	$$(Q)cp $$< $$@
164
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
165 166
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_DSYM_GLOB_$(4))) \
167
	        $$(HLIB$(2)_H_$(4))
168

169 170 171
$$(HBIN$(2)_H_$(4))/rustpkg$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTPKG_$(4))	\
172
		$$(HSREQ$(2)_H_$(4))				\
173
		| $$(HBIN$(2)_H_$(4))/
174 175 176
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

177
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOC_$(4)):					\
178
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4))	\
179 180
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))			\
		$$(HSREQ$(2)_H_$(4)) \
181
		| $$(HLIB$(2)_H_$(4))/
182
	@$$(call E, cp: $$@)
183
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
184
	$$(Q)cp $$< $$@
185
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
186 187
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_DSYM_GLOB_$(4))) \
188
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
189

190 191 192
$$(HBIN$(2)_H_$(4))/rustdoc$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOC_$(4))	\
193 194
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
G
Graydon Hoare 已提交
195 196 197
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

198 199 200 201 202 203 204 205 206 207 208 209 210
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOCNG_$(4)):					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))			\
		$$(HSREQ$(2)_H_$(4)) \
		| $$(HLIB$(2)_H_$(4))/
	@$$(call E, cp: $$@)
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
	$$(Q)cp $$< $$@
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOCNG_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOCNG_DSYM_GLOB_$(4))) \
	        $$(HLIB$(2)_H_$(4))

211
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTI_$(4)):					\
212
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4))	\
213 214
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))			\
		$$(HSREQ$(2)_H_$(4)) \
215
		| $$(HLIB$(2)_H_$(4))/
B
Brian Anderson 已提交
216
	@$$(call E, cp: $$@)
217
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
B
Brian Anderson 已提交
218
	$$(Q)cp $$< $$@
219
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
220 221
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_DSYM_GLOB_$(4))) \
222
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
223

224 225 226
$$(HBIN$(2)_H_$(4))/rusti$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTI_$(4))	\
227 228
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
G
Graydon Hoare 已提交
229 230 231
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

232
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUST_$(4)):					\
233
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4))	\
234 235 236
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))	\
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HLIB$(2)_H_$(4))/
237
	@$$(call E, cp: $$@)
238
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
239
	$$(Q)cp $$< $$@
240
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
241 242
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_DSYM_GLOB)_$(4)) \
243 244
	        $$(HLIB$(2)_H_$(4))

245 246
$$(HBIN$(2)_H_$(4))/rust$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rust$$(X_$(4))	\
247
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUST_$(4))	\
248 249
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
250 251 252
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

253 254
endef

255
$(foreach host,$(CFG_HOST_TRIPLES),				\
256
$(foreach target,$(CFG_TARGET_TRIPLES),				\
257 258
 $(eval $(call TOOLS_STAGE_N_TARGET,0,1,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,1,2,$(host),$(target)))	\
259 260
 $(eval $(call TOOLS_STAGE_N_TARGET,2,3,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,3,bogus,$(host),$(target)))))
261

262
$(foreach host,$(CFG_HOST_TRIPLES),				\
263 264 265
 $(eval $(call TOOLS_STAGE_N_HOST,0,1,$(host),$(host)))	\
 $(eval $(call TOOLS_STAGE_N_HOST,1,2,$(host),$(host)))	\
 $(eval $(call TOOLS_STAGE_N_HOST,2,3,$(host),$(host))))