%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 debug_package %{nil}

Name:       %{cross_triplet}-newlib-arm
Version:    %{majorversion}_%{versionyear}%{versionquarter}
Release:    1%{?dist}
Summary:    The newlib C Library (%{cross_triplet})

Group:      Development/Libraries
License:    LGPLv2+ and LGPLv2+ with exceptions and GPLv2+
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: %{cross_triplet}-gcc-arm-first
BuildRequires: gcc


%description


%prep
%autosetup -n gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}
pushd src
tar xjf newlib.tar.bz2
popd


%build
export CFLAGS_FOR_TARGET='-g -O2 -ffunction-sections -fdata-sections'
cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src
mkdir -p newlib-build
cd newlib-build
../newlib/configure \
    --prefix=%{_prefix} \
    --mandir=%{_mandir} \
    --infodir=%{_infodir} \
    --host=%{_target_platform} \
    --build=%{_target_platform} \
    --target=%{cross_triplet} \
    --enable-newlib-io-long-long \
    --enable-newlib-register-fini \
    --disable-newlib-supplied-syscalls \
    --disable-nls

make %{?_smp_mflags}

export CFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections'
cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src
mkdir -p newlib-nano-build
cd newlib-nano-build
../newlib/configure \
    --prefix=%{_prefix} \
    --mandir=%{_mandir} \
    --infodir=%{_infodir} \
    --host=%{_target_platform} \
    --build=%{_target_platform} \
    --target=%{cross_triplet} \
    --disable-newlib-supplied-syscalls    \
    --enable-newlib-reent-small           \
    --disable-newlib-fvwrite-in-streamio  \
    --disable-newlib-fseek-optimization   \
    --disable-newlib-wide-orient          \
    --enable-newlib-nano-malloc           \
    --disable-newlib-unbuf-stream-opt     \
    --enable-lite-exit                    \
    --enable-newlib-global-atexit         \
    --enable-newlib-nano-formatted-io     \
    --disable-nls

make %{?_smp_mflags}


%install
cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src/newlib-build
make DESTDIR=%{buildroot} install
cd %{_builddir}/gcc-arm-none-eabi-%{majorversion}-%{versionyear}-%{versionquarter}-%{versionsuffix}/src/newlib-nano-build
make DESTDIR=%{buildroot}/nano install

pushd %{buildroot}/nano
for t in `find . -name '*.a'`; do tt=`echo $t|sed -e s,.a$,_nano.a,`; mv $t ../$tt; done
popd
install -d %{buildroot}/usr/arm-none-eabi/include/newlib-nano
mv %{buildroot}/nano/usr/arm-none-eabi/include/newlib.h %{buildroot}/usr/arm-none-eabi/include/newlib-nano/
rm -rf %{buildroot}/nano

# Don't any static archive - 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}


# epel cannot seem to handle globs like this: dir/*.{o,a,ld,specs}
# this script converts to individual dir/*.ext lines
# #!/usr/bin/perl
# use warnings;
# use strict;
# while (<>) {
#     s|^(.*)/\*\.\{o,a,ld,specs\}\s*$|$1/*.o\n$1/*.a\n$1/*.ld\n$1/*.specs\n|;
#     print "$_";
# }

%files
%license src/newlib/COPYING src/newlib/COPYING.LIB src/newlib/COPYING.LIBGLOSS
%license src/newlib/COPYING3 src/newlib/COPYING3.LIB src/newlib/COPYING.NEWLIB
%doc src/newlib/ChangeLog src/newlib/MAINTAINERS src/newlib/README

%dir %{_prefix}/%{cross_triplet}
%dir %{_prefix}/%{cross_triplet}/include
%dir %{_prefix}/%{cross_triplet}/include/bits
%dir %{_prefix}/%{cross_triplet}/include/machine
%dir %{_prefix}/%{cross_triplet}/include/newlib-nano
%dir %{_prefix}/%{cross_triplet}/include/rpc
%dir %{_prefix}/%{cross_triplet}/include/ssp
%dir %{_prefix}/%{cross_triplet}/include/sys
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp
%dir %{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb
%dir %{_prefix}/%{cross_triplet}/lib/thumb/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/nofp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v6-m
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/cpu-init
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/cpu-init
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/cpu-init
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-m
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/cpu-init
%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.base/nofp/cpu-init
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/cpu-init
%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/hard/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/cpu-init
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp
%dir %{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/cpu-init
%{_prefix}/%{cross_triplet}/include/*.h
#{_prefix}/%{cross_triplet}/include/bits/*.h
%{_prefix}/%{cross_triplet}/include/machine/*.h
%{_prefix}/%{cross_triplet}/include/newlib-nano/*.h
#{_prefix}/%{cross_triplet}/include/rpc/*.h
%{_prefix}/%{cross_triplet}/include/ssp/*.h
%{_prefix}/%{cross_triplet}/include/sys/*.h
%{_prefix}/%{cross_triplet}/lib/*.o
%{_prefix}/%{cross_triplet}/lib/*.a
%{_prefix}/%{cross_triplet}/lib/*.ld
%{_prefix}/%{cross_triplet}/lib/*.specs
%{_prefix}/%{cross_triplet}/lib/arm
%{_prefix}/%{cross_triplet}/lib/arm/v5te
%{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/*.o
%{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/*.a
%{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/arm/v5te/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/arm/v5te/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb
%{_prefix}/%{cross_triplet}/lib/thumb/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v6-m/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+dp/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m+fp/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7e-m/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7+fp/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7-m/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v7/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.base/nofp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+dp/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/hard/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main+fp/softfp/cpu-init/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/*.o
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/*.a
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/*.ld
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/*.specs
%{_prefix}/%{cross_triplet}/lib/thumb/v8-m.main/nofp/cpu-init/*.o


%changelog
* Tue Aug 11 2020 Thomas Sailer <t.sailer@alumni.ethz.ch> - 9_2020q2-1
- update

* Sat Sep 28 2019 Thomas Sailer <t.sailer@alumni.ethz.ch> - 8_2019q3-1
- update

* Wed Feb 13 2019 Thomas Sailer <t.sailer@alumni.ethz.ch> - 8_2018q4-1
- update

* Tue Nov 14 2017 Thomas Sailer <t.sailer@alumni.ethz.ch> - 6_2017q2-1
- Update

* Sat Jan 28 2017 Thomas Sailer <t.sailer@alumni.ethz.ch> - 5_4_2016q3_20160926-1
- Initial spec file