aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarian Buschsieweke <marian.buschsieweke@ovgu.de>2019-03-10 10:01:21 +0100
committerLeonardo Arena <rnalrd@alpinelinux.org>2019-03-13 07:15:18 +0000
commit9952bc7f91909a6de30e1210938764b58f420105 (patch)
tree258b795f27dfdaa14ae80a111118264060ee155e
parentee2bade0fc11adb1c7b69f4a6dfacd477d558d5f (diff)
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)
-rw-r--r--testing/gcc-cross-embedded-stage1/APKBUILD145
1 files changed, 145 insertions, 0 deletions
diff --git a/testing/gcc-cross-embedded-stage1/APKBUILD b/testing/gcc-cross-embedded-stage1/APKBUILD
new file mode 100644
index 00000000000..22b38c8c2e1
--- /dev/null
+++ b/testing/gcc-cross-embedded-stage1/APKBUILD
@@ -0,0 +1,145 @@
+# 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"