AutoTools 添加Loongarch 支持
为了简化可移植构建的难度,早期有一套AutoTools
的工具帮助程序员构建软件。c/c++
开源项目大多由Autotools
工具管理,源码编译常见三步曲。
./configure make make install
在Loongarch
下编译常见的问题如下:
./configure configure: error: cannot guess build type; you must specify one
在 ./configure
阶段,Autotools
会扫描宿主机系统(即当前正在运行的计算机)以进行各种测试并完成默认设置。
在测试过程中,有一项是系统架构测试,当在陌生的新架构中运行时,./configure
将报错并退出,导致无法完成软件编译。
其中最关键的2个架构相关文件为:config.guess
和 config.sub
。
GNU Autotools
套件中 config.guess
和config.sub
,被独立维护在为 config.git 仓库。
其他软件如gnulib、automake
将不定期从这里获取,并合入自己的代码树中,最终上游开发者通过GNU Autotools
打包后,这2个文件将进入tarballs中被发布。
Loongarch架构相关的补丁,于2020年12月22日被合并到 config.git 主分支。
最新的config.git 已合并了对Loongarch 架构的支持。而对早期的config.git 没有添加 Loongarch 架构支持的,需要自已手动添加。
方法一:编缉 config.guess
文件,在ia64:Linux:*:*)
下面添加Loongarch
架构的支持。
loongarch*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;;
方法二:从网上获取最新的config.guess 和 config.sub 文件然后进行替换
$ sudo wget -O /usr/share/misc/config.sub "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD"
$ sudo wget -O /usr/share/misc/config.guess "git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD"
在源码目录执行下面的命令会/usr/share/misc/config.sub 和 config.guess 替换掉工程目录下面的config.sub 和 config.guess 文件
$ libtoolize -f -i -c
c/c++ 代码编译选项、编译宏移植
功能 | x86编译选项 | 龙芯(MIPS)编译选项 | 龙芯(Loongarch)编译选项 |
---|---|---|---|
定义编译生成的程序为64 位程序 | -m64 | -mabi=64 | -mabi=lp64d |
定义指令集类型,由X86修改为MIPS或Loongarch | -march=skylake | -march=mips64r2 | -march=loongarch64 |
原有x86版编译宏替换为MIPS宏或Loongarch宏 | __X86_64__ | __mips64 | __loongarch64 |
指定为小端模式 | 仅有小端模式 | -EL | 仅有小端模式 |
查看编译器自定义编译宏 | echo |gcc -E -dM - |