高版本macos(>10.15)交叉编译低版本gcc(4.7.x)例子
·
背景
在高版本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
更多推荐



所有评论(0)