1. 背景
工作的服务器环境比较老,ARM官网下载的编译好的工具链无法直接运行(详见编译GLIBC),故计划尝试源码编译安装。
2. 源码下载
ARM官网有源码下载的地址,我下载的是gcc-arm-none-eabi-10.3-2021.10-src.tar.bz2 。
3. 编译
工具链的编译依赖了一些其他的库,好在官网下载的源码包都包含了,不需要额外下载。gcc-arm-none-eabi-10.3-2021.10-src 目录下有一份How-to-build-toolchain.pdf ,其中介绍了编译的流程,即如下3个步骤。此处我不需要编译mingw 的程序以及我工作的Linux环境中Python 不满足依赖要求,故跳过这两项内容。
./install-source.sh --skip_steps=howto,md5_checksum,mingw32 > install-source.txt 2>&1
./build-prerequisites.sh --skip_steps=howto,md5_checksum,mingw > build-prerequisites.sh 2>&1
./build-toolchain.sh --skip_steps=gdb-with-python,manual,howto,md5_checksum,mingw,mingw-gdb-with-python,package_sources --build_type=native --with-multilib-list=rmprofile,aprofile > build-toochain.txt 2>&1
rm -rf /home/xflm/apps/gcc-arm-none-eabi-10.3
mv install-native /home/xflm/apps/gcc-arm-none-eabi-10.3 -r
/home/xflm/apps/gcc-arm-none-eabi-10.3/bin/arm-none-eabi-gcc -v
4. 插曲
4.1 g++ 版本太低
第一次编译了6个小时,提示编译失败,我的g++ 不支持c++11 。
4.2 python环境不满足
更换了更高版的工具链,重新执行./build-toolchain.sh ,编译6小时后,提示编译报错,我的python 版本不支持,故增加了--skip_steps=gdb-with-python 的选项。
4.3 重新编译也很慢
查看./build-toolchain.sh 发现它在编译每一部分前会删除编译目录,其实配置参数变化不大时,不删除也没关系的,我考虑修改这个文件,如下。在上步失败后,修改./build-toolchain.sh ,重新执行编译,花了4小时,完成编译。
cp build-toolchain.sh build-toolchain.sh.bak
sed 's|rm -rf \$BUILD.*&& ||g' -i build-toolchain.sh
4.4 编译成功后重新编译
想测一下这个构建体系有没有追加编译的功能,我只删除了安装目录install-native ,执行编译命令,花了4个小时,还是很漫长啊。
./build-toolchain.sh --skip_steps=gdb-with-python,manual,howto,md5_checksum,mingw,mingw-gdb-with-python,package_sources --build_type=native --with-multilib-list=rmprofile,aprofile > build-toochain.txt 2>&1
4.5 文件大小
好奇的查看了一下各个目录的文件大小。
$ du -bs install-native
656367401
$ du -bs build-native
20239011796
$ du -bs src
1568901066
5. 参考
arm-none-eabi-gcc 源码编译 toolchain 构建过程
|