]> git.proxmox.com Git - rustc.git/blob - mk/crates.mk
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / mk / crates.mk
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
52 TARGET_CRATES := libc std term \
53 getopts collections test rand \
54 core alloc \
55 rustc_unicode rustc_bitflags \
56 alloc_system alloc_jemalloc
57 RUSTC_CRATES := rustc rustc_typeck rustc_mir rustc_borrowck rustc_resolve rustc_driver \
58 rustc_trans rustc_back rustc_llvm rustc_privacy rustc_lint \
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
62 HOST_CRATES := syntax syntax_ext $(RUSTC_CRATES) rustdoc fmt_macros \
63 flate arena graphviz rbml log serialize
64 TOOLS := compiletest rustdoc rustc rustbook error_index_generator
65
66 DEPS_core :=
67 DEPS_alloc := core libc alloc_system
68 DEPS_alloc_system := core libc
69 DEPS_alloc_jemalloc := core libc native:jemalloc
70 DEPS_collections := core alloc rustc_unicode
71 DEPS_libc := core
72 DEPS_rand := core
73 DEPS_rustc_bitflags := core
74 DEPS_rustc_unicode := core
75
76 DEPS_std := core libc rand alloc collections rustc_unicode \
77 native:backtrace \
78 alloc_system
79 DEPS_arena := std
80 DEPS_glob := std
81 DEPS_flate := std native:miniz
82 DEPS_fmt_macros = std
83 DEPS_getopts := std
84 DEPS_graphviz := std
85 DEPS_log := std
86 DEPS_num := std
87 DEPS_rbml := std log serialize
88 DEPS_serialize := std log
89 DEPS_term := std
90 DEPS_test := std getopts term native:rust_test_helpers
91
92 DEPS_syntax := std term serialize log arena libc rustc_bitflags rustc_unicode
93 DEPS_syntax_ext := syntax fmt_macros
94
95 DEPS_rustc_const_math := std syntax log serialize
96 DEPS_rustc_const_eval := rustc_const_math rustc syntax log serialize \
97 rustc_back graphviz
98
99 DEPS_rustc := syntax fmt_macros flate arena serialize getopts rbml \
100 log graphviz rustc_back rustc_data_structures\
101 rustc_const_math
102 DEPS_rustc_back := std syntax flate log libc
103 DEPS_rustc_borrowck := rustc rustc_mir log graphviz syntax
104 DEPS_rustc_data_structures := std log serialize
105 DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
106 rustc_typeck rustc_mir rustc_resolve log syntax serialize rustc_llvm \
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
110 DEPS_rustc_lint := rustc log syntax rustc_const_eval
111 DEPS_rustc_llvm := native:rustllvm libc std rustc_bitflags
112 DEPS_rustc_metadata := rustc syntax rbml rustc_const_math
113 DEPS_rustc_passes := syntax rustc core rustc_const_eval
114 DEPS_rustc_mir := rustc syntax rustc_const_math rustc_const_eval
115 DEPS_rustc_resolve := arena rustc log syntax
116 DEPS_rustc_platform_intrinsics := std
117 DEPS_rustc_plugin := rustc rustc_metadata syntax rustc_mir
118 DEPS_rustc_privacy := rustc log syntax
119 DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back rustc_mir \
120 log syntax serialize rustc_llvm rustc_platform_intrinsics \
121 rustc_const_math rustc_const_eval rustc_incremental
122 DEPS_rustc_incremental := rbml rustc serialize rustc_data_structures
123 DEPS_rustc_save_analysis := rustc log syntax
124 DEPS_rustc_typeck := rustc syntax rustc_platform_intrinsics rustc_const_math \
125 rustc_const_eval
126
127 DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
128 test rustc_lint rustc_const_eval
129
130
131 TOOL_DEPS_compiletest := test getopts log
132 TOOL_DEPS_rustdoc := rustdoc
133 TOOL_DEPS_rustc := rustc_driver
134 TOOL_DEPS_rustbook := std rustdoc
135 TOOL_DEPS_error_index_generator := rustdoc syntax serialize
136 TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs
137 TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs
138 TOOL_SOURCE_rustc := $(S)src/driver/driver.rs
139 TOOL_SOURCE_rustbook := $(S)src/tools/rustbook/main.rs
140 TOOL_SOURCE_error_index_generator := $(S)src/tools/error_index_generator/main.rs
141
142 ONLY_RLIB_core := 1
143 ONLY_RLIB_libc := 1
144 ONLY_RLIB_alloc := 1
145 ONLY_RLIB_rand := 1
146 ONLY_RLIB_collections := 1
147 ONLY_RLIB_rustc_unicode := 1
148 ONLY_RLIB_rustc_bitflags := 1
149 ONLY_RLIB_alloc_system := 1
150 ONLY_RLIB_alloc_jemalloc := 1
151
152 TARGET_SPECIFIC_alloc_jemalloc := 1
153
154 # Documented-by-default crates
155 DOC_CRATES := std alloc collections core libc rustc_unicode
156
157 ifeq ($(CFG_DISABLE_JEMALLOC),)
158 RUSTFLAGS_rustc_back := --cfg 'feature="jemalloc"'
159 endif
160
161 ################################################################################
162 # You should not need to edit below this line
163 ################################################################################
164
165 CRATES := $(TARGET_CRATES) $(HOST_CRATES)
166
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
171 define RUST_CRATE
172 CRATEFILE_$(1) := $$(SREL)src/lib$(1)/lib.rs
173 RSINPUTS_$(1) := $$(call rwildcard,$(S)src/lib$(1)/,*.rs)
174 NATIVE_DEPS_$(1) := $$(patsubst native:%,%,$$(filter native:%,$$(DEPS_$(1))))
175 endef
176
177 $(foreach crate,$(CRATES),$(eval $(call RUST_CRATE,$(crate))))
178
179 # $(1) - crate
180 # $(2) - target
181 define RUST_CRATE_DEPS
182 RUST_DEPS_$(1)_T_$(2) := $$(filter-out native:%,$$(DEPS_$(1)))
183 endef
184
185 $(foreach target,$(CFG_TARGET),\
186 $(foreach crate,$(CRATES),$(eval $(call RUST_CRATE_DEPS,$(crate),$(target)))))
187
188 # $(1) - target
189 # $(2) - crate
190 define DEFINE_TARGET_CRATES
191 ifndef TARGET_SPECIFIC_$(2)
192 TARGET_CRATES_$(1) += $(2)
193 endif
194 endef
195
196 $(foreach target,$(CFG_TARGET),\
197 $(foreach crate,$(TARGET_CRATES),\
198 $(eval $(call DEFINE_TARGET_CRATES,$(target),$(crate)))))
199
200 # Similar to the macro above for crates, this macro is for tools
201 #
202 # $(1) is the crate to generate variables for
203 define RUST_TOOL
204 TOOL_INPUTS_$(1) := $$(call rwildcard,$$(dir $$(TOOL_SOURCE_$(1))),*.rs)
205 endef
206
207 $(foreach crate,$(TOOLS),$(eval $(call RUST_TOOL,$(crate))))
208
209 CRATEFILE_libc := $(SREL)src/liblibc/src/lib.rs
210 RUSTFLAGS_libc := --cfg stdbuild