Loongarch 软件移植

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.guessconfig.sub

GNU Autotools 套件中 config.guessconfig.sub,被独立维护在为 config.git 仓库。

其他软件如gnulib、automake将不定期从这里获取,并合入自己的代码树中,最终上游开发者通过GNU Autotools打包后,这2个文件将进入tarballs中被发布。

Loongarch架构相关的补丁,于2020年12月22日被合并到 config.git 主分支。

https://git.savannah.gnu.org/gitweb/?p=config.git;a=commitdiff;h=c8ddc8472f8efcadafc1ef53ca1d863415fddd5f

最新的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 -

参考链接:

文章 - LoongArch 开放社区

软件移植是指将一个已经在一种平台上运行正常的软件移植到另一种不同的平台上运行。configure是一个常用的软件配置工具,用于根据不同平台的需求生成特定的编译指令和配置文件。 在进行configure软件移植时,首先需要了解目标平台的硬件环境和操作系统的特点。这包括硬件架构、处理器类型、操作系统版本等信息。然后,根据目标平台的要求,需要调整软件的编译选项和相关配置参数。 在进行软件移植之前,需要对configure脚本进行修改。配置脚本是一个用于检查平台特性并生成相关配置的脚本文件。根据目标平台的要求,需要修改configure脚本中的条件判断、路径设定和编译选项等内容,以适配目标平台的特点。 在配置脚本中,可以使用一些预定义的变量,如CFLAGS、LDFLAGS等,来指定编译和链接的选项。根据目标平台的需求,可能需要修改这些变量的取值。同时,在configure脚本中可能还需要进行一些特定平台的处理,如检查特定库文件、特定命令或系统调用的可用性等。 另外,configure还负责生成一些配置文件,如Makefile等。需要确保生成的配置文件与目标平台的要求一致。同时,在移植过程中,可能还需要调整软件中对平台特性的依赖,如指定特定库文件的链接路径等。 在移植过程中,可能会遇到一些平台兼容性的问题,如特定函数的实现差异、系统调用的差异等。这时,需要根据具体问题进行相应的修改和调试。 总之,configure软件移植是一个根据目标平台特点进行软件配置和编译的过程。需要对配置脚本进行修改,指定适合目标平台的选项和路径,并进行一些特定功能的适配和调试工作。通过正确的移植过程,可以将软件成功地在不同平台上运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值