]> git.lizzy.rs Git - rust.git/blob - mk/crates.mk
Stabilize a few remaining stragglers
[rust.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 flate arena term \
53                  serialize getopts collections test rand \
54                  log graphviz core rbml alloc \
55                  unicode rustc_bitflags
56 RUSTC_CRATES := rustc rustc_typeck rustc_borrowck rustc_resolve rustc_driver \
57                 rustc_trans rustc_back rustc_llvm rustc_privacy rustc_lint
58 HOST_CRATES := syntax $(RUSTC_CRATES) rustdoc fmt_macros
59 CRATES := $(TARGET_CRATES) $(HOST_CRATES)
60 TOOLS := compiletest rustdoc rustc rustbook
61
62 DEPS_core :=
63 DEPS_libc := core
64 DEPS_unicode := core
65 DEPS_alloc := core libc native:jemalloc
66 DEPS_std := core libc rand alloc collections unicode \
67         native:rust_builtin native:backtrace native:rustrt_native \
68         rustc_bitflags
69 DEPS_graphviz := std
70 DEPS_syntax := std term serialize log fmt_macros arena libc
71 DEPS_rustc_driver := arena flate getopts graphviz libc rustc rustc_back rustc_borrowck \
72                      rustc_typeck rustc_resolve log syntax serialize rustc_llvm \
73                      rustc_trans rustc_privacy rustc_lint
74
75 DEPS_rustc_trans := arena flate getopts graphviz libc rustc rustc_back \
76                         log syntax serialize rustc_llvm
77 DEPS_rustc_typeck := rustc syntax
78 DEPS_rustc_borrowck := rustc log graphviz syntax
79 DEPS_rustc_resolve := rustc log syntax
80 DEPS_rustc_privacy := rustc log syntax
81 DEPS_rustc_lint := rustc log syntax
82 DEPS_rustc := syntax flate arena serialize getopts rbml \
83               log graphviz rustc_llvm rustc_back
84 DEPS_rustc_llvm := native:rustllvm libc std
85 DEPS_rustc_back := std syntax rustc_llvm flate log libc
86 DEPS_rustdoc := rustc rustc_driver native:hoedown serialize getopts \
87                 test rustc_lint
88 DEPS_rustc_bitflags := core
89 DEPS_flate := std native:miniz
90 DEPS_arena := std
91 DEPS_graphviz := std
92 DEPS_glob := std
93 DEPS_serialize := std log
94 DEPS_rbml := std log serialize
95 DEPS_term := std log
96 DEPS_getopts := std
97 DEPS_collections := core alloc unicode
98 DEPS_num := std
99 DEPS_test := std getopts serialize rbml term native:rust_test_helpers
100 DEPS_rand := core
101 DEPS_log := std
102 DEPS_fmt_macros = std
103
104 TOOL_DEPS_compiletest := test getopts
105 TOOL_DEPS_rustdoc := rustdoc
106 TOOL_DEPS_rustc := rustc_driver
107 TOOL_DEPS_rustbook := std rustdoc
108 TOOL_SOURCE_compiletest := $(S)src/compiletest/compiletest.rs
109 TOOL_SOURCE_rustdoc := $(S)src/driver/driver.rs
110 TOOL_SOURCE_rustc := $(S)src/driver/driver.rs
111 TOOL_SOURCE_rustbook := $(S)src/rustbook/main.rs
112
113 ONLY_RLIB_core := 1
114 ONLY_RLIB_libc := 1
115 ONLY_RLIB_alloc := 1
116 ONLY_RLIB_rand := 1
117 ONLY_RLIB_collections := 1
118 ONLY_RLIB_unicode := 1
119 ONLY_RLIB_rustc_bitflags := 1
120
121 ################################################################################
122 # You should not need to edit below this line
123 ################################################################################
124
125 # On channels where the only usable crate is std, only build documentation for
126 # std. This keeps distributions small and doesn't clutter up the API docs with
127 # confusing internal details from the crates behind the facade.
128 #
129 # (Disabled while cmr figures out how to change rustdoc to make reexports work
130 # slightly nicer. Otherwise, all cross-crate links to Vec will go to
131 # libcollections, breaking them, and [src] links for anything reexported will
132 # not work.)
133
134 #ifeq ($(CFG_RELEASE_CHANNEL),stable)
135 #DOC_CRATES := std
136 #else
137 #ifeq ($(CFG_RELEASE_CHANNEL),beta)
138 #DOC_CRATES := std
139 #else
140 DOC_CRATES := $(filter-out rustc, \
141            $(filter-out rustc_trans, \
142            $(filter-out rustc_typeck, \
143            $(filter-out rustc_borrowck, \
144            $(filter-out rustc_resolve, \
145            $(filter-out rustc_driver, \
146            $(filter-out rustc_privacy, \
147            $(filter-out rustc_lint, \
148            $(filter-out log, \
149            $(filter-out getopts, \
150            $(filter-out syntax, $(CRATES))))))))))))
151 #endif
152 #endif
153 COMPILER_DOC_CRATES := rustc rustc_trans rustc_borrowck rustc_resolve \
154                        rustc_typeck rustc_driver syntax rustc_privacy \
155                        rustc_lint
156
157 # This macro creates some simple definitions for each crate being built, just
158 # some munging of all of the parameters above.
159 #
160 # $(1) is the crate to generate variables for
161 define RUST_CRATE
162 CRATEFILE_$(1) := $$(S)src/lib$(1)/lib.rs
163 RSINPUTS_$(1) := $$(call rwildcard,$(S)src/lib$(1)/,*.rs)
164 RUST_DEPS_$(1) := $$(filter-out native:%,$$(DEPS_$(1)))
165 NATIVE_DEPS_$(1) := $$(patsubst native:%,%,$$(filter native:%,$$(DEPS_$(1))))
166 endef
167
168 $(foreach crate,$(CRATES),$(eval $(call RUST_CRATE,$(crate))))
169
170 # Similar to the macro above for crates, this macro is for tools
171 #
172 # $(1) is the crate to generate variables for
173 define RUST_TOOL
174 TOOL_INPUTS_$(1) := $$(call rwildcard,$$(dir $$(TOOL_SOURCE_$(1))),*.rs)
175 endef
176
177 $(foreach crate,$(TOOLS),$(eval $(call RUST_TOOL,$(crate))))