%define cross_arch riscv64 %define cross_triplet riscv64-none-elf %define cross_sysroot %{_prefix}/%{cross_triplet}/sys-root %global versionyear 2021 %global versionmonth 06 %global versionday 21 %global gccversion 10.2.0 %if 0%{!?cross_stage:1} %define cross_stage final #define cross_stage first %endif %if "%{cross_stage}" != "final" %define pkg_suffix -%{cross_stage} %else %define pkg_suffix %{nil} %endif Name: %{cross_triplet}-gcc%{pkg_suffix} Version: %{versionyear}%{versionmonth}%{versionday} Release: 1%{?dist} Summary: The GNU Compiler Collection (%{cross_triplet}) Group: Development/Languages License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD URL: https://github.com/riscv/riscv-gnu-toolchain Source0: riscv-gnu-toolchain-%{versionyear}.%{versionmonth}.%{versionday}.tar.bz2 BuildRequires: texinfo, texinfo-tex, gettext, flex, bison, gcc, gcc-c++, zlib-devel, isl-devel BuildRequires: gmp-devel, mpfr-devel, libmpc-devel, elfutils-libelf-devel BuildRequires: %{cross_triplet}-binutils %if 0%{?fedora} >= 29 || 0%{?rhel} >= 8 BuildRequires: python-unversioned-command %endif Requires: %{cross_triplet}-binutils Provides: %{cross_triplet}-gcc-first = %{version} %if "%{cross_stage}" == "final" BuildRequires: %{cross_triplet}-newlib %if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 BuildRequires: libstdc++-static %endif Requires: %{cross_triplet}-newlib Provides: %{cross_triplet}-gcc-first = %{version} %endif %description %prep %autosetup -n riscv-gnu-toolchain %build cd %{_builddir}/riscv-gnu-toolchain mkdir -p gcc-build cd gcc-build AR_FOR_TARGET=%{_bindir}/%{cross_triplet}-ar \ AS_FOR_TARGET=%{_bindir}/%{cross_triplet}-as \ DLLTOOL_FOR_TARGET=%{_bindir}/%{cross_triplet}-dlltool \ LD_FOR_TARGET=%{_bindir}/%{cross_triplet}-ld \ NM_FOR_TARGET=%{_bindir}/%{cross_triplet}-nm \ OBJDUMP_FOR_TARGET=%{_bindir}/%{cross_triplet}-objdump \ RANLIB_FOR_TARGET=%{_bindir}/%{cross_triplet}-ranlib \ STRIP_FOR_TARGET=%{_bindir}/%{cross_triplet}-strip \ WINDRES_FOR_TARGET=%{_bindir}/%{cross_triplet}-windres \ WINDMC_FOR_TARGET=%{_bindir}/%{cross_triplet}-windmc \ ../riscv-gcc/configure \ --prefix=%{_prefix} \ --mandir=%{_mandir} \ --infodir=%{_infodir} \ --host=%{_target_platform} \ --build=%{_target_platform} \ --target=%{cross_triplet} \ --with-local-prefix=%{cross_sysroot} \ --with-sysroot=%{cross_sysroot} \ --with-system-zlib \ --with-isl \ --disable-decimal-float \ --disable-libffi \ --disable-libgomp \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-threads \ --enable-shared \ --enable-tls \ --with-gnu-as \ --with-gnu-ld \ --with-newlib \ %if "%{cross_stage}" == "first" --enable-languages=c \ --without-headers \ %endif %if "%{cross_stage}" == "final" --enable-languages=c,c++,fortran \ --enable-plugins \ --with-headers=yes \ %endif --with-python-dir=share/gcc-riscv64-none-elf \ --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32iac-ilp32--;rv32im-ilp32--;rv32imc-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv64imac-lp64--;rv64imafdc-lp64d--" \ CFLAGS_FOR_TARGET="-O2 $(CFLAGS_FOR_TARGET)" \ CXXFLAGS_FOR_TARGET="-O2 $(CXXFLAGS_FOR_TARGET)" %if "%{cross_stage}" == "first" make %{?_smp_mflags} all-gcc %endif %if "%{cross_stage}" == "final" make %{?_smp_mflags} cd %{_builddir}/riscv-gnu-toolchain mkdir -p gcc-nano-build cd gcc-nano-build AR_FOR_TARGET=%{_bindir}/%{cross_triplet}-ar \ AS_FOR_TARGET=%{_bindir}/%{cross_triplet}-as \ DLLTOOL_FOR_TARGET=%{_bindir}/%{cross_triplet}-dlltool \ LD_FOR_TARGET=%{_bindir}/%{cross_triplet}-ld \ NM_FOR_TARGET=%{_bindir}/%{cross_triplet}-nm \ OBJDUMP_FOR_TARGET=%{_bindir}/%{cross_triplet}-objdump \ RANLIB_FOR_TARGET=%{_bindir}/%{cross_triplet}-ranlib \ STRIP_FOR_TARGET=%{_bindir}/%{cross_triplet}-strip \ WINDRES_FOR_TARGET=%{_bindir}/%{cross_triplet}-windres \ WINDMC_FOR_TARGET=%{_bindir}/%{cross_triplet}-windmc \ ../riscv-gcc/configure \ --prefix=%{_prefix} \ --mandir=%{_mandir} \ --infodir=%{_infodir} \ --host=%{_target_platform} \ --build=%{_target_platform} \ --target=%{cross_triplet} \ --with-local-prefix=%{cross_sysroot} \ --with-sysroot=%{cross_sysroot} \ --with-system-zlib \ --with-isl \ --disable-decimal-float \ --disable-libffi \ --disable-libgomp \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-threads \ --disable-shared \ --disable-tls \ --with-gnu-as \ --with-gnu-ld \ --with-newlib \ %if "%{cross_stage}" == "first" --enable-languages=c \ --without-headers \ %endif %if "%{cross_stage}" == "final" --enable-languages=c,c++,fortran \ --enable-plugins \ --with-headers=yes \ %endif --with-python-dir=share/gcc-riscv64-none-elf \ --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32iac-ilp32--;rv32im-ilp32--;rv32imc-ilp32--;rv32imac-ilp32--;rv32imafc-ilp32f--;rv64imac-lp64--;rv64imafdc-lp64d--" \ CFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections $(CFLAGS_FOR_TARGET)" \ CXXFLAGS_FOR_TARGET="-Os -ffunction-sections -fdata-sections $(CXXFLAGS_FOR_TARGET)" make %{?_smp_mflags} %endif %install cd %{_builddir}/riscv-gnu-toolchain/gcc-build %if "%{cross_stage}" == "first" make DESTDIR=%{buildroot} install-gcc %endif %if "%{cross_stage}" == "final" make DESTDIR=%{buildroot} install make DESTDIR=%{buildroot} install-html #make DESTDIR=%{buildroot} install-pdf cd %{_builddir}/riscv-gnu-toolchain/gcc-nano-build make DESTDIR=%{buildroot}/nano install cd %{buildroot}/nano for t in `find . -name '*.a'`; do tt=`echo $t|sed -e s,.a$,_nano.a,`; mv $t ../$tt; done cd .. rm -rf nano %endif find %{buildroot} -name '*.la' -delete rm -rf %{buildroot}%{_mandir} rm -rf %{buildroot}%{_infodir} rm -rf %{buildroot}%{_datadir}/gcc-%{gccversion}/python rm -f %{buildroot}%{_bindir}/%{cross_triplet}-gcc-%{gccversion} rm -f %{buildroot}%{_libdir}/libcc1.so* install -d %{buildroot}%{_datadir}/doc/%{cross_triplet} %if "%{cross_stage}" == "final" mv %{buildroot}%{_datadir}/doc/{cpp,cppinternals,gcc,gccint} %{buildroot}%{_datadir}/doc/%{cross_triplet} rm -rf %{buildroot}%{_datadir}/doc/gccinstall rm -rf %{buildroot}%{_datadir}/doc/libiberty.* rm -rf %{buildroot}%{_datadir}/doc/gfortran %endif %if "%{cross_stage}" == "first" rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/include/limits.h rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/include/README rmdir %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/include rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/fixinc_list rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/gsyslimits.h rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/macro_list rm -f %{buildroot}%{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/install-tools/mkheaders.conf %endif rm -f %{buildroot}%{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/install-tools/fixinc.sh rm -f %{buildroot}%{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/install-tools/fixincl rm -f %{buildroot}%{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/install-tools/mkheaders rm -f %{buildroot}%{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/install-tools/mkinstalldirs rmdir %{buildroot}%{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/install-tools # Don't strip libgcc.a and libgcov.a - based on Fedora Project cross-gcc.spec %define __ar_no_strip %{_builddir}/riscv-gnu-toolchain/ar-no-strip %if 0%{?fedora} >= 33 cat > %{__ar_no_strip} << EOF #!/bin/sh args=""; hasfile=0; for arg in "\$@"; do if [[ \$arg != *riscv64-none-elf* ]]; then args="\$args \$arg" if [[ \$arg == *.o ]]; then hasfile=1 fi fi done echo "\$args" if [ \$hasfile -ne 0 ]; then /usr/bin/strip \$args fi EOF %else cat > %{__ar_no_strip} << EOF #!/bin/sh f=\$2 case \$(basename \$f) in *.a) ;; *) %{__strip} \$@ ;; esac EOF %endif chmod +x %{__ar_no_strip} %undefine __strip %define __strip %{__ar_no_strip} # Disable automatic requirements finding in %{cross_sysroot} %define _use_internal_dependency_generator 0 %define __rpmdeps_command %{__find_requires} %define __rpmdeps_skip_sysroot %{_builddir}/riscv-gnu-toolchain/rpmdeps-skip-sysroot cat > %{__rpmdeps_skip_sysroot} << EOF #!/bin/sh while read oneline; do case \$oneline in %{buildroot}%{cross_sysroot}*) ;; *) echo \$oneline | %{__rpmdeps_command} esac done EOF chmod +x %{__rpmdeps_skip_sysroot} %undefine __find_requires %define __find_requires %{__rpmdeps_skip_sysroot} %files %license riscv-gcc/gcc/COPYING riscv-gcc/gcc/COPYING.LIB riscv-gcc/gcc/COPYING3 riscv-gcc/gcc/COPYING3.LIB %doc riscv-gcc/gcc/ChangeLog riscv-gcc/gcc/ChangeLog.jit riscv-gcc/gcc/ChangeLog.tree-ssa %{_bindir}/%{cross_triplet}-cpp %{_bindir}/%{cross_triplet}-gcc %{_bindir}/%{cross_triplet}-gcc-ar %{_bindir}/%{cross_triplet}-gcc-nm %{_bindir}/%{cross_triplet}-gcc-ranlib %{_bindir}/%{cross_triplet}-gcov %{_bindir}/%{cross_triplet}-gcov-tool %{_bindir}/%{cross_triplet}-gcov-dump %{_bindir}/%{cross_triplet}-lto-dump %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include-fixed/README %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include-fixed/limits.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include-fixed/syslimits.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stddef.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdarg.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdfix.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/varargs.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/float.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdbool.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/iso646.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdint.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdint-gcc.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdalign.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdnoreturn.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/stdatomic.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/tgmath.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/plugin %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/cc1 %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/collect2 %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/lto1 %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/lto-wrapper %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/liblto_plugin.so* %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/plugin/gengtype %if "%{cross_stage}" == "final" %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/unwind.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/crtbegin*.o %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/crtend*.o %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/libgcc.a %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/libgcov.a %{_bindir}/%{cross_triplet}-c++ %{_bindir}/%{cross_triplet}-g++ %{_bindir}/%{cross_triplet}-gfortran %dir %{_prefix}/%{cross_triplet} %dir %{_prefix}/%{cross_triplet}/include %dir %{_prefix}/%{cross_triplet}/include/c++ %{_prefix}/%{cross_triplet}/include/c++/%{gccversion} %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/cc1plus %{_libexecdir}/gcc/%{cross_triplet}/%{gccversion}/f951 %dir %{_prefix}/%{cross_triplet}/lib %dir %{_prefix}/%{cross_triplet}/lib/rv32i %dir %{_prefix}/%{cross_triplet}/lib/rv32i/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32ic %dir %{_prefix}/%{cross_triplet}/lib/rv32ic/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32iac %dir %{_prefix}/%{cross_triplet}/lib/rv32iac/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32im %dir %{_prefix}/%{cross_triplet}/lib/rv32im/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32imc %dir %{_prefix}/%{cross_triplet}/lib/rv32imc/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32imac %dir %{_prefix}/%{cross_triplet}/lib/rv32imac/ilp32 %dir %{_prefix}/%{cross_triplet}/lib/rv32imafc %dir %{_prefix}/%{cross_triplet}/lib/rv32imafc/ilp32f %dir %{_prefix}/%{cross_triplet}/lib/rv64imac %dir %{_prefix}/%{cross_triplet}/lib/rv64imac/lp64 %dir %{_prefix}/%{cross_triplet}/lib/rv64imafdc %dir %{_prefix}/%{cross_triplet}/lib/rv64imafdc/lp64d %{_prefix}/%{cross_triplet}/lib/rv32i/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32ic/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32iac/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32im/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32imc/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32imac/ilp32/lib* %{_prefix}/%{cross_triplet}/lib/rv32imafc/ilp32f/lib* %{_prefix}/%{cross_triplet}/lib/rv64imac/lp64/lib* %{_prefix}/%{cross_triplet}/lib/rv64imafdc/lp64d/lib* %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion} %{_datadir}/gcc-%{cross_triplet}/libstdcxx %{_datadir}/doc/%{cross_triplet} %endif %changelog * Mon Jun 21 2021 Thomas Sailer - 20210621-1 - SIMD, scheduling * Mon May 31 2021 Thomas Sailer - 20210531-1 - recognize k and suboptions * Fri May 28 2021 Thomas Sailer - 20210528-1 - contemporary names for B instructions, add even/odd register classes * Thu May 13 2021 Thomas Sailer - 20210513-1 - update, add B * Thu Apr 08 2021 Thomas Sailer - 20210408-1 - update