Commit 9952bc7f authored by Marian Buschsieweke's avatar Marian Buschsieweke Committed by Leonardo Arena

testing/gcc-cross-embedded-stage1: New aport

Intermediate step in building a cross toolchain for bare metal targets.

This is working around cyclic dependencies between GCC and newlib. The
build order is this:

1. binutils-cross-embedded (final package)
2. gcc-cross-embedded-stage1 (intermediate step, needed for step 3)
3. newlib-stage1 (intermediate step, needed for step 4)
4. gcc-cross-embedded (final package)
5. newlib (final package)
parent ee2bade0
# Maintainer: Marian Buschsieweke <marian.buschsieweke@ovgu.de>
# Based upon Alpine's avr-gcc and Arch Linux's arm-none-eabi-gcc, to which
# the following people contributed:
# Contributor: Pedro Filipe <xpecex@outlook.com>
# Contributor: Stefan Wagner <stw@bit-strickerei.de>
# Contributor: Anatol Pomozov <anatol.pomozov@gmail.com>
# Contributor: Martin Schmölzer <mschmoelzer@gmail.com>
_pkgbase=gcc
_targets="
arm-none-eabi
mips-mti-elf
msp430-elf
"
pkgname="$_pkgbase-cross-embedded-stage1"
pkgver=8.3.0
pkgrel=0
pkgdesc="The GNU Compiler Collection for embedded targets"
url="http://gcc.gnu.org"
depends="gcc"
makedepends="bash linux-headers gmp-dev mpfr-dev mpc1-dev zlib-dev"
arch="all"
license="GPL-2.0 GPL-3.0-or-later LGPL-2.0"
for target in $_targets; do
targetnorm="${target//-/_}"
subpackages="${_pkgbase}-${target}-stage1:${targetnorm} ${subpackages}"
makedepends="$makedepends binutils-$target"
done
_islver=0.20
source="
https://mirrors.kernel.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz
http://isl.gforge.inria.fr/isl-${_islver}.tar.bz2
"
options="!check"
builddir="$srcdir/$_pkgbase-$pkgver"
prepare() {
cd "$builddir"
# link isl for in-tree build
ln -s "$srcdir"/isl-"$_islver" isl
# hack! - some configure tests for header files using "$CPP $CPPFLAGS"
for dir in libiberty gcc; do
sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" $dir/configure
done
}
_build_gcc() {
"$builddir"/configure \
--target=$target \
--prefix=/usr \
--with-sysroot=/usr/$target \
--with-native-system-header-dir=/include \
--with-headers=/usr/$target/include \
--with-python-dir=share/gcc-$target \
--libexecdir=/usr/lib \
--infodir=/deleteme/info \
--htmldir=/deleteme/html \
--pdfdir=/deleteme/pdf \
--mandir=/deleteme/man \
--enable-languages=c \
--enable-plugins \
--enable-gnu-indirect-function \
--disable-decimal-float \
--disable-libffi \
--disable-libgomp \
--disable-libmudflap \
--disable-libquadmath \
--disable-libssp \
--disable-libstdcxx-pch \
--disable-multilib \
--disable-nls \
--disable-shared \
--disable-threads \
--disable-tls \
--disable-werror \
--with-gmp \
--with-gnu-as \
--with-gnu-ld \
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' \
--with-isl \
--with-libelf \
--with-mpc \
--with-mpfr \
--with-newlib \
--with-system-zlib \
--with-pkgversion='Alpine Linux' \
--without-headers
make INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0' -j8
}
build() {
for target in $_targets; do
workingdir="${srcdir}/build-${target}"
mkdir "$workingdir"
cd "$workingdir"
export CFLAGS_FOR_TARGET='-pipe -Os -ffunction-sections -fdata-sections'
export CXXFLAGS_FOR_TARGET='-pipe -Os -ffunction-sections -fdata-sections'
_build_gcc
done
}
package() {
for target in $_targets; do
depends="$depends $_pkgbase-$target"
done
mkdir -p "${pkgdir}"
}
_install_subpkg() {
target="${subpkgname#${_pkgbase}-}"
target="${target%-stage1}"
pkgdesc="The GNU Compiler Collection for $target targets"
depends="$depends binutils-$target"
workingdir="${srcdir}/build-${target}"
cd "$workingdir"
make install DESTDIR="$subpkgdir" -j1
# Delete documentation. (The user can use the host GCC doc instead)
rm -rf "$subpkgdir"/deleteme
# Delete libcc1.so*, which is already part of the host's gcc
rm -f "$subpkgdir"/usr/lib/libcc1.so*
# Strip libs using target binutils
find "$subpkgdir"/usr/lib -type f -name "*.a" -exec /usr/bin/$target-strip --strip-debug '{}' \;
# Strip executables using host binutils
find "$subpkgdir"/usr/bin -type f -executable -exec strip '{}' \;
}
arm_none_eabi() {
_install_subpkg
}
mips_mti_elf() {
_install_subpkg
}
msp430_elf() {
_install_subpkg
}
sha512sums="1811337ae3add9680cec64968a2509d085b6dc5b6783fc1e8c295e3e47416196fd1a3ad8dfe7e10be2276b4f62c357659ce2902f239f60a8648548231b4b5802 gcc-8.3.0.tar.xz
afe2e159b74646a26449268637403d271f9e3f6410d8cc1c9cffca41370c4357b165dea844db0c2a654591f954e54710dda650c8088abd4711406aa6302da950 isl-0.20.tar.bz2"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment