# --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: package/*/gcc/gcc.conf # Copyright (C) 2004 - 2024 The T2 SDE Project # # This Copyright note is generated by scripts/Create-CopyPatch, # more information can be found in the files COPYING and README. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2. # --- T2-COPYRIGHT-NOTE-END --- var_append confopt ' ' '--with-pkgversion=T2\\ SDE' 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 extraconfopt ' ' '--with-mpfr=$toolsroot --with-mpfr-lib=$toolsroot/lib' var_append extraconfopt ' ' '--with-ppl=$toolsroot --with-cloog=$toolsroot --with-gmp=$toolsroot' var_append extraconfopt ' ' '--disable-libsanitizer' pkginstalled isl && var_append extraconfopt ' ' '--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 # pass multilib-list even when disabled, e.g. for superh if [ -n "$SDECFG_MULTILIBLIST" ]; then 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_MAX:-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 $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 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'