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
不满足依赖要求,故跳过这两项内容。
# 解压文件,大约16min
./install-source.sh --skip_steps=howto,md5_checksum,mingw32 > install-source.txt 2>&1
# 编译依赖库,大约2分钟
./build-prerequisites.sh --skip_steps=howto,md5_checksum,mingw > build-prerequisites.sh 2>&1
# 编译工具链,大约10小时
./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 # 安装目录大约656M
$ du -bs build-native
20239011796 # 编译目录大约20G
$ du -bs src
1568901066 # 源码大约1.56G