# # GCC Common Support. # # This configuration file configure's, make's and install's gcc. It uses # newlib, MPFR, MPC, and GMP in a one-tree build configuration. # %include %{_configdir}/checks.cfg %ifn %{defined gcc_version_message} %error No GCC Version message defined. %endif # # The package description. # Name: %{_target}-gcc-%{gcc_version}-newlib-%{newlib_version}-%{_host}-%{release} Summary: GCC v%{gcc_version} and Newlib v%{newlib_version} for target %{_target} on host %{_host} Version: %{gcc_version} Release: %{release} URL: http://gcc.gnu.org/ # # Supports Candian Cross (Cxc). # %define allow_cxc # # The GCC library directory # %global _gcclibdir %{_prefix}/lib # # Default LTO to off. # %ifn %{defined with_lto} %define with_lto 0 %endif # # The GCC version depends on the type of build we are doing. # %if %{rsb_released} %define rtems_gcc_version %{rsb_version} %else %define rtems_gcc_version %{rtems_version} %endif # # Packages GCC requires # %if %{defined cloog_version} %source set cloog https://gcc.gnu.org/pub/gcc/infrastructure/cloog-%{cloog_version}.tar.gz %endif %if %{defined isl_version} %source set isl https://gcc.gnu.org/pub/gcc/infrastructure/isl-%{isl_version}.tar.bz2 %endif # # Prepare the source code. # %prep # save the build top directory and cd back to it rather than # using 'cd ..' because some shells change $PWD to a symlink's # target location and 'cd ..' fails. build_top=$(pwd) gcc_source=%{?gcc_external:%{gcc_expand_name}}%{!?gcc_external:"gcc-%{gcc_version}"} # gcc and optional the g++ core if separate packages source_dir_gcc=${gcc_source} %source setup gcc -q -n ${gcc_source} %patch setup gcc -p1 cd ${build_top} # newlib source_dir_newlib=%{?newlib_external:%{newlib_expand_name}}%{!?newlib_external:"newlib-%{newlib_version}"} %source setup newlib -q -D -n ${source_dir_newlib} %patch setup newlib -p1 cd ${build_top} # Link newlib into the gcc source tree %{__rmfile} ${source_dir_gcc}/newlib %{__ln_s} $PWD/${source_dir_newlib}/newlib ${source_dir_gcc}/newlib %if %{defined cloog_version} # CLooG source_dir_cloog="cloog-%{cloog_version}" %source setup cloog -q -D -n cloog-%{cloog_version} %patch setup cloog -p1 cd ${build_top} # Build MPFR one-tree style %{__rmfile} ${source_dir_gcc}/cloog %{__ln_s} $PWD/${source_dir_cloog} ${source_dir_gcc}/cloog %endif %if %{defined isl_version} # ISL source_dir_isl="isl-%{isl_version}" %source setup isl -q -D -n isl-%{isl_version} %patch setup isl -p1 cd ${build_top} # Build MPFR one-tree style %{__rmfile} ${source_dir_gcc}/isl %{__ln_s} $PWD/${source_dir_isl} ${source_dir_gcc}/isl %endif # MPFR source_dir_mpfr="mpfr-%{mpfr_version}" %source setup mpfr -q -D -n mpfr-%{mpfr_version} %patch setup mpfr -p1 cd ${build_top} # Build MPFR one-tree style %{__rmfile} ${source_dir_gcc}/mpfr %{__ln_s} $PWD/${source_dir_mpfr} ${source_dir_gcc}/mpfr # MPC source_dir_mpc="mpc-%{mpc_version}" %source setup mpc -q -D -n mpc-%{mpc_version} %patch setup mpc -p1 cd ${build_top} # Build MPC one-tree style %{__rmfile} ${source_dir_gcc}/mpc %{__ln_s} $PWD/${source_dir_mpc} ${source_dir_gcc}/mpc # GMP source_dir_gmp="gmp-%{gmp_version}" %source setup gmp -q -D -n gmp-%{gmp_version} %patch setup gmp -p1 cd ${build_top} # Build GMP one-tree style %{__rmfile} ${source_dir_gcc}/gmp %{__ln_s} $PWD/${source_dir_gmp} ${source_dir_gcc}/gmp echo "%{gcc_version_message}" > ${source_dir_gcc}/gcc/DEV-PHASE # Fix timestamps cd ${source_dir_gcc} contrib/gcc_update --touch cd ${build_top} %build build_top=$(pwd) %{build_directory} mkdir -p ${build_dir} cd ${build_dir} # Languages. languages="c" %if %{enable_cxx} languages="$languages,c++" %endif %if %{enable_ada} languages="$languages,ada" %endif %if %{enable_go} languages="$languages,go" %endif %if %{enable_fortran} languages="$languages,fortran" %endif %if %{enable_java} languages="$languages,java" %endif %if %{enable_objc} languages="$languages,objc" %endif %{host_build_flags} ../${source_dir_gcc}/configure \ --prefix=%{_prefix} \ --bindir=%{_bindir} \ --exec_prefix=%{_exec_prefix} \ --includedir=%{_includedir} \ --libdir=%{_gcclibdir} \ --libexecdir=%{_libexecdir} \ --mandir=%{_mandir} \ --infodir=%{_infodir} \ --datadir=%{_datadir} \ --build=%{_build} --host=%{_host} \ --target=%{_target} \ --disable-libstdcxx-pch \ --with-gnu-as --with-gnu-ld --verbose \ --with-newlib \ --disable-nls --without-included-gettext \ --disable-win32-registry \ --enable-version-specific-runtime-libs \ %{?with_lto:--enable-lto}%{!?with_lto:--disable-lto} \ --enable-newlib-io-c99-formats \ %{?disable_MAKEINFO:MAKEINFO=missing} \ %{?with_iconv:--enable-newlib-iconv} \ %{?with_iconv:--enable-newlib-iconv-encodings=%{_newlib_iconv_encodings}} \ %{?with_threads:--enable-threads}%{!?with_threads:--disable-threads} \ %{?with_plugin:--enable-plugin}%{!?with_plugin:--disable-plugin} \ %{?enable_obsolete:--enable-obsolete} \ %{?with_libgomp:--enable-libgomp} \ %{?gcc_configure_extra_options:%{gcc_configure_extra_options}} \ --enable-languages="$languages" if test "%_host" != "%_build" ; then # Bug in gcc-3.2.1: # Somehow, gcc doesn't get syslimits.h right for Cdn-Xs mkdir -p gcc/include cp ../${source_dir_gcc}/gcc/gsyslimits.h gcc/include/syslimits.h fi %{__make} %{?_smp_mflags} all cd ${build_top} %install build_top=$(pwd) %{__rmdir} $SB_BUILD_ROOT cd ${build_dir} %{__make} DESTDIR=$SB_BUILD_ROOT install cd ${build_top} # libiberty doesn't honor --libdir, but always installs to a # magically guessed _libdir %{__rmfile} ${SB_BUILD_ROOT}%{_libdir}/libiberty.a # We use the version from binutils %{__rmfile} $SB_BUILD_ROOT%{_bindir}/%{_target}-c++filt%{_exeext} # We don't ship info/dir %{__rmfile} $SB_BUILD_ROOT%{_infodir}/dir # Don't want libffi's man-pages %{__rmfile} $SB_BUILD_ROOT%{_mandir}/man3/*ffi* # Clean the symlinks away incase the source is a repo # Note, delete as a directory because of MSYS2 support on Windows. %{__rmdir} ${source_dir_gcc}/newlib %{__rmdir} ${source_dir_gcc}/mpfr %{__rmdir} ${source_dir_gcc}/mpc %{__rmdir} ${source_dir_gcc}/gmp %testing # Add testing here. export RUNTESTFLAGS=--target_board=%{_target}-run