tools.mk 7.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 15
FUZZER_LIB := $(S)src/libfuzzer/fuzzer.rc
FUZZER_INPUTS := $(wildcard $(addprefix $(S)src/libfuzzer/, *.rs))
16

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

21 22 23
# Rustpkg, the package manager and build system
RUSTPKG_LIB := $(S)src/librustpkg/rustpkg.rc
RUSTPKG_INPUTS := $(wildcard $(S)src/librustpkg/*rs)
24

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

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

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

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

41 42
$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBFUZZER):          \
		$$(FUZZER_LIB) $$(FUZZER_INPUTS)			\
N
Niko Matsakis 已提交
43
		$$(TSREQ$(1)_T_$(4)_H_$(3))					\
44
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)	\
N
Niko Matsakis 已提交
45 46
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTC)
47
	@$$(call E, compile_and_link: $$@)
48 49 50
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@

$$(TBIN$(1)_T_$(4)_H_$(3))/fuzzer$$(X):				\
51
		$$(DRIVER_CRATE)								\
52 53 54
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBFUZZER)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg fuzzer -o $$@ $$<
55

56 57 58 59 60 61 62 63
$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X):			\
		$$(COMPILETEST_CRATE) $$(COMPILETEST_INPUTS)	\
		$$(TSREQ$(1)_T_$(4)_H_$(3))						\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)      \
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$<

64 65
$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTPKG):		\
		$$(RUSTPKG_LIB) $$(RUSTPKG_INPUTS)		    \
66 67 68 69 70 71 72
		$$(TSREQ$(1)_T_$(4)_H_$(3))					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTC)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@

73
$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X):				\
74
		$$(DRIVER_CRATE) 							\
75
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTPKG)
76
	@$$(call E, compile_and_link: $$@)
77
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustpkg -o $$@ $$<
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108

$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTDOC):		\
		$$(RUSTDOC_LIB) $$(RUSTDOC_INPUTS)			\
		$$(TSREQ$(1)_T_$(4)_H_$(3))					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTC)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@

$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X):			\
		$$(DRIVER_CRATE) 							\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTDOC)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc -o $$@ $$<

$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTI):		\
		$$(RUSTI_LIB) $$(RUSTI_INPUTS)			\
		$$(TSREQ$(1)_T_$(4)_H_$(3))					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTC)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@

$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X):			\
		$$(DRIVER_CRATE) 							\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTI)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rusti -o $$@ $$<

109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUST):		\
		$$(RUST_LIB) $$(RUST_INPUTS)			\
		$$(TSREQ$(1)_T_$(4)_H_$(3))					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_CORELIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_STDLIB)	\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTC)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) -o $$@ $$< && touch $$@

$$(TBIN$(1)_T_$(4)_H_$(3))/rust$$(X):			\
		$$(DRIVER_CRATE) 							\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUST)
	@$$(call E, compile_and_link: $$@)
	$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rust -o $$@ $$<

124 125 126 127 128
endef

define TOOLS_STAGE_N_HOST


129 130 131
# Promote the stageN target to stageN+1 host
# FIXME: Shouldn't need to depend on host/librustc.so once
# rpath is working
132 133 134 135 136 137
$$(HLIB$(2)_H_$(4))/$$(CFG_LIBFUZZER):					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBFUZZER)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC)			\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@
138 139 140
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBFUZZER_GLOB) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBFUZZER_DSYM_GLOB)) \
	        $$(HLIB$(2)_H_$(4))
141

N
Niko Matsakis 已提交
142 143
$$(HBIN$(2)_H_$(4))/fuzzer$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/fuzzer$$(X)	\
144
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBFUZZER)	\
N
Niko Matsakis 已提交
145
		$$(HSREQ$(2)_H_$(4))
146 147 148
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

N
Niko Matsakis 已提交
149 150
$$(HBIN$(2)_H_$(4))/compiletest$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/compiletest$$(X)	\
151
		$$(HSREQ$(2)_H_$(4))
152 153 154
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

155

156 157
$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTPKG):				\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTPKG)	\
158 159 160 161
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC)		\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@
162 163
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_GLOB) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTPKG_DSYM_GLOB)) \
164
	        $$(HLIB$(2)_H_$(4))
165

166 167 168
$$(HBIN$(2)_H_$(4))/rustpkg$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustpkg$$(X)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTPKG)	\
169
		$$(HSREQ$(2)_H_$(4))
170 171 172
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

173 174 175 176 177 178
$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTDOC):					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTDOC)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC)			\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@
179 180 181
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_GLOB) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOC_DSYM_GLOB)) \
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
182 183 184

$$(HBIN$(2)_H_$(4))/rustdoc$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X)	\
185
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTDOC)	\
186
		$$(HSREQ$(2)_H_$(4))
G
Graydon Hoare 已提交
187 188 189
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

B
Brian Anderson 已提交
190 191 192 193 194 195
$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTI):					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUSTI)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC)			\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@
196 197 198
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_GLOB) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTI_DSYM_GLOB)) \
	        $$(HLIB$(2)_H_$(4))
G
Graydon Hoare 已提交
199

200 201
$$(HBIN$(2)_H_$(4))/rusti$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rusti$$(X)	\
B
Brian Anderson 已提交
202
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTI)	\
203
		$$(HSREQ$(2)_H_$(4))
G
Graydon Hoare 已提交
204 205 206
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUST):					\
		$$(TLIB$(1)_T_$(4)_H_$(3))/$$(CFG_LIBRUST)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUSTC)			\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@
	$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_GLOB) \
		$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUST_DSYM_GLOB)) \
	        $$(HLIB$(2)_H_$(4))

$$(HBIN$(2)_H_$(4))/rust$$(X):				\
		$$(TBIN$(1)_T_$(4)_H_$(3))/rust$$(X)	\
		$$(HLIB$(2)_H_$(4))/$$(CFG_LIBRUST)	\
		$$(HSREQ$(2)_H_$(4))
	@$$(call E, cp: $$@)
	$$(Q)cp $$< $$@

224 225
endef

226
$(foreach host,$(CFG_HOST_TRIPLES),				\
227
$(foreach target,$(CFG_TARGET_TRIPLES),				\
228 229 230
 $(eval $(call TOOLS_STAGE_N_TARGET,0,1,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,1,2,$(host),$(target)))	\
 $(eval $(call TOOLS_STAGE_N_TARGET,2,3,$(host),$(target)))))
231

232
$(foreach host,$(CFG_HOST_TRIPLES),				\
233 234 235
 $(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))))