a007b861 |
%global security_hardening nofortify
# It needs linux sources only to generate linux-api-headers for
# local glibc build. glibc bits get dropped and will not be packaged
%define linux_kernel_version 4.19.52
%define glibc_version 2.28
Name: gcc-aarch64-linux-gnu
Summary: Cross GCC for Aarch64
Version: 7.3.0
Release: 1%{?dist}
Group: Development/Tools
Vendor: VMware, Inc.
Distribution: Photon
License: GPLv2+
URL: http://gcc.gnu.org
Source0: https://ftp.gnu.org/gnu/gcc/gcc-%{version}/gcc-%{version}.tar.xz
%define sha1 gcc=9689b9cae7b2886fdaa08449a26701f095c04e48
Source1: https://www.kernel.org/pub/linux/kernel/v4.x/linux-%{linux_kernel_version}.tar.xz
%define sha1 linux=0fc8eeba8a8a710c95d71f140dfdc4bdff735248
Source2: https://ftp.gnu.org/gnu/glibc/glibc-%{glibc_version}.tar.xz
%define sha1 glibc=ccb5dc9e51a9884df8488f86982439d47b283b2a
Source3: https://ftp.gnu.org/gnu/mpfr/mpfr-4.0.1.tar.gz
%define sha1 mpfr=655e3cf416a0cc9530d9cb3c38dc8839504f0e98
Source4: https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.xz
%define sha1 gmp=9dc6981197a7d92f339192eea974f5eca48fcffe
Source5: https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz
%define sha1 mpc=b019d9e1d27ec5fb99497159d43a3164995de2d0
Patch0: libsanitizer-avoidustat.h-glibc-2.28.patch
Patch1: PLUGIN_TYPE_CAST.patch
BuildArch: x86_64
Provides: libgcc_s.so.1
Provides: libgcc_s.so.1(GCC_3.0)
Provides: libgcc_s.so.1(GCC_3.3)
Provides: libgcc_s.so.1(GCC_4.2.0)
Provides: libgcc_s.so.1(GLIBC_2.0)
BuildRequires: binutils-aarch64-linux-gnu
Requires: binutils-aarch64-linux-gnu
%global target_arch aarch64-unknown-linux-gnu
%global target_linux_arch arm64
%global sysroot /target-aarch64
%description
The GCC package contains the GNU compiler collection,
which includes the C and C++ compilers.
%prep
%setup -c -q
%setup -T -D -q -a 1
%setup -T -D -q -a 2
%setup -T -D -q -a 3
%setup -T -D -q -a 4
%setup -T -D -q -a 5
cd gcc-%{version}
%patch0 -p1
%patch1 -p1
ln -sf `ls -1d ../mpfr-*/` mpfr
ln -sf `ls -1d ../gmp-*/` gmp
ln -sf `ls -1d ../mpc-*/` mpc
# disable no-pie for gcc binaries
sed -i '/^NO_PIE_CFLAGS = /s/@NO_PIE_CFLAGS@//' gcc/Makefile.in
%build
# Create usrmove symlinks
mkdir -p %{sysroot}/usr/lib && ln -s usr/lib %{sysroot}/lib
mkdir -p %{sysroot}/usr/bin && ln -s usr/bin %{sysroot}/bin
mkdir -p %{sysroot}/usr/sbin && ln -s usr/sbin %{sysroot}/sbin
builddir=$RPM_BUILD_DIR/%{name}-%{version}
###
### Step 1
###
echo "Step 1. Building Linux headers"
cd $builddir/linux-%{linux_kernel_version} && \
make mrproper && \
make ARCH=%{target_linux_arch} headers_check && \
make ARCH=%{target_linux_arch} \
INSTALL_HDR_PATH=%{sysroot}%{_prefix} \
headers_install
###
### Step 2
###
echo "Step 2. Building GCC C compiler"
mkdir -p $builddir/build-gcc-%{target_arch} && \
cd $builddir/build-gcc-%{target_arch} && \
$builddir/gcc-%{version}/configure \
--prefix=%{_prefix} \
--target=%{target_arch} \
--with-sysroot=%{sysroot} \
--enable-plugins \
--enable-languages=c \
--enable-threads=posix \
--enable-linker-build-id \
--disable-multilib && \
make %{?_smp_mflags} all-gcc && \
make install-gcc
###
### Step 3
###
echo "Step 3. Building GLIBC headers and C runtime"
mkdir -p $builddir/build-glibc-%{target_arch} && \
cd $builddir/build-glibc-%{target_arch} && \
$builddir/glibc-%{glibc_version}/configure \
--prefix=%{_prefix} \
--libexecdir=/usr/lib/glibc \
--build=$MACHTYPE \
--host=%{target_arch} \
--target=%{target_arch} \
--with-headers=%{sysroot}/usr/include \
--disable-multilib \
libc_cv_forced_unwind=yes && \
make install-bootstrap-headers=yes install-headers install_root=%{sysroot} && \
make %{?_smp_mflags} csu/subdir_lib && \
mkdir -p %{sysroot}/usr/lib && \
install csu/crt1.o csu/crti.o csu/crtn.o \
%{sysroot}/usr/lib && \
%{target_arch}-gcc \
-nostdlib \
-nostartfiles \
-shared \
-x c /dev/null \
-o %{sysroot}/usr/lib/libc.so && \
mkdir -p %{sysroot}/usr/include/gnu && \
touch %{sysroot}/usr/include/gnu/stubs.h
###
### Step 4
###
echo "Stage 4. Building GCC compiler support library"
cd $builddir/build-gcc-%{target_arch} && \
$builddir/gcc-%{version}/configure \
--prefix=%{_prefix} \
--target=%{target_arch} \
--with-sysroot=%{sysroot} \
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
--enable-clocale=gnu \
--enable-languages=c,c++,fortran \
--disable-multilib \
--enable-linker-build-id \
--enable-plugin \
--with-system-zlib && \
make %{?_smp_mflags} all-target-libgcc && \
make install-target-libgcc
make %{?_smp_mflags} DESTDIR=%{buildroot} install-target-libgcc
###
### Step 5
###
echo "Step 5. Building full GLIBC"
cd $builddir/build-glibc-%{target_arch} && \
make %{?_smp_mflags} && \
make install install_root=%{sysroot}
###
### Step 6
###
echo "Step 6. Building full GCC"
cd $builddir/build-gcc-%{target_arch} && \
make %{?_smp_mflags} all && \
make %{?_smp_mflags} DESTDIR=%{buildroot} install
%install
CROSS_TOOLCHAIN_PKG_CONFIG=%{buildroot}%{_bindir}/%{target_arch}-pkg-config
cat > $CROSS_TOOLCHAIN_PKG_CONFIG << EOF
#! /bin/sh
SYSROOT=%{sysroot}
export PKG_CONFIG_DIR=
export PKG_CONFIG_LIBDIR=\${SYSROOT}/usr/lib/pkgconfig:\${SYSROOT}/usr/share/pkgconfig
export PKG_CONFIG_SYSROOT_DIR=\${SYSROOT}
exec pkg-config "\$@"
EOF
chmod +x $CROSS_TOOLCHAIN_PKG_CONFIG
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root)
%{_bindir}/*
%{_libdir}/*
%exclude %{_libdir}/debug
%{_lib64dir}/*
%{_libexecdir}/*
%{_datadir}/*
%exclude %{_datadir}/info/dir
%{_prefix}/%{target_arch}/*
%changelog
* Fri Nov 02 2018 Alexey Makhalov <amakhalov@vmware.com> 7.3.0-1
- Cloned from cross-aarch64-tools.spec
* Thu Nov 1 2018 Sriram Nambakam <snambakam@vmware.com> 1.0.0-3
- Updated versions of cross toolchain components
* Mon Oct 22 2018 Sriram Nambakam <snambakam@vmware.com> 1.0.0-2
- Replace _sysroot definition with sysroot
* Fri Oct 19 2018 Sriram Nambakam <snambakam@vmware.com> 1.0.0
- Initial build. First version |