]> git.proxmox.com Git - rustc.git/blame - mk/crates.mk
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / mk / crates.mk
CommitLineData
1a4d82fc
JJ
1# Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2# file at the top-level directory of this distribution and at
3# http://rust-lang.org/COPYRIGHT.
4#
5# Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6# http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7# <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8# option. This file may not be copied, modified, or distributed
9# except according to those terms.
10
11################################################################################
12# Rust's standard distribution of crates and tools
13#
14# The crates outlined below are the standard distribution of libraries provided
15# in a rust installation. These rules are meant to abstract over the
16# dependencies (both native and rust) of crates and basically generate all the
17# necessary makefile rules necessary to build everything.
18#
19# Here's an explanation of the variables below
20#
21# TARGET_CRATES
22# This list of crates will be built for all targets, including
23# cross-compiled targets
24#
25# HOST_CRATES
26# This list of crates will be compiled for only host targets. Note that
27# this set is explicitly *not* a subset of TARGET_CRATES, but rather it is
28# a disjoint set. Nothing in the TARGET_CRATES set can depend on crates in
29# the HOST_CRATES set, but the HOST_CRATES set can depend on target
30# crates.
31#
32# TOOLS
33# A list of all tools which will be built as part of the compilation
34# process. It is currently assumed that most tools are built through
35# src/driver/driver.rs with a particular configuration (there's a
36# corresponding library providing the implementation)
37#
38# DEPS_<crate>
39# These lists are the dependencies of the <crate> that is to be built.
40# Rust dependencies are listed bare (i.e. std) and native
41# dependencies have a "native:" prefix (i.e. native:hoedown). All deps
42# will be built before the crate itself is built.
43#
44# TOOL_DEPS_<tool>/TOOL_SOURCE_<tool>
45# Similar to the DEPS variable, this is the library crate dependencies
46# list for tool as well as the source file for the specified tool
47#
48# You shouldn't need to modify much other than these variables. Crates are
49# automatically generated for all stage/host/target combinations.
50################################################################################
51
54a0048b
SL
52TARGET_CRATES := libc std term \
53 getopts collections test rand \
54 core alloc \
e9174d1e 55 rustc_unicode rustc_bitflags \
7453a54e 56 alloc_system alloc_jemalloc
e9174d1e 57RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_driver \
d9579d0f 58 rustc_trans rustc_back rustc_llvm rustc_privacy rustc_lint \
54a0048b
SL
59 rustc_data_structures rustc_platform_intrinsics \
60 rustc_plugin rustc_metadata rustc_passes rustc_save_analysis \
61 rustc_const_eval rustc_const_math rustc_incremental
62HOST_CRATES := syntax syntax_ext $(RUSTC_CRATES) rustdoc fmt_macros \
63 flate arena graphviz rbml log serialize
7453a54e 64TOOLS := compiletest rustdoc rustc rustbook error_index_generator
1a4d82fc
JJ
65
66DEPS_core :=
b039eaaf
SL
67DEPS_alloc := core libc alloc_system
68DEPS_alloc_system := core libc
7453a54e 69DEPS_alloc_jemalloc := core libc native:jemalloc
b039eaaf 70DEPS_collections := core alloc rustc_unicode
1a4d82fc 71DEPS_libc := core
b039eaaf
SL
72DEPS_rand := core
73DEPS_rustc_bitflags := core
d9579d0f 74DEPS_rustc_unicode := core
b039eaaf 75
d9579d0f 76DEPS_std := core libc rand alloc collections rustc_unicode \
9cc50fc6 77 native:backtrace \
e9174d1e 78 alloc_system
b039eaaf
SL
79DEPS_arena := std
80DEPS_glob := std
81DEPS_flate := std native:miniz
82DEPS_fmt_macros = std
83DEPS_getopts := std
1a4d82fc 84DEPS_graphviz := std
b039eaaf
SL
85DEPS_log := std
86DEPS_num := std
87DEPS_rbml := std log serialize
88DEPS_serialize := std log
54a0048b
SL
89DEPS_term := std
90DEPS_test := std getopts term native:rust_test_helpers
b039eaaf 91
54a0048b 92DEPS_syntax := std term serialize log arena libc rustc_bitflags rustc_unicode
9cc50fc6 93DEPS_syntax_ext := syntax fmt_macros
b039eaaf 94
54a0048b
SL
95DEPS_rustc_const_math := std syntax log serialize
96DEPS_rustc_const_eval := rustc_const_math rustc syntax log serialize \
97 rustc_back graphviz
98
99DEPS_rustc := syntax fmt_macros flate arena serialize getopts rbml \
100 log graphviz rustc_back rustc_data_structures\
101 rustc_const_math
102DEPS_rustc_back := std syntax flate log libc
103DEPS_rustc_borrowck := rustc rustc_mir log graphviz syntax
b039eaaf 104DEPS_rustc_data_structures := std log serialize
1a4d82fc 105DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
e9174d1e 106 rustc_typeck rustc_mir rustc_resolve log syntax serialize rustc_llvm \
54a0048b
SL
107 rustc_trans rustc_privacy rustc_lint rustc_plugin \
108 rustc_metadata syntax_ext rustc_passes rustc_save_analysis rustc_const_eval \
109 rustc_incremental
110DEPS_rustc_lint := rustc log syntax rustc_const_eval
e9174d1e 111DEPS_rustc_llvm := native:rustllvm libc std rustc_bitflags
54a0048b
SL
112DEPS_rustc_metadata := rustc syntax rbml rustc_const_math
113DEPS_rustc_passes := syntax rustc core rustc_const_eval
114DEPS_rustc_mir := rustc syntax rustc_const_math rustc_const_eval
115DEPS_rustc_resolve := arena rustc log syntax
116DEPS_rustc_platform_intrinsics := std
7453a54e 117DEPS_rustc_plugin := rustc rustc_metadata syntax rustc_mir
54a0048b 118DEPS_rustc_privacy := rustc log syntax
92a42be0 119DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back rustc_mir \
54a0048b
SL
120 log syntax serialize rustc_llvm rustc_platform_intrinsics \
121 rustc_const_math rustc_const_eval rustc_incremental
122DEPS_rustc_incremental := rbml rustc serialize rustc_data_structures
123DEPS_rustc_save_analysis := rustc log syntax
124DEPS_rustc_typeck := rustc syntax rustc_platform_intrinsics rustc_const_math \
125 rustc_const_eval
b039eaaf 126
1a4d82fc 127DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
54a0048b 128 test rustc_lint rustc_const_eval
b039eaaf 129
1a4d82fc 130
54a0048b 131TOOL_DEPS_compiletest := test getopts log
1a4d82fc
JJ
132TOOL_DEPS_rustdoc := rustdoc
133TOOL_DEPS_rustc := rustc_driver
85aaf69f 134TOOL_DEPS_rustbook := std rustdoc
7453a54e 135TOOL_DEPS_error_index_generator := rustdoc syntax serialize
1a4d82fc
JJ
136TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs
137TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs
138TOOL_SOURCE_rustc := $(S)src/driver/driver.rs
54a0048b
SL
139TOOL_SOURCE_rustbook := $(S)src/tools/rustbook/main.rs
140TOOL_SOURCE_error_index_generator := $(S)src/tools/error_index_generator/main.rs
1a4d82fc
JJ
141
142ONLY_RLIB_core := 1
143ONLY_RLIB_libc := 1
144ONLY_RLIB_alloc := 1
145ONLY_RLIB_rand := 1
146ONLY_RLIB_collections := 1
d9579d0f 147ONLY_RLIB_rustc_unicode := 1
85aaf69f 148ONLY_RLIB_rustc_bitflags := 1
e9174d1e 149ONLY_RLIB_alloc_system := 1
7453a54e
SL
150ONLY_RLIB_alloc_jemalloc := 1
151
152TARGET_SPECIFIC_alloc_jemalloc := 1
1a4d82fc 153
9346a6ac 154# Documented-by-default crates
d9579d0f
AL
155DOC_CRATES := std alloc collections core libc rustc_unicode
156
e9174d1e 157ifeq ($(CFG_DISABLE_JEMALLOC),)
7453a54e 158RUSTFLAGS_rustc_back := --cfg 'feature="jemalloc"'
e9174d1e
SL
159endif
160
1a4d82fc
JJ
161################################################################################
162# You should not need to edit below this line
163################################################################################
164
e9174d1e
SL
165CRATES := $(TARGET_CRATES) $(HOST_CRATES)
166
1a4d82fc
JJ
167# This macro creates some simple definitions for each crate being built, just
168# some munging of all of the parameters above.
169#
170# $(1) is the crate to generate variables for
171define RUST_CRATE
62682a34 172CRATEFILE_$(1) := $$(SREL)src/lib$(1)/lib.rs
1a4d82fc 173RSINPUTS_$(1) := $$(call rwildcard,$(S)src/lib$(1)/,*.rs)
1a4d82fc
JJ
174NATIVE_DEPS_$(1) := $$(patsubst native:%,%,$$(filter native:%,$$(DEPS_$(1))))
175endef
176
177$(foreach crate,$(CRATES),$(eval $(call RUST_CRATE,$(crate))))
178
7453a54e
SL
179# $(1) - crate
180# $(2) - target
181define RUST_CRATE_DEPS
182RUST_DEPS_$(1)_T_$(2) := $$(filter-out native:%,$$(DEPS_$(1)))
183endef
184
185$(foreach target,$(CFG_TARGET),\
186 $(foreach crate,$(CRATES),$(eval $(call RUST_CRATE_DEPS,$(crate),$(target)))))
187
188# $(1) - target
189# $(2) - crate
190define DEFINE_TARGET_CRATES
191ifndef TARGET_SPECIFIC_$(2)
192TARGET_CRATES_$(1) += $(2)
193endif
194endef
195
196$(foreach target,$(CFG_TARGET),\
197 $(foreach crate,$(TARGET_CRATES),\
198 $(eval $(call DEFINE_TARGET_CRATES,$(target),$(crate)))))
199
1a4d82fc
JJ
200# Similar to the macro above for crates, this macro is for tools
201#
202# $(1) is the crate to generate variables for
203define RUST_TOOL
204TOOL_INPUTS_$(1) := $$(call rwildcard,$$(dir $$(TOOL_SOURCE_$(1))),*.rs)
205endef
206
207$(foreach crate,$(TOOLS),$(eval $(call RUST_TOOL,$(crate))))
d9579d0f 208
92a42be0
SL
209CRATEFILE_libc := $(SREL)src/liblibc/src/lib.rs
210RUSTFLAGS_libc := --cfg stdbuild