@@ -28,7 +28,6 @@ use crate::GitRepo;
28
28
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
29
29
pub struct Llvm {
30
30
pub target: Interned<String>,
31
- pub emscripten: bool,
32
31
}
33
32
34
33
impl Step for Llvm {
@@ -40,46 +39,35 @@ impl Step for Llvm {
40
39
run.path("src/llvm-project")
41
40
.path("src/llvm-project/llvm")
42
41
.path("src/llvm")
43
- .path("src/llvm-emscripten")
44
42
}
45
43
46
44
fn make_run(run: RunConfig<'_>) {
47
- let emscripten = run.path.ends_with("llvm-emscripten");
48
45
run.builder.ensure(Llvm {
49
46
target: run.target,
50
- emscripten,
51
47
});
52
48
}
53
49
54
50
/// Compile LLVM for `target`.
55
51
fn run(self, builder: &Builder<'_>) -> PathBuf {
56
52
let target = self.target;
57
- let emscripten = self.emscripten;
58
53
59
54
// If we're using a custom LLVM bail out here, but we can only use a
60
55
// custom LLVM for the build triple.
61
- if !self.emscripten {
62
- if let Some(config) = builder.config.target_config.get(&target) {
63
- if let Some(ref s) = config.llvm_config {
64
- check_llvm_version(builder, s);
65
- return s.to_path_buf()
66
- }
56
+ if let Some(config) = builder.config.target_config.get(&target) {
57
+ if let Some(ref s) = config.llvm_config {
58
+ check_llvm_version(builder, s);
59
+ return s.to_path_buf()
67
60
}
68
61
}
69
62
70
- let (llvm_info, root, out_dir, llvm_config_ret_dir) = if emscripten {
71
- let info = &builder.emscripten_llvm_info;
72
- let dir = builder.emscripten_llvm_out(target);
73
- let config_dir = dir.join("bin");
74
- (info, "src/llvm-emscripten", dir, config_dir)
75
- } else {
76
- let info = &builder.in_tree_llvm_info;
77
- let mut dir = builder.llvm_out(builder.config.build);
78
- if !builder.config.build.contains("msvc") || builder.config.ninja {
79
- dir.push("build");
80
- }
81
- (info, "src/llvm-project/llvm", builder.llvm_out(target), dir.join("bin"))
82
- };
63
+ let llvm_info = &builder.in_tree_llvm_info;
64
+ let root = "src/llvm-project/llvm";
65
+ let out_dir = builder.llvm_out(target);
66
+ let mut llvm_config_ret_dir = builder.llvm_out(builder.config.build);
67
+ if !builder.config.build.contains("msvc") || builder.config.ninja {
68
+ llvm_config_ret_dir.push("build");
69
+ }
70
+ llvm_config_ret_dir.push("bin");
83
71
84
72
let build_llvm_config = llvm_config_ret_dir
85
73
.join(exe("llvm-config", &*builder.config.build));
@@ -107,8 +95,7 @@ impl Step for Llvm {
107
95
}
108
96
}
109
97
110
- let descriptor = if emscripten { "Emscripten " } else { "" };
111
- builder.info(&format!("Building {}LLVM for {}", descriptor, target));
98
+ builder.info(&format!("Building LLVM for {}", target));
112
99
let _time = util::timeit(&builder);
113
100
t!(fs::create_dir_all(&out_dir));
114
101
@@ -123,23 +110,15 @@ impl Step for Llvm {
123
110
124
111
// NOTE: remember to also update `config.toml.example` when changing the
125
112
// defaults!
126
- let llvm_targets = if self.emscripten {
127
- "JSBackend"
128
- } else {
129
- match builder.config.llvm_targets {
130
- Some(ref s) => s,
131
- None => "AArch64;ARM;Hexagon;MSP430;Mips;NVPTX;PowerPC;RISCV;\
132
- Sparc;SystemZ;WebAssembly;X86",
133
- }
113
+ let llvm_targets = match &builder.config.llvm_targets {
114
+ Some(s) => s,
115
+ None => "AArch64;ARM;Hexagon;MSP430;Mips;NVPTX;PowerPC;RISCV;\
116
+ Sparc;SystemZ;WebAssembly;X86",
134
117
};
135
118
136
- let llvm_exp_targets = if self.emscripten {
137
- ""
138
- } else {
139
- match builder.config.llvm_experimental_targets {
140
- Some(ref s) => s,
141
- None => "",
142
- }
119
+ let llvm_exp_targets = match builder.config.llvm_experimental_targets {
120
+ Some(ref s) => s,
121
+ None => "",
143
122
};
144
123
145
124
let assertions = if builder.config.llvm_assertions {"ON"} else {"OFF"};
@@ -163,25 +142,23 @@ impl Step for Llvm {
163
142
.define("LLVM_TARGET_ARCH", target.split('-').next().unwrap())
164
143
.define("LLVM_DEFAULT_TARGET_TRIPLE", target);
165
144
166
- if builder.config.llvm_thin_lto && !emscripten {
145
+ if builder.config.llvm_thin_lto {
167
146
cfg.define("LLVM_ENABLE_LTO", "Thin");
168
147
if !target.contains("apple") {
169
148
cfg.define("LLVM_ENABLE_LLD", "ON");
170
149
}
171
150
}
172
151
173
- let want_lldb = builder.config.lldb_enabled && !self.emscripten;
174
-
175
152
// This setting makes the LLVM tools link to the dynamic LLVM library,
176
153
// which saves both memory during parallel links and overall disk space
177
154
// for the tools. We don't do this on every platform as it doesn't work
178
155
// equally well everywhere.
179
- if builder.llvm_link_tools_dynamically(target) && !emscripten {
156
+ if builder.llvm_link_tools_dynamically(target) {
180
157
cfg.define("LLVM_LINK_LLVM_DYLIB", "ON");
181
158
}
182
159
183
160
// For distribution we want the LLVM tools to be *statically* linked to libstdc++
184
- if builder.config.llvm_tools_enabled || want_lldb {
161
+ if builder.config.llvm_tools_enabled || builder.config.lldb_enabled {
185
162
if !target.contains("windows") {
186
163
if target.contains("apple") {
187
164
cfg.define("CMAKE_EXE_LINKER_FLAGS", "-static-libstdc++");
@@ -209,7 +186,7 @@ impl Step for Llvm {
209
186
enabled_llvm_projects.push("compiler-rt");
210
187
}
211
188
212
- if want_lldb {
189
+ if builder.config.lldb_enabled {
213
190
enabled_llvm_projects.push("clang");
214
191
enabled_llvm_projects.push("lldb");
215
192
// For the time being, disable code signing.
@@ -234,10 +211,9 @@ impl Step for Llvm {
234
211
}
235
212
236
213
// http://llvm.org/docs/HowToCrossCompileLLVM.html
237
- if target != builder.config.build && !emscripten {
214
+ if target != builder.config.build {
238
215
builder.ensure(Llvm {
239
216
target: builder.config.build,
240
- emscripten: false,
241
217
});
242
218
// FIXME: if the llvm root for the build triple is overridden then we
243
219
// should use llvm-tblgen from there, also should verify that it
@@ -481,7 +457,6 @@ impl Step for Lld {
481
457
482
458
let llvm_config = builder.ensure(Llvm {
483
459
target: self.target,
484
- emscripten: false,
485
460
});
486
461
487
462
let out_dir = builder.lld_out(target);
0 commit comments