mirror of
https://github.com/rxrbln/t2sde.git
synced 2025-05-08 20:21:59 +08:00
317 lines
11 KiB
Plaintext
317 lines
11 KiB
Plaintext
# --- T2-COPYRIGHT-BEGIN ---
|
|
# t2/package/*/gcc/gcc.conf
|
|
# Copyright (C) 2004 - 2025 The T2 SDE Project
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# --- T2-COPYRIGHT-END ---
|
|
|
|
# TODO: fix eval_config_command to properly evaluate the spaces!
|
|
[ $arch != avr32 ] && var_append confopt ' ' '--with-pkgversion=T2\\ SDE'
|
|
[ $arch = ia64 -o $arch = nios2 ] && var_append confopt ' ' '--enable-obsolete'
|
|
|
|
languages="c,c++"
|
|
|
|
if [ $stagelevel -le 1 ]; then
|
|
var_append confopt " " '--program-prefix=${arch_target}-'
|
|
toolsroot="${sysroot}/TOOLCHAIN/cross"
|
|
export LDFLAGS="-Wl,-rpath,${toolsroot}/lib"
|
|
|
|
var_append patchfiles " " "$confdir/gxx_include.diff"
|
|
|
|
if atstage toolchain; then
|
|
var_append confopt " " "--with-sysroot=$sysroot"
|
|
var_append confopt " " "--disable-shared"
|
|
var_append confopt " " "--disable-libatomic --disable-libstdc++-v3 --disable-libsanitizer"
|
|
var_append confopt " " "--disable-libssp --disable-libgomp --disable-cet"
|
|
var_append confopt " " "--disable-target-libiberty --disable-vtable-verify"
|
|
var_append confopt " " "--disable-libitm --disable-libcilkrts"
|
|
var_append confopt " " "--disable-libquadmath --disable-decimal-float"
|
|
elif [ $stagelevel = 1 ]; then
|
|
if [ "$SDECFG_LIBC" = "uclibc" ]; then
|
|
configscript="../libstdc++-v3/configure"
|
|
else
|
|
CC="cc" CXX="c++" CPP="cpp" OBJDUMP="objdump"
|
|
AS="as" STRIP="strip" OBJCOPY="objcopy"
|
|
LD="ld" AR="ar" RANLIB="ranlib" NM="nm"
|
|
|
|
var_remove_regex confopt ' ' '--prefix=.*'
|
|
var_remove_regex confopt ' ' '--bindir=.*'
|
|
var_remove_regex confopt ' ' '--libdir=.*'
|
|
var_remove_regex confopt ' ' '--includedir=.*'
|
|
var_insert confopt ' ' "--libexecdir=$toolsroot/$prefix/libexec"
|
|
var_insert confopt ' ' "--libdir=$toolsroot/$prefix/lib"
|
|
var_insert confopt ' ' "--bindir=$toolsroot/$prefix/bin"
|
|
var_insert confopt ' ' "--prefix=$toolsroot/$prefix"
|
|
|
|
var_remove_regex confopt ' ' '--datadir=.*'
|
|
var_remove_regex confopt ' ' '--infodir=.*'
|
|
var_remove_regex confopt ' ' '--mandir=.*'
|
|
var_remove_regex confopt ' ' '--sbindir=.*'
|
|
var_remove_regex confopt ' ' '--localstatedir=.*'
|
|
var_remove_regex confopt ' ' '--sysconfdir=.*'
|
|
|
|
var_remove_regex confopt ' ' '--host=.*'
|
|
var_append confopt ' ' "--host=\$arch_build"
|
|
|
|
var_remove_regex makeopt ' ' 'prefix=.*'
|
|
var_remove_regex makeinstopt ' ' 'prefix=.*'
|
|
var_remove_regex makeinstopt ' ' 'DESTDIR=.*'
|
|
var_remove_regex makeinstopt ' ' 'docdir=.*'
|
|
|
|
# override to install headers into the actual sysroot
|
|
var_append confopt ' ' "--with-gxx-include-dir=$root$includedir/c++/$ver"
|
|
var_append confopt ' ' "--with-toolexeclibdir=$root$libdir"
|
|
fi
|
|
fi
|
|
|
|
# we need to help configure pick up our native libraries in the toolchain dir
|
|
var_append confopt ' ' '--with-mpfr=$toolsroot --with-mpfr-lib=$toolsroot/lib'
|
|
var_append confopt ' ' '--with-ppl=$toolsroot --with-cloog=$toolsroot --with-gmp=$toolsroot'
|
|
var_append confopt ' ' '--disable-libsanitizer'
|
|
pkginstalled isl && var_append confopt ' ' '--with-isl=$toolsroot'
|
|
unset toolsroot
|
|
fi
|
|
|
|
if ! atstage toolchain; then
|
|
[ $stagelevel = 2 ] &&
|
|
confopt="${confopt/--with-sysroot/--with-libtool-sysroot}"
|
|
|
|
# shared, or not shared?
|
|
if [ "$diet_dynamic_static" == "static" ]; then
|
|
var_append confopt " " "--disable-shared"
|
|
else
|
|
var_append confopt " " "--enable-shared"
|
|
fi
|
|
|
|
var_append confopt " " "--with-gnu-as --with-gnu-ld --enable-threads=posix"
|
|
|
|
# Ada support is implemented in Ada, so GNAT has to be present
|
|
[ "$SDECFG_PKG_GCC_GNAT" = 1 ] && case "$arch" in
|
|
alpha|arc|microblaze|loongarch*|mips64|nios2|riscv)
|
|
: ;;
|
|
*)
|
|
var_append languages ',' "ada" ;;
|
|
esac
|
|
|
|
# unsupported / not broken, arch / languages:
|
|
case "$arch" in
|
|
loongarch)
|
|
: ;;
|
|
arc|riscv)
|
|
var_append languages ',' 'fortran' ;;
|
|
hppa*|loongarch64|mips64|microblaze|nios2|sparc*)
|
|
# sparc64 ICE in go
|
|
var_append languages ',' 'objc,fortran' ;;
|
|
*)
|
|
[ "$SDECFG_PKG_GCC_GO" = 1 ] && var_append languages ',' 'go'
|
|
var_append languages ',' "objc,fortran" ;;
|
|
esac
|
|
|
|
if [ "$SDECFG_LIBC" != "glibc" ]; then
|
|
var_remove languages ',' 'ada'
|
|
var_append confopt ' ' '--enable-clocale=generic'
|
|
fi
|
|
fi
|
|
|
|
# not relied on by T2, but for the actual system user to get the same
|
|
case "$arch" in
|
|
avr32|blackfin|cris|ia64) ;;
|
|
*)
|
|
for x in $GCC_WRAPPER_INSERT $GCC_WRAPPER_APPEND; do
|
|
case "$x" in
|
|
-march=*) var_append confopt " " "${x/-m/--with-}" ;;
|
|
-mcpu=*) var_append confopt " " "${x/-m/--with-}" ;;
|
|
-mtune=*) var_append confopt " " "${x/-m/--with-}" ;;
|
|
esac
|
|
done
|
|
esac
|
|
|
|
# at least the fortran parts get unresolved errors when we remove -Werror???
|
|
var_remove GCC_WRAPPER_REMOVE " " "-Werror"
|
|
# emmintrin.h: error: cast discards 'const' qualifier from pointer target type [-Werror=cast-qual]
|
|
var_append GCC_WRAPPER_REMOVE ' ' '*/libgo/*?-Werror:'
|
|
|
|
# create and set up cmd_wrapper for xgcc
|
|
setup_xgcc_wrapper() {
|
|
mkdir gcc; pushd gcc
|
|
|
|
cat <<-EOF > xgcc-wrapper
|
|
#!/bin/bash
|
|
# place the xgcc in the path
|
|
export PATH="$PWD:\$PATH"
|
|
[ "\$GCC_WRAPPER_DEBUG" = 1 ] && export CMD_WRAPPER_DEBUG=1
|
|
mycmd=\$1
|
|
if [ "\${mycmd%gcj}" != "\$mycmd" ]; then
|
|
export CMD_WRAPPER_OTHERS="\$GCJ_WRAPPER_OTHERS"
|
|
export CMD_WRAPPER_INSERT="\$GCJ_WRAPPER_INSERT"
|
|
export CMD_WRAPPER_REMOVE="\$GCJ_WRAPPER_REMOVE"
|
|
export CMD_WRAPPER_APPEND="\$GCJ_WRAPPER_APPEND"
|
|
export CMD_WRAPPER_FILTER="\$GCJ_WRAPPER_FILTER"
|
|
elif [ "\${mycmd%gfortran}" != "\$mycmd" ]; then
|
|
export CMD_WRAPPER_OTHERS="\$F95_WRAPPER_OTHERS"
|
|
export CMD_WRAPPER_INSERT="\$F95_WRAPPER_INSERT"
|
|
export CMD_WRAPPER_REMOVE="\$F95_WRAPPER_REMOVE"
|
|
export CMD_WRAPPER_APPEND="\$F95_WRAPPER_APPEND"
|
|
export CMD_WRAPPER_FILTER="\$F95_WRAPPER_FILTER"
|
|
elif [ "\${mycmd%g++}" != "\$mycmd" ]; then
|
|
export CMD_WRAPPER_OTHERS="\$CXX_WRAPPER_OTHERS:\$GCC_WRAPPER_OTHERS"
|
|
export CMD_WRAPPER_INSERT="\$CXX_WRAPPER_INSERT \$GCC_WRAPPER_INSERT"
|
|
export CMD_WRAPPER_REMOVE="\$CXX_WRAPPER_REMOVE \$GCC_WRAPPER_REMOVE"
|
|
export CMD_WRAPPER_APPEND="\$CXX_WRAPPER_APPEND \$GCC_WRAPPER_APPEND"
|
|
export CMD_WRAPPER_FILTER="\$CXX_WRAPPER_FILTER|\$GCC_WRAPPER_FILTER"
|
|
else
|
|
export CMD_WRAPPER_OTHERS="\$CC_WRAPPER_OTHERS:\$GCC_WRAPPER_OTHERS"
|
|
export CMD_WRAPPER_INSERT="\$CC_WRAPPER_INSERT \$GCC_WRAPPER_INSERT"
|
|
export CMD_WRAPPER_REMOVE="\$CC_WRAPPER_REMOVE \$GCC_WRAPPER_REMOVE"
|
|
export CMD_WRAPPER_APPEND="\$CC_WRAPPER_APPEND \$GCC_WRAPPER_APPEND"
|
|
export CMD_WRAPPER_FILTER="\$CC_WRAPPER_FILTER|\$GCC_WRAPPER_FILTER"
|
|
fi
|
|
exec cmd_wrapper "\$@"
|
|
EOF
|
|
|
|
chmod 0755 xgcc-wrapper
|
|
export STAGE_CC_WRAPPER=$PWD/xgcc-wrapper
|
|
|
|
popd
|
|
}
|
|
|
|
# historically we did not had to explicitly specifiy the target for "Canadian
|
|
# crossbuild", since gcc-4.3 we have to:
|
|
var_append confopt ' ' '--target=${arch_target}'
|
|
|
|
# See http://gcc.gnu.org/gcc-3.2/c++-abi.html
|
|
# and http://www.codesourcery.com/cxx-abi/.
|
|
var_append confopt ' ' "--enable-__cxa_atexit"
|
|
|
|
# we might build a SVN or prereleases, disable checking
|
|
var_append confopt ' ' '--disable-checking'
|
|
|
|
# we build a cross compiler in stage0 and later use known good GCCs, no bstrap
|
|
var_append confopt ' ' '--disable-bootstrap'
|
|
|
|
# not really useful and just blows up the binary package
|
|
var_append confopt ' ' '--disable-libstdcxx-pch'
|
|
|
|
# multilib is usually enabled by default, so do not fore re-enable it here, see GCC Bug 43328
|
|
if [ "$SDECFG_MULTILIB" != 1 ]; then
|
|
var_append confopt ' ' "--disable-multilib"
|
|
fi
|
|
|
|
if [ -n "$SDECFG_MULTILIBLIST" ]; then
|
|
# pass multilib-list even when disabled, e.g. for superh
|
|
var_append confopt ' ' "--with-multilib-list=$SDECFG_MULTILIBLIST"
|
|
fi
|
|
|
|
if [ "$SDECFG_LTO" == 1 ] && ! hasflag NO-LTO; then
|
|
var_append GCC_WRAPPER_INSERT " " "-DIN_GCC_FRONTEND?-flto=${SDECFG_PARALLEL:-auto}"
|
|
var_append GCC_WRAPPER_INSERT " " "-DIN_GCC_FRONTEND?-fwhole-program"
|
|
fi
|
|
|
|
# only left for uclibc libatomic
|
|
gcc_build_module() {
|
|
for x; do
|
|
mkdir x-$x; cd x-$x
|
|
configscript="../../$x/configure"
|
|
eval_config_command $(eval echo $confopt)
|
|
eval $MAKE $makeopt
|
|
eval $MAKE $makeinstopt
|
|
cd ..
|
|
configscript=../configure
|
|
done
|
|
}
|
|
|
|
if atstage cross; then
|
|
# canadian cross also needs to know the build root to find headers, e.g. for fixincludes
|
|
var_append confopt ' ' '--with-build-sysroot=$root'
|
|
|
|
# make sure we use gcc itself, not clang
|
|
[ "$SDECFG_DEFAULT_CC" != gcc -o "$SDECFG_DEFAULT_CXX" != gcc ] &&
|
|
export CC_FOR_TARGET=$arch_target-gcc \
|
|
GCC_FOR_TARGET=$arch_target-gcc \
|
|
CXX_FOR_TARGET=$arch_target-g++
|
|
|
|
if [ "$SDECFG_KERNEL" = mingw ]; then
|
|
configscript="../libstdc++-v3/configure"
|
|
fi
|
|
fi
|
|
|
|
gcc_premake() {
|
|
# create and set up the xgcc cmd_wrapper
|
|
setup_xgcc_wrapper
|
|
|
|
# install binutils bfd lto plugin
|
|
local gcc_ver=$(< ../gcc/BASE-VER)
|
|
mkdir -pv $root$libdir/bfd-plugins/
|
|
ln -sfv ../../libexec/gcc/$arch_target/$gcc_ver/liblto_plugin.so \
|
|
$root$libdir/bfd-plugins/
|
|
}
|
|
hook_add premake 5 "gcc_premake"
|
|
|
|
gcc_postmake() {
|
|
# force a tools rebuild
|
|
rm -fv $base/build/$SDECFG_ID/TOOLCHAIN/$toolsdir/.lastupdate
|
|
|
|
# create various symlinks for cc, c++, cpp and f77
|
|
if atstage toolchain; then
|
|
for x in $([ "$SDECFG_DEFAULT_CC" = gcc ] && echo cc
|
|
[ "$SDECFG_DEFAULT_CXX" = gcc ] && echo c++
|
|
[ "$SDECFG_DEFAULT_KCC" = gcc ] && echo kcc); do
|
|
[ $x != c++ ] &&
|
|
ln -svf ${arch_target}-gcc $root/$prefix/bin/${arch_target}-$x ||
|
|
ln -svf ${arch_target}-g++ $root/$prefix/bin/${arch_target}-$x
|
|
done
|
|
|
|
if [ "$SDECFG_DEFAULT_CXX" = clang ]; then
|
|
# compat symlink for clang++
|
|
ln -svf $sysroot/usr/include/c++/$ver/ \
|
|
$sysroot/TOOLCHAIN/cross/lib/gcc/$arch_target/$ver/include/c++
|
|
fi
|
|
|
|
return
|
|
fi
|
|
|
|
for x in $([ "$SDECFG_DEFAULT_CC" = gcc ] && echo cc
|
|
[ "$SDECFG_DEFAULT_CXX" = gcc ] && echo c++
|
|
[ "$SDECFG_DEFAULT_KCC" = gcc ] && echo kcc); do
|
|
[ $x != c++ ] && ln -sfv gcc $root$bindir/$x || ln -sfv g++ $root$bindir/$x
|
|
done
|
|
|
|
[ "$SDECFG_DEFAULT_CC" = gcc ] && ln -sfv ..$bindir/cpp $root/lib/cpp
|
|
if [ -f $root$bindir/gfortran ]; then
|
|
ln -sfv gfortran $root$bindir/f77
|
|
fi
|
|
}
|
|
hook_add postmake 5 "gcc_postmake"
|
|
|
|
if [ "$SDECFG_LIBC" != "glibc" ]; then
|
|
var_append confopt " " "--disable-libsanitizer"
|
|
var_remove languages ',' "go"
|
|
fi
|
|
[ "$arch" = "arm" -a "$SDECFG_SOFTFLOAT" != 1 ] && var_append confopt ' ' '--with-float=hard'
|
|
[ "$SDECFG_ARM_ENDIANESS" = 'eb' ] && var_remove languages ',' "go"
|
|
[ "$arch" = "mips64" ] && var_append confopt ' ' '--disable-libsanitizer'
|
|
|
|
[ "$SDECFG_POWERPC64_ELF_ABI" = elfv2 ] && var_append confopt ' ' '--with-abi=elfv2'
|
|
|
|
[ $arch_sizeof_char_p -gt 4 ] && var_append patchfiles " " "$confdir/tune-inline.diff"
|
|
|
|
# 32-bit default 64-bit biarch configuration
|
|
if [ "$SDECFG_POWERPC64_32" = 1 -o "$SDECFG_SPARC64_32BIT" = 1 ]; then
|
|
[ $arch = "powerpc64" ] && var_append confopt " " "--with-cpu=default32"
|
|
var_append patchfiles " " "$confdir/m32-default.diff"
|
|
|
|
var_remove languages ',' "fortran" # why?
|
|
var_remove languages ',' "go"
|
|
var_remove languages ',' "ada"
|
|
|
|
gcc_default_m32() {
|
|
echo "Running $makeopt all-host"
|
|
eval $MAKE $makeopt all-host
|
|
var_append GCC_WRAPPER_INSERT " " "-m32?:-m64"
|
|
}
|
|
|
|
# simulate -m64 default thru our wrapper for the target multilibs
|
|
hook_add premake 7 "gcc_default_m32"
|
|
fi
|
|
|
|
var_insert confopt ' ' '--enable-languages=$languages'
|