@@ -63,18 +63,23 @@ impl Step for Gcc {
63
63
}
64
64
65
65
build_gcc(&metadata, builder, target);
66
-
67
- let lib_alias = metadata.install_dir.join("lib/libgccjit.so.0");
68
- if !lib_alias.exists() {
69
- t!(builder.symlink_file(&libgccjit_path, lib_alias));
70
- }
66
+ create_lib_alias(builder, &libgccjit_path);
71
67
72
68
t!(metadata.stamp.write());
73
69
74
70
GccOutput { libgccjit: libgccjit_path }
75
71
}
76
72
}
77
73
74
+ /// Creates a libgccjit.so.0 alias next to libgccjit.so if it does not
75
+ /// already exist
76
+ fn create_lib_alias(builder: &Builder<'_>, libgccjit: &PathBuf) {
77
+ let lib_alias = libgccjit.parent().unwrap().join("libgccjit.so.0");
78
+ if !lib_alias.exists() {
79
+ t!(builder.symlink_file(libgccjit, lib_alias));
80
+ }
81
+ }
82
+
78
83
pub struct Meta {
79
84
stamp: BuildStamp,
80
85
out_dir: PathBuf,
@@ -109,8 +114,10 @@ fn try_download_gcc(builder: &Builder<'_>, target: TargetSelection) -> Option<Pa
109
114
builder.config.download_ci_gcc(&sha, &root);
110
115
t!(gcc_stamp.write());
111
116
}
112
- // FIXME: put libgccjit.so into a lib directory in dist::Gcc
113
- Some(root.join("libgccjit.so"))
117
+
118
+ let libgccjit = root.join("lib").join("libgccjit.so");
119
+ create_lib_alias(builder, &libgccjit);
120
+ Some(libgccjit)
114
121
}
115
122
116
123
#[cfg(test)]
@@ -177,6 +184,14 @@ fn libgccjit_built_path(install_dir: &Path) -> PathBuf {
177
184
}
178
185
179
186
fn build_gcc(metadata: &Meta, builder: &Builder<'_>, target: TargetSelection) {
187
+ if builder.build.cc_tool(target).is_like_clang()
188
+ || builder.build.cxx_tool(target).is_like_clang()
189
+ {
190
+ panic!(
191
+ "Attempting to build GCC using Clang, which is known to misbehave. Please use GCC as the host C/C++ compiler. "
192
+ );
193
+ }
194
+
180
195
let Meta { stamp: _, out_dir, install_dir, root } = metadata;
181
196
182
197
t!(fs::create_dir_all(out_dir));
@@ -203,18 +218,13 @@ fn build_gcc(metadata: &Meta, builder: &Builder<'_>, target: TargetSelection) {
203
218
let mut configure_cmd = command(src_dir.join("configure"));
204
219
configure_cmd
205
220
.current_dir(out_dir)
206
- // On CI, we compile GCC with Clang.
207
- // The -Wno-everything flag is needed to make GCC compile with Clang 19.
208
- // `-g -O2` are the default flags that are otherwise used by Make.
209
- // FIXME(kobzol): change the flags once we have [gcc] configuration in config.toml.
210
- .env("CXXFLAGS", "-Wno-everything -g -O2")
211
- .env("CFLAGS", "-Wno-everything -g -O2")
212
221
.arg("--enable-host-shared")
213
- .arg("--enable-languages=jit")
222
+ .arg("--enable-languages=c, jit,lto ")
214
223
.arg("--enable-checking=release")
215
224
.arg("--disable-bootstrap")
216
225
.arg("--disable-multilib")
217
226
.arg(format!("--prefix={}", install_dir.display()));
227
+
218
228
let cc = builder.build.cc(target).display().to_string();
219
229
let cc = builder
220
230
.build
0 commit comments