%define cross_arch arm %define cross_triplet arm-none-eabi %define cross_sysroot %{_prefix}/%{cross_triplet}/sys-root %global majorversion 10 %global versionyear 2020 %global versionquarter q4 %global versionsuffix major %global gccversion 10.2.1 %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-arm%{pkg_suffix} Version: %{majorversion}_%{versionyear}%{versionquarter} 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://developer.arm.com/open-source/gnu-toolchain/gnu-rm Source0: https://developer.arm.com/-/media/Files/downloads/gnu-rm/%{majorversion}-%{versionyear}%{versionquarter}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}-src.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-arm Requires: %{cross_triplet}-binutils-arm Provides: %{cross_triplet}-gcc-arm-first = %{version} %if "%{cross_stage}" == "final" BuildRequires: %{cross_triplet}-newlib-arm %if 0%{?fedora} >= 20 || 0%{?rhel} >= 7 BuildRequires: libstdc++-static %endif Requires: %{cross_triplet}-newlib-arm Provides: %{cross_triplet}-gcc-arm-first = %{version} %endif %description %prep %autosetup -n gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix} pushd src tar xjf gcc.tar.bz2 popd %build cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src 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 \ ../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-linker-hash-style=gnu \ --with-system-zlib \ --with-isl \ --disable-decimal-float \ --disable-libffi \ --disable-libgomp \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-shared \ --disable-threads \ --disable-tls \ --with-gnu-as \ --with-gnu-ld \ --with-newlib \ --with-python-dir=share/gcc-arm-none-eabi \ %if "%{cross_stage}" == "first" --enable-languages=c \ --without-headers \ %endif %if "%{cross_stage}" == "final" --enable-languages=c,c++ \ --enable-plugins \ --with-headers=yes \ %endif "--with-pkgversion=GNU Tools for ARM Embedded Processors" \ --with-multilib-list=rmprofile %if "%{cross_stage}" == "first" make %{?_smp_mflags} all-gcc %endif %if "%{cross_stage}" == "final" make %{?_smp_mflags} INHIBIT_LIBC_CFLAGS="-DUSE_TM_CLONE_REGISTRY=0" cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src 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 \ ../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-linker-hash-style=gnu \ --with-system-zlib \ --with-isl \ --disable-decimal-float \ --disable-libffi \ --disable-libgomp \ --disable-libmudflap \ --disable-libquadmath \ --disable-libssp \ --disable-libstdcxx-pch \ --disable-nls \ --disable-shared \ --disable-threads \ --disable-tls \ --with-gnu-as \ --with-gnu-ld \ --with-newlib \ --with-python-dir=share/gcc-arm-none-eabi \ %if "%{cross_stage}" == "first" --enable-languages=c \ --without-headers \ %endif %if "%{cross_stage}" == "final" --enable-languages=c,c++ \ --enable-plugins \ --with-headers=yes \ %endif "--with-pkgversion=GNU Tools for ARM Embedded Processors" \ --with-multilib-list=rmprofile make %{?_smp_mflags} CXXFLAGS_FOR_TARGET="-g -Os -ffunction-sections -fdata-sections -fno-exceptions" %endif %install cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src/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}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src/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.* %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}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/ar-no-strip %if 0%{?fedora} >= 33 cat > %{__ar_no_strip} << EOF #!/bin/sh args=""; hasfile=0; for arg in "\$@"; do if [[ \$arg != *arm-none-eabi* ]]; 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}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/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 src/gcc/COPYING src/gcc/COPYING.LIB src/gcc/COPYING.RUNTIME src/gcc/COPYING3 src/gcc/COPYING3.LIB %doc src/gcc/ChangeLog src/gcc/ChangeLog.jit src/gcc/ChangeLog.tree-ssa src/gcc/MAINTAINERS src/gcc/README %{_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/unwind-arm-common.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/mmintrin.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_neon.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_acle.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_cmse.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_fp16.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_bf16.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_cde.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_mve.h %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion}/include/arm_mve_types.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++ %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 %dir %{_prefix}/%{cross_triplet}/lib %dir %{_prefix}/%{cross_triplet}/lib/arm %dir %{_prefix}/%{cross_triplet}/lib/arm/v5te %dir %{_prefix}/%{cross_triplet}/lib/arm/v5te/hard %dir %{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb %dir %{_prefix}/%{cross_triplet}/lib/thumb/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v6-m %dir %{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7 %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-m %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-r+fp.sp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-r+fp.sp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-r+fp.sp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8.1-m.main+mve %dir %{_prefix}/%{cross_triplet}/lib/thumb/v8.1-m.main+mve/hard %{_prefix}/%{cross_triplet}/lib/lib* %{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/lib* %{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7-r+fp.sp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7-r+fp.sp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/lib* %{_prefix}/%{cross_triplet}/lib/thumb/v8.1-m.main+mve/hard/lib* %{_prefix}/lib/gcc/%{cross_triplet}/%{gccversion} %{_datadir}/gcc-%{cross_triplet}/libstdcxx %{_datadir}/doc/%{cross_triplet} %endif %changelog * Thu Apr 08 2021 Thomas Sailer - 10_2020q4-1 - update * Tue Aug 11 2020 Thomas Sailer - 9_2020q2-1 - update * Sat Sep 28 2019 Thomas Sailer - 8_2019q3-1 - update * Wed Feb 13 2019 Thomas Sailer - 8_2018q4-1 - update * Tue Nov 14 2017 Thomas Sailer - 6_2017q2-1 - Update * Sat Jan 28 2017 Thomas Sailer - 5_4_2016q3_20160926-0 - Initial spec file