背景

在高版本macos(>10.15)通过brew install gcc@4.7.x 已经无法成功,因为版本差距太大,许多开发环境已经不支持,有点挑战

环境

host: macos 11.5.2
host gcc:Apple clang version 13.0.0 (clang-1300.0.29.3)
target: i686-none-linux-gnu
target gcc source: gcc-4.7.2.tar.bz2

结果编译报错,发现 gcc-4.7.2 带有bug

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57625

所以换到相近的 gcc-4.7.3.tar.bz2 进行编译,由于 gcc 版本差距太大,所以使用 brew install gcc@7 作为跳板进行编译,编译成功!

envir.sh

#!/bin/bash

BASEDIR=$(dirname "$0")
cd ${BASEDIR}
BASEDIR=`pwd`

unset LANG
export HOST=x86_64
export BUILD=$HOST
export TARGET=i686-none-linux-gnu
export BUILD_ROOT_DIR=${BASEDIR}/../../
export BUILD_DIR=${BUILD_ROOT_DIR}/build/
export CROSS_TOOL=${BUILD_ROOT_DIR}/cross-tool
export CROSS_GCC_TMP=${BUILD_ROOT_DIR}/cross-gcc-tmp
export SYSROOT=${BUILD_ROOT_DIR}/sysroot
export VITA_DIR=${BASEDIR}/../
export SOURCE_DIR=${VITA_DIR}/source
PATH=$CROSS_TOOL/bin:$CROSS_GCC_TMP/bin:/sbin/:/usr/sbin:$PATH
unset PKG_CONFIG_PATH
export PKG_CONFIG_LIBDIR=$SYSROOT/usr/lib/pkgconfig:SYSROOT/usr/share/pkgconfig
CORES=4
SPEEDUP=" -j ${CORES}"

echogreen(){
    echo -e "\033[32m\033[1m$*\033[0m"
    return 0
}

echored(){
    echo -e "\033[31m\033[1m$*\033[0m"
    return 0
}

echoblue(){
    echo -e "\033[34m\033[1m$*\033[0m"
    return 0
}

echohello(){
    echo "hello!!!"
    return 0
}

testA() {
  echo "TEST A $1";
}

testB() {
  echo "TEST B $2";
}

"$@"

mk-freestandinggcc.sh


#!/bin/bash

set -e

source functions

function freestandinggcc(){

    cd ${BUILD_DIR}

    test -d  gcc-4.7.3 && /bin/rm -rf gcc-4.7.3
    tar -xf ${SOURCE_DIR}/gcc-4.7.3.tar.bz2

    cd gcc-4.7.3/

    tar -xf ${SOURCE_DIR}/gmp-5.0.5.tar.bz2
    test -d gmp &&  /bin/rm -rf gmp
    /bin/mv -f  gmp-5.0.5 gmp

    tar -xf ${SOURCE_DIR}/mpfr-3.1.1.tar.bz2  
    test -d mpfr && /bin/rm -rf mpfr
    /bin/mv -f  mpfr-3.1.1 mpfr

    tar -xf ${SOURCE_DIR}/mpc-1.0.1.tar.gz
    test -d mpc && /bin/rm -rf mpc
    /bin/mv -f  mpc-1.0.1 mpc

    test -d ${BUILD_DIR}/gcc-build && /bin/rm -rf ${BUILD_DIR}/gcc-build
    mkdir ${BUILD_DIR}/gcc-build  && cd ${BUILD_DIR}/gcc-build

    CC=/usr/local/Cellar/gcc@7/7.5.0_3/bin/gcc-7 ../gcc-4.7.3/configure  --disable-werror \
                --prefix=$CROSS_GCC_TMP \
                --target=$TARGET \
                --with-sysroot=$SYSROOT \
                --with-newlib \
                --enable-languages=c \
                --with-mpfr-include=${BUILD_DIR}/gcc-4.7.3/mpfr/src \
                --with-mpfr-lib=${BUILD_DIR}/gcc-build/mpfr/src/.libs \
                --disable-shared --disable-threads \
                --disable-decimal-float --disable-libquadmath \
                --disable-libmudflap --disable-libgomp \
                --disable-nls --disable-libssp 2>&1 | tee log.configure.gcc

    make ${SPEEDUP} 2>&1 | tee log.make.gcc

    make ${SPEEDUP} install 2>&1 | tee log.makeinstall.gcc

    cd $CROSS_GCC_TMP
    ln -sfv libgcc.a lib/gcc/i686-none-linux-gnu/4.7.3/libgcc_eh.a  

    echogreen "ls $CROSS_GCC_TMP"
    ls $CROSS_GCC_TMP/

    echogreen "### finish freestanding gcc build"
}

freestandinggcc


更多推荐