@@ -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