@@ -63,18 +63,23 @@ impl Step for Gcc {
6363 }
6464
6565 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) ;
7167
7268 t ! ( metadata. stamp. write( ) ) ;
7369
7470 GccOutput { libgccjit : libgccjit_path }
7571 }
7672}
7773
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+
7883pub struct Meta {
7984 stamp : BuildStamp ,
8085 out_dir : PathBuf ,
@@ -109,8 +114,10 @@ fn try_download_gcc(builder: &Builder<'_>, target: TargetSelection) -> Option<Pa
109114 builder. config . download_ci_gcc ( & sha, & root) ;
110115 t ! ( gcc_stamp. write( ) ) ;
111116 }
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)
114121}
115122
116123#[ cfg( test) ]
@@ -177,6 +184,14 @@ fn libgccjit_built_path(install_dir: &Path) -> PathBuf {
177184}
178185
179186fn 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+
180195 let Meta { stamp : _, out_dir, install_dir, root } = metadata;
181196
182197 t ! ( fs:: create_dir_all( out_dir) ) ;
@@ -203,18 +218,13 @@ fn build_gcc(metadata: &Meta, builder: &Builder<'_>, target: TargetSelection) {
203218 let mut configure_cmd = command ( src_dir. join ( "configure" ) ) ;
204219 configure_cmd
205220 . 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" )
212221 . arg ( "--enable-host-shared" )
213- . arg ( "--enable-languages=jit" )
222+ . arg ( "--enable-languages=c, jit,lto " )
214223 . arg ( "--enable-checking=release" )
215224 . arg ( "--disable-bootstrap" )
216225 . arg ( "--disable-multilib" )
217226 . arg ( format ! ( "--prefix={}" , install_dir. display( ) ) ) ;
227+
218228 let cc = builder. build . cc ( target) . display ( ) . to_string ( ) ;
219229 let cc = builder
220230 . build
0 commit comments