diff options
Diffstat (limited to 'cross-powerpc-softfloat-linux-gnu/glibc/files/eblits/common.eblit')
-rw-r--r-- | cross-powerpc-softfloat-linux-gnu/glibc/files/eblits/common.eblit | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/cross-powerpc-softfloat-linux-gnu/glibc/files/eblits/common.eblit b/cross-powerpc-softfloat-linux-gnu/glibc/files/eblits/common.eblit new file mode 100644 index 0000000..1dce06c --- /dev/null +++ b/cross-powerpc-softfloat-linux-gnu/glibc/files/eblits/common.eblit @@ -0,0 +1,287 @@ +# Copyright 1999-2007 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/sys-libs/glibc/files/eblits/common.eblit,v 1.11 2010/06/16 01:43:37 zorry Exp $ + +# We need to be able to set alternative headers for +# compiling for non-native platform +# Will also become useful for testing kernel-headers without screwing up +# the whole system. +# note: intentionally undocumented. +alt_headers() { + if [[ -z ${ALT_HEADERS} ]] ; then + if is_crosscompile ; then + ALT_HEADERS="/usr/${CTARGET}/usr/include" + else + ALT_HEADERS="/usr/include" + fi + fi + echo "${ALT_HEADERS}" +} +alt_build_headers() { + if [[ -z ${ALT_BUILD_HEADERS} ]] ; then + ALT_BUILD_HEADERS=${EPREFIX}/$(alt_headers) + if tc-is-cross-compiler ; then + ALT_BUILD_HEADERS=${ROOT}/$(alt_headers) + if [[ ! -e ${ALT_BUILD_HEADERS}/linux/version.h ]] ; then + local header_path=$(echo '#include <linux/version.h>' | $(tc-getCPP ${CTARGET}) ${CFLAGS} 2>&1 | grep -o '[^"]*linux/version.h') + ALT_BUILD_HEADERS=${header_path%/linux/version.h} + fi + fi + fi + echo "${ALT_BUILD_HEADERS}" +} + +alt_usrlibdir() { + if is_crosscompile ; then + echo /usr/${CTARGET}/usr/$(get_libdir) + else + echo /usr/$(get_libdir) + fi +} + +setup_flags() { + # Make sure host make.conf doesn't pollute us + if is_crosscompile || tc-is-cross-compiler ; then + CHOST=${CTARGET} strip-unsupported-flags + fi + + # Store our CFLAGS because it's changed depending on which CTARGET + # we are building when pulling glibc on a multilib profile + CFLAGS_BASE=${CFLAGS_BASE-${CFLAGS}} + CFLAGS=${CFLAGS_BASE} + CXXFLAGS_BASE=${CXXFLAGS_BASE-${CXXFLAGS}} + CXXFLAGS=${CXXFLAGS_BASE} + ASFLAGS_BASE=${ASFLAGS_BASE-${ASFLAGS}} + ASFLAGS=${ASFLAGS_BASE} + + # Over-zealous CFLAGS can often cause problems. What may work for one + # person may not work for another. To avoid a large influx of bugs + # relating to failed builds, we strip most CFLAGS out to ensure as few + # problems as possible. + strip-flags + strip-unsupported-flags + filter-flags -m32 -m64 -mabi=* + + unset CBUILD_OPT CTARGET_OPT + if has_multilib_profile ; then + CTARGET_OPT=$(get_abi_CTARGET) + [[ -z ${CTARGET_OPT} ]] && CTARGET_OPT=$(get_abi_CHOST) + fi + + case $(tc-arch) in + x86) + # -march needed for #185404 + local t=${CTARGET_OPT:-${CTARGET}} + t=${t%%-*} + if ! echo "" | $(tc-getCC) ${CFLAGS} -E -dD - | grep -qs __${t}__ ; then + filter-flags '-march=*' + export CFLAGS="-march=${t} ${CFLAGS}" + fi + ;; + amd64) + # Punt this when amd64's 2004.3 is removed + CFLAGS_x86="-m32" + + # -march needed for #185404 + local t=${CTARGET_OPT:-${CTARGET}} + t=${t%%-*} + if ! echo "" | $(tc-getCC) ${CFLAGS} ${CFLAGS_x86} -m32 -E -dD - | grep -qs __${t}__ ; then + filter-flags '-march=*' + export CFLAGS_x86="${CFLAGS_x86} -march=${t}" + fi + ;; + ppc) + append-flags "-freorder-blocks" + ;; + sparc) + # Both sparc and sparc64 can use -fcall-used-g6. -g7 is bad, though. + filter-flags "-fcall-used-g7" + append-flags "-fcall-used-g6" + filter-flags "-mvis" + + GLIBCMAJOR=$(get_version_component_range 1 ${PV}) + GLIBCMINOR=$(get_version_component_range 2 ${PV}) + + # set CTARGET_OPT so glibc can use cpu-specific .S files for better performance + # - UltraSPARC T1 (niagara) support requires >= glibc 2.8 + # - UltraSPARC T2 (niagara2) support requires >= glibc 2.7 + + if is_crosscompile || [[ ${PROFILE_ARCH} == "sparc64" ]] || { has_multilib_profile && ! tc-is-cross-compiler; } ; then + case ${ABI} in + sparc64) + filter-flags -Wa,-xarch -Wa,-A + + if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then + CTARGET_OPT="sparc64v2-unknown-linux-gnu" + append-flags "-Wa,-xarch=v9b" + export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b" + elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then + CTARGET_OPT="sparc64v-unknown-linux-gnu" + append-flags "-Wa,-xarch=v9b" + export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b" + elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then + CTARGET_OPT="sparc64b-unknown-linux-gnu" + append-flags "-Wa,-xarch=v9b" + export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9b" + else + CTARGET_OPT="sparc64-unknown-linux-gnu" + append-flags "-Wa,-xarch=v9a" + export ASFLAGS="${ASFLAGS} -Wa,-xarch=v9a" + fi + ;; + *) + if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then + CTARGET_OPT="sparcv9v2-unknown-linux-gnu" + elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then + CTARGET_OPT="sparcv9v-unknown-linux-gnu" + elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then + CTARGET_OPT="sparcv9b-unknown-linux-gnu" + else + CTARGET_OPT="sparcv9-unknown-linux-gnu" + fi + ;; + esac + else + if is-flagq "-mcpu=niagara2" && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.7 ]] ; then + CTARGET_OPT="sparcv9v2-unknown-linux-gnu" + elif { is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2" ; } && [[ ${GLIBCMAJOR}.${GLIBCMINOR} > 2.6 ]] ; then + CTARGET_OPT="sparcv9v-unknown-linux-gnu" + elif is-flagq "-mcpu=ultrasparc3" || is-flagq "-mcpu=niagara" || is-flagq "-mcpu=niagara2"; then + CTARGET_OPT="sparcv9b-unknown-linux-gnu" + elif { is_crosscompile && want_nptl; } || is-flagq "-mcpu=ultrasparc2" || is-flagq "-mcpu=ultrasparc"; then + CTARGET_OPT="sparcv9-unknown-linux-gnu" + fi + fi + ;; + esac + + if [[ -n ${CTARGET_OPT} && ${CBUILD} == ${CHOST} ]] && ! is_crosscompile; then + CBUILD_OPT=${CTARGET_OPT} + fi + + # Lock glibc at -O2 -- linuxthreads needs it and we want to be + # conservative here. -fno-strict-aliasing is to work around #155906 + filter-flags -O? + append-flags -O2 -fno-strict-aliasing + + # Cant build glibc itself with fortify code + append-cppflags -U_FORTIFY_SOURCE + + # building glibc with SSP is fraught with difficulty, especially + # due to __stack_chk_fail_local which would mean significant changes + # to the glibc build process. See bug #94325 #293721 + use hardened && gcc-specs-ssp && append-cflags $(test-flags-CC -fno-stack-protector) + + if use hardened && gcc-specs-pie ; then + # Force PIC macro definition for all compilations since they're all + # either -fPIC or -fPIE with the default-PIE compiler. + append-cppflags -DPIC + else + # Don't build -fPIE without the default-PIE compiler and the + # hardened-pie patch + filter-flags -fPIE + fi +} + +want_nptl() { + [[ -z ${LT_VER} ]] && return 0 + want_tls || return 1 + use nptl || return 1 + + # Only list the arches that cannot do NPTL + case $(tc-arch) in + m68k) return 1;; + sparc) + # >= v9 is needed for nptl. + [[ ${PROFILE_ARCH} == "sparc" ]] && return 1 + ;; + esac + + return 0 +} + +want_linuxthreads() { + [[ -z ${LT_VER} ]] && return 1 + ! use nptlonly && return 0 + want_nptl || return 0 + return 1 +} + +want_tls() { + # Archs that can use TLS (Thread Local Storage) + case $(tc-arch) in + sparc) + # 2.3.6 should have tls support on sparc64 + # when using newer binutils + case ${CTARGET/-*} in + sparc64*) return 1 ;; + *) return 0 ;; + esac + ;; + x86) + # requires i486 or better #106556 + [[ ${CTARGET} == i[4567]86* ]] && return 0 + return 1 + ;; + esac + + return 0 +} + +want__thread() { + want_tls || return 1 + + # For some reason --with-tls --with__thread is causing segfaults on sparc32. + [[ ${PROFILE_ARCH} == "sparc" ]] && return 1 + + [[ -n ${WANT__THREAD} ]] && return ${WANT__THREAD} + + # only test gcc -- cant test linking yet + tc-has-tls -c ${CTARGET} + WANT__THREAD=$? + + return ${WANT__THREAD} +} + +use_multilib() { + case ${CTARGET} in + sparc*|mips64*|x86_64*|powerpc64*|s390x*) + has_multilib_profile || use multilib ;; + *) false ;; + esac +} + +# Setup toolchain variables that would be defined in the profiles for these archs. +setup_env() { + # silly users + unset LD_RUN_PATH + + if is_crosscompile || tc-is-cross-compiler ; then + multilib_env ${CTARGET} + if ! use multilib ; then + MULTILIB_ABIS=${DEFAULT_ABI} + else + MULTILIB_ABIS=${MULTILIB_ABIS:-${DEFAULT_ABI}} + fi + + # If the user has CFLAGS_<CTARGET> in their make.conf, use that, + # and fall back on CFLAGS. + local VAR=CFLAGS_${CTARGET//[-.]/_} + CFLAGS=${!VAR-${CFLAGS}} + fi + + setup_flags + + export ABI=${ABI:-${DEFAULT_ABI:-default}} + + if is_crosscompile || tc-is-cross-compiler ; then + local VAR=CFLAGS_${ABI} + # We need to export CFLAGS with abi information in them because + # glibc's configure script checks CFLAGS for some targets (like mips) + export CFLAGS="${!VAR} ${CFLAGS}" + fi +} + +just_headers() { + is_crosscompile && use crosscompile_opts_headers-only +} |