mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-07-22 10:45:15 +03:00
189 lines
5.2 KiB
Text
189 lines
5.2 KiB
Text
# 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>
|
|
|
|
# mips-mti-elf fails to build newlib right now
|
|
_targets="
|
|
arm-none-eabi
|
|
msp430-elf
|
|
riscv-none-elf
|
|
aarch64-none-elf
|
|
"
|
|
# or1k-elf fails to build on 32-bit architectures
|
|
case "$CARCH" in
|
|
x86_64|aarch64|ppc64le|mips64) _targets="$_targets or1k-elf"
|
|
esac
|
|
pkgname=gcc-cross-embedded
|
|
pkgver=10.2.0
|
|
pkgrel=2
|
|
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 isl-dev"
|
|
arch="all !s390x !mips !mips64 !riscv64" # fails on s390x and mips with error message:
|
|
# 'internal compiler error: Segmentation fault'
|
|
license="GPL-3.0-or-later"
|
|
for target in $_targets; do
|
|
targetnorm="${target//-/_}"
|
|
subpackages="gcc-$target:$targetnorm $subpackages"
|
|
makedepends="$makedepends binutils-$target newlib-$target-stage1"
|
|
done
|
|
|
|
source="https://mirrors.kernel.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz"
|
|
|
|
options="!check"
|
|
|
|
builddir="$srcdir/gcc-$pkgver"
|
|
|
|
prepare() {
|
|
default_prepare
|
|
|
|
# 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() {
|
|
case "$target" in
|
|
# Support M and R architecture profiles for ARM
|
|
arm-none-eabi) _target_specific_flags="--with-multilib-list=rmprofile" ;;
|
|
*) _target_specific_flags="" ;;
|
|
esac
|
|
|
|
msg "Running ./configure for $target"
|
|
"$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,c++ \
|
|
--enable-plugins \
|
|
--enable-gnu-indirect-function \
|
|
--disable-decimal-float \
|
|
--disable-libffi \
|
|
--disable-libgomp \
|
|
--disable-libmudflap \
|
|
--disable-libquadmath \
|
|
--disable-libssp \
|
|
--disable-libstdcxx-pch \
|
|
--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' \
|
|
$_target_specific_flags
|
|
|
|
msg "Running make for $target"
|
|
make INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0'
|
|
}
|
|
|
|
build() {
|
|
for target in $_targets; do
|
|
# Build "regular" variant
|
|
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
|
|
|
|
# Rebuild without exceptions to generate nano variant of libstc++
|
|
workingdir="$srcdir/build-$target-nano"
|
|
mkdir "$workingdir"
|
|
cd "$workingdir"
|
|
export CFLAGS_FOR_TARGET='-pipe -Os -ffunction-sections -fdata-sections -fno-exceptions'
|
|
export CXXFLAGS_FOR_TARGET='-pipe -Os -ffunction-sections -fdata-sections -fno-exceptions'
|
|
_build_gcc
|
|
done
|
|
}
|
|
|
|
package() {
|
|
for target in $_targets; do
|
|
depends="$depends gcc-$target"
|
|
done
|
|
mkdir -p "$pkgdir"
|
|
}
|
|
|
|
_install_subpkg() {
|
|
target="${subpkgname#gcc-}"
|
|
pkgdesc="The GNU Compiler Collection for $target targets"
|
|
depends="$depends binutils-$target"
|
|
workingdir="$srcdir/build-$target"
|
|
cd "$workingdir"
|
|
make install DESTDIR="$subpkgdir" -j1
|
|
|
|
# install nano-variant into temporary folder to obtain libstdc++ from there
|
|
workingdir="$srcdir/build-$target-nano"
|
|
cd "$workingdir"
|
|
make install DESTDIR="$subpkgdir-nano" -j1
|
|
|
|
# Fetch libstdc++ from nano variant
|
|
multilibs=$($subpkgdir/usr/bin/$target-gcc -print-multi-lib 2>/dev/null)
|
|
for multilib in $multilibs; do
|
|
dir="${multilib%%;*}"
|
|
from_dir=$subpkgdir-nano/usr/$target/lib/$dir
|
|
to_dir=$subpkgdir/usr/$target/lib/$dir
|
|
cp -f $from_dir/libstdc++.a $to_dir/libstdc++_nano.a
|
|
cp -f $from_dir/libsupc++.a $to_dir/libsupc++_nano.a
|
|
done
|
|
|
|
# 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
|
|
}
|
|
|
|
or1k_elf() {
|
|
_install_subpkg
|
|
}
|
|
|
|
riscv_none_elf() {
|
|
_install_subpkg
|
|
}
|
|
|
|
aarch64_none_elf() {
|
|
_install_subpkg
|
|
}
|
|
|
|
sha512sums="42ae38928bd2e8183af445da34220964eb690b675b1892bbeb7cd5bb62be499011ec9a93397dba5e2fb681afadfc6f2767d03b9035b44ba9be807187ae6dc65e gcc-10.2.0.tar.xz"
|