tools.mk 8.9 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

26
# Rusti, the JIT REPL
27
RUSTI_LIB := $(S)src/librusti/rusti.rs
B
Brian Anderson 已提交
28
RUSTI_INPUTS := $(wildcard $(S)src/librusti/*.rs)
29

30
# Rust, the convenience tool
31
RUST_LIB := $(S)src/librust/rust.rs
32 33
RUST_INPUTS := $(wildcard $(S)src/librust/*.rs)

34 35
# FIXME: These are only built for the host arch. Eventually we'll
# have tools that need to built for other targets.
36
define TOOLS_STAGE_N_TARGET
37

38
$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X_$(4)):			\
39
		$$(COMPILETEST_CRATE) $$(COMPILETEST_INPUTS)	\
40
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
41
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
42 43 44
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$<

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

55
$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X_$(4)):				\
56
		$$(DRIVER_CRATE) 							\
57 58
		$$(TSREQ$(1)_T_$(4)_H_$(3))				\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4))	\
59
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
60
	@$$(call E, compile_and_link: $$@)
61
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustpkg -o $$@ $$<
62

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

73 74
$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X_$(4)):			\
		$$(DRIVER_CRATE) 							\
75
		$$(TSREQ$(1)_T_$(4)_H_$(3))						\
76
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4))			\
77
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
78 79 80
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc -o $$@ $$<

81
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)):		\
82
		$$(RUSTI_LIB) $$(RUSTI_INPUTS)			\
83
		$$(SREQ$(1)_T_$(4)_H_$(3))			\
84 85
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4))	\
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
86
	@$$(call E, compile_and_link: $$@)
87
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
88
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
89
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
90

91
$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X_$(4)):			\
92
		$$(DRIVER_CRATE) 							\
93
		$$(TSREQ$(1)_T_$(4)_H_$(3))			\
94 95
		$$(TLIB$(1)_T_$(4)_H_$(4))/$(CFG_LIBRUSTI_$(4)) \
		| $$(TBIN$(1)_T_$(4)_H_$(3))/
96 97 98
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rusti -o $$@ $$<

99 100
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4)):		\
		$$(RUST_LIB) $$(RUST_INPUTS)			\
101
		$$(SREQ$(1)_T_$(4)_H_$(3))				\
102 103 104
		$$(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))	\
105 106
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4))		\
		| $$(TLIB$(1)_T_$(4)_H_$(3))/
107
	@$$(call E, compile_and_link: $$@)
108
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
109
	$$(STAGE$(1)_T_$(4)_H_$(3)) $$(WFLAGS_ST$(1)) --out-dir $$(@D) $$< && touch $$@
110
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
111

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

120 121 122 123
endef

define TOOLS_STAGE_N_HOST

124 125
$$(HBIN$(2)_H_$(4))/compiletest$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X_$(4))	\
126
		$$(HSREQ$(2)_H_$(4))					\
127
		| $$(HBIN$(2)_H_$(4))/
128 129 130
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

131

132 133 134
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTPKG_$(4)):				\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))		\
135 136
		$$(HSREQ$(2)_H_$(4))					\
		| $$(HLIB$(2)_H_$(4))/
137
	@$$(call E, cp: $$@)
138
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
139
	$$(Q)cp $$< $$@
140
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTPKG_GLOB_$(4)),$$(notdir $$@))
141 142
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_DSYM_GLOB_$(4))) \
143
	        $$(HLIB$(2)_H_$(4))
144

145 146 147
$$(HBIN$(2)_H_$(4))/rustpkg$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTPKG_$(4))	\
148
		$$(HSREQ$(2)_H_$(4))				\
149
		| $$(HBIN$(2)_H_$(4))/
150 151 152
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

153
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOC_$(4)):					\
154
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4))	\
155 156
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))			\
		$$(HSREQ$(2)_H_$(4)) \
157
		| $$(HLIB$(2)_H_$(4))/
158
	@$$(call E, cp: $$@)
159
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
160
	$$(Q)cp $$< $$@
161
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOC_GLOB_$(4)),$$(notdir $$@))
162 163
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_DSYM_GLOB_$(4))) \
164
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
165

166 167 168
$$(HBIN$(2)_H_$(4))/rustdoc$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOC_$(4))	\
169 170
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
G
Graydon Hoare 已提交
171 172 173
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

174
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTI_$(4)):					\
175
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4))	\
176 177
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))			\
		$$(HSREQ$(2)_H_$(4)) \
178
		| $$(HLIB$(2)_H_$(4))/
B
Brian Anderson 已提交
179
	@$$(call E, cp: $$@)
180
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
B
Brian Anderson 已提交
181
	$$(Q)cp $$< $$@
182
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTI_GLOB_$(4)),$$(notdir $$@))
183 184
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_DSYM_GLOB_$(4))) \
185
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
186

187 188 189
$$(HBIN$(2)_H_$(4))/rusti$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X_$(4))	\
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTI_$(4))	\
190 191
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
G
Graydon Hoare 已提交
192 193 194
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

195
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUST_$(4)):					\
196
		$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4))	\
197 198 199
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4))	\
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HLIB$(2)_H_$(4))/
200
	@$$(call E, cp: $$@)
201
	$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
202
	$$(Q)cp $$< $$@
203
	$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUST_GLOB_$(4)),$$(notdir $$@))
204 205
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_GLOB_$(4)) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_DSYM_GLOB)_$(4)) \
206 207
	        $$(HLIB$(2)_H_$(4))

208 209
$$(HBIN$(2)_H_$(4))/rust$$(X_$(4)):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rust$$(X_$(4))	\
210
		$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUST_$(4))	\
211 212
		$$(HSREQ$(2)_H_$(4))				\
		| $$(HBIN$(2)_H_$(4))/
213 214 215
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

216 217
endef

218
$(foreach host,$(CFG_HOST_TRIPLES),				\
219
$(foreach target,$(CFG_TARGET_TRIPLES),				\
220 221
 $(eval $(call TOOLS_STAGE_N_TARGET,0,1,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,1,2,$(host),$(target)))	\
222 223
 $(eval $(call TOOLS_STAGE_N_TARGET,2,3,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,3,bogus,$(host),$(target)))))
224

225
$(foreach host,$(CFG_HOST_TRIPLES),				\
226 227 228
 $(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))))