171 lines
5.9 KiB
Bash
171 lines
5.9 KiB
Bash
# Maintainer: Fabien Chouteau <chouteau@adacore.com>
|
|
# Based on mingw-w64-arm-none-eabi-gcc
|
|
|
|
_realname=gcc
|
|
_target=riscv64-unknown-elf
|
|
|
|
_enable_ada=yes
|
|
if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
|
|
_enable_ada=no
|
|
fi
|
|
|
|
pkgbase=mingw-w64-${_target}-${_realname}
|
|
pkgname=("${MINGW_PACKAGE_PREFIX}-${_target}-${_realname}")
|
|
pkgver=12.2.0
|
|
pkgrel=2
|
|
pkgdesc='GNU Tools for RISC-V Embedded Processors - GCC (mingw-w64)'
|
|
arch=('any')
|
|
mingw_arch=('mingw64' 'ucrt64' 'clang64')
|
|
license=('GPL')
|
|
url='https://www.gnu.org/software/gcc/gcc.html'
|
|
groups=("${MINGW_PACKAGE_PREFIX}-${_target}-toolchain")
|
|
provides=($([[ "$_enable_ada" == "yes" ]] && echo "${MINGW_PACKAGE_PREFIX}-${_target}-gcc-ada"))
|
|
depends=(
|
|
"${MINGW_PACKAGE_PREFIX}-${_target}-binutils"
|
|
"${MINGW_PACKAGE_PREFIX}-${_target}-newlib"
|
|
"${MINGW_PACKAGE_PREFIX}-isl"
|
|
"${MINGW_PACKAGE_PREFIX}-libwinpthread-git"
|
|
"${MINGW_PACKAGE_PREFIX}-mpc"
|
|
"${MINGW_PACKAGE_PREFIX}-zlib"
|
|
"${MINGW_PACKAGE_PREFIX}-zstd"
|
|
)
|
|
makedepends=(
|
|
"${MINGW_PACKAGE_PREFIX}-gmp"
|
|
"${MINGW_PACKAGE_PREFIX}-mpfr"
|
|
"${MINGW_PACKAGE_PREFIX}-autotools"
|
|
"${MINGW_PACKAGE_PREFIX}-cc"
|
|
$([[ "$_enable_ada" == "yes" ]] && echo "${MINGW_PACKAGE_PREFIX}-gcc-ada")
|
|
)
|
|
options=('!emptydirs' '!strip')
|
|
source=("https://ftp.gnu.org/gnu/gcc/gcc-${pkgver}/gcc-${pkgver}.tar.xz")
|
|
sha256sums=('e549cf9cf3594a00e27b6589d4322d70e0720cdd213f39beb4181e06926230ff')
|
|
|
|
prepare() {
|
|
cd ${srcdir}/gcc-${pkgver}
|
|
|
|
mkdir gcc-build-${MSYSTEM}
|
|
mkdir gcc-build-nano-${MSYSTEM}
|
|
}
|
|
|
|
_build_gcc() {
|
|
local _languages=$1 # Comma separated list of languages support to build
|
|
|
|
if [[ ${MINGW_PACKAGE_PREFIX} == *-clang-* ]]; then
|
|
CFLAGS+=" -Wno-int-conversion -Wno-array-bounds -Wno-mismatched-tags"
|
|
CXXFLAGS+=" -Wno-int-conversion -Wno-array-bounds -Wno-mismatched-tags"
|
|
fi
|
|
|
|
local _GCC_LDFLAGS="${LDFLAGS} -Wl,--disable-dynamicbase"
|
|
if [ "${CARCH}" = 'x86_64' ]; then
|
|
_GCC_LDFLAGS+=",--image-base=0x400000"
|
|
fi
|
|
../configure \
|
|
--build=${MINGW_CHOST} \
|
|
--host=${MINGW_CHOST} \
|
|
--prefix=${MINGW_PREFIX} \
|
|
--target=${_target} \
|
|
--with-native-system-header-dir=${MINGW_PREFIX}/include \
|
|
--libexecdir=${MINGW_PREFIX}/lib \
|
|
--enable-languages=${_languages} \
|
|
--enable-plugins \
|
|
--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-libada \
|
|
--with-gnu-as \
|
|
--with-gnu-ld \
|
|
--with-system-zlib \
|
|
--with-newlib \
|
|
--with-headers=${MINGW_PREFIX}/${_target}/include \
|
|
--with-python-dir=share/gcc-${_target} \
|
|
--with-gmp \
|
|
--with-mpfr \
|
|
--with-mpc \
|
|
--with-isl \
|
|
--with-libelf \
|
|
--enable-gnu-indirect_function \
|
|
--enable-multilib \
|
|
--with-host-libstdcxx="-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm" \
|
|
--enable-linker-plugin-flags='LDFLAGS=-static-libstdc++\ -static-libgcc\ '"${LDFLAGS// /\\ }"'\ -Wl,--stack,12582912' \
|
|
LDFLAGS="${_GCC_LDFLAGS}"
|
|
|
|
make INHIBIT_LIBC_CFLAGS='-DUSE_TM_CLONE_REGISTRY=0'
|
|
|
|
if [[ "${_languages}" == *ada* ]]; then
|
|
make -C gcc cross-gnattools
|
|
make -C gcc ada.all.cross
|
|
fi
|
|
}
|
|
|
|
build() {
|
|
local _languages="c,c++"
|
|
if [ "$_enable_ada" == "yes" ]; then
|
|
_languages+=",ada"
|
|
fi
|
|
|
|
cd ${srcdir}/gcc-${pkgver}/gcc-build-${MSYSTEM}
|
|
|
|
export CFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections'
|
|
export CXXFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections'
|
|
_build_gcc ${_languages}
|
|
|
|
# Build libstdc++ without exceptions support (the 'nano' variant)
|
|
cd ${srcdir}/gcc-${pkgver}/gcc-build-nano-${MSYSTEM}
|
|
|
|
export CFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections -fno-exceptions'
|
|
export CXXFLAGS_FOR_TARGET='-g -Os -ffunction-sections -fdata-sections -fno-exceptions'
|
|
# Only C and C++ are required for the nano build
|
|
_build_gcc "c,c++"
|
|
}
|
|
|
|
package() {
|
|
cd ${srcdir}/gcc-${pkgver}/gcc-build-${MSYSTEM}
|
|
|
|
make DESTDIR="${pkgdir}" install
|
|
|
|
cd ${srcdir}/gcc-${pkgver}/gcc-build-nano-${MSYSTEM}
|
|
|
|
mkdir ${pkgdir}/nano-install-${MSYSTEM}
|
|
|
|
make DESTDIR="${pkgdir}/nano-install-${MSYSTEM}" install
|
|
|
|
cd ${pkgdir}${MINGW_PREFIX}
|
|
|
|
# we need only libstdc nano files
|
|
multilibs=`ls ${pkgdir}/nano-install-${MSYSTEM}${MINGW_PREFIX}/${_target}/lib/ | grep ^rv`
|
|
echo "copy libstdc++_nano.a for each of:" ${multilibs}
|
|
for multilib in ${multilibs[@]}; do
|
|
echo "Listing ABIs for:" ${multilib}
|
|
echo "in" ${pkgdir}/nano-install-${MSYSTEM}${MINGW_PREFIX}/${_target}/lib/${multilib}/
|
|
abis=`ls ${pkgdir}/nano-install-${MSYSTEM}${MINGW_PREFIX}/${_target}/lib/${multilib}/`
|
|
echo ${multilib} " ABI(s):" ${abis}
|
|
for abi in ${abis[@]}; do
|
|
dir=${multilib}/${abi}
|
|
from_dir=${pkgdir}/nano-install-${MSYSTEM}${MINGW_PREFIX}/${_target}/lib/"$dir"
|
|
to_dir=${_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
|
|
done
|
|
rm -r ${pkgdir}/nano-install-${MSYSTEM}
|
|
|
|
# strip target binaries
|
|
find lib/gcc/${_target}/${pkgver} ${_target}/lib -type f -and \( -name \*.a -or -name \*.o \) -exec ${_target}-objcopy -R .comment -R .note -R .debug_info -R .debug_aranges -R .debug_pubnames -R .debug_pubtypes -R .debug_abbrev -R .debug_line -R .debug_str -R .debug_ranges -R .debug_loc '{}' \;
|
|
|
|
# strip host binaries
|
|
find bin/ lib/gcc/${_target}/${pkgver} -type f -and \( -executable \) -exec strip '{}' \;
|
|
|
|
# Remove files that conflict with host gcc package
|
|
rm -r share/man/man7
|
|
rm -r share/info
|
|
}
|