xmake+xrepo自建仓库添加交叉编译工具链
最近想将交叉编译工具链放到xrepo自建仓库中,在xmake中引用,方便多个电脑快速实现交叉编译。
xmake官方文档感觉不够详细,折腾了好久,这里做个记录。
基本步骤如下:
- 添加自建仓库地址到xrepo的repo列表;
- 打包上传编译链到自建仓库;
- 工程的xmake.lua添加交叉编译工具链配置
1.自建xrepo包仓库
直接Fork或者将官方包仓库上传到自己的git仓库,xrepo官方仓库地址:
xmake-io/xrepo: 🗂️ A cross-platform C/C++ package manager based on Xmake (github.com)
xrepo: 一个基于 Xmake 的跨平台 C/C++ 包管理器 (gitee.com)
添加自建仓库地址到xrepo的搜索仓库:
$ xrepo add-repo myrepo https://github.com/mygroup/myrepo
添加后可以使用list-repo命令查看:
none@ubuntu:~/toolchain/packages$ xrepo list-repo
global repositories:
gitlab https://git.abc.cn/xxx/toolchain.git
build-artifacts https://gitee.com/xmake-mirror/build-artifacts.git main
xmake-repo https://gitee.com/tboox/xmake-repo.git master
builtin-repo /home/none/.local/share/xmake/repository
4 repositories were found!
2.上传文件到自建包仓库
这里使用树莓派的一个交叉编译工具链,打包成tgz压缩包。放在对应目录下:
none@ubuntu:~/toolchain/packages/r/rpi_toolchain$ ls ../../
7 a b c d e f g h i j k l m n o p q r s t u v w x y z
none@ubuntu:~/toolchain/packages/r/rpi_toolchain$ tree .
.
├── rpi
│ └── rpi_toolchain_4.9.3.tgz
└── xmake.lua
1 directory, 2 files
none@ubuntu:~/toolchain/packages/r/rpi_toolchain$
编写xmake.lua:
package("rpi_toolchain")
set_kind("toolchain")
-- set_homepage("https://gcc.gnu.org/")
set_description("The raspberry pi toolchain")
add_versions("1.0.0", "local")
on_install("@linux", function (package)
-- 解压工具链压缩包
os.vrunv("tar", {"-xzvf", path.join(os.scriptdir(), "rpi", "rpi_toolchain_4.9.3.tgz")})
-- 复制工具链到安装目录
os.vcp("arm-rpi-4.9.3-linux-gnueabihf/*", package:installdir())
end)
on_test(function (package)
print("package:installdir: ", package:installdir())
os.vrun("arm-linux-gnueabihf-gcc --version")
end)
工具链文件放在仓库中,所以不用配置url,下面这个不确定是不是必要的,感兴趣的朋友可以试试去掉:
add_versions("1.0.0", "local")
添加工具链及xmake.lua之后,git push推到服务器即可。
然后就可以使用xrepo search搜索我们的包,搜索到即可。
通过xrepo install安装rpi_toolchain:
xrepo install -vD rpi_toolchain
-vD可以显示详细的安装日志及错误输出。
3.在工程中集成交叉编译工具链
创建一个demo工程:
xmake create -l c++ demo
修改xmake.lua:
add_rules("mode.debug", "mode.release")
-- 引用rpi_toolchain包
add_requires("rpi_toolchain")
-- 定义toolchain
toolchain("rpi_cc")
set_kind("cross")
target("demo")
set_kind("binary")
add_files("src/*.c")
-- 将编译链与包绑定
set_toolchains("rpi_cc@rpi_toolchain")
此时进行编译,即可得到交叉编译的bin文件:
none@ubuntu:~/demo$ xmake -rv
[ 50%]: cache compiling.release src/main.c
/home/none/.xmake/packages/r/rpi_toolchain/1.0.0/725e51fe81b74141ade9efbd3ccaf900/bin/arm-linux-gnueabihf-gcc -c -fvisibility=hidden -O3 -DNDEBUG -o build/.objs/demo/linux/x86_64/release/src/main.c.o src/main.c
checking for flags (-MMD -MF) ... ok
checking for flags (-fdiagnostics-color=always) ... ok
[ 75%]: linking.release demo
/home/none/.xmake/packages/r/rpi_toolchain/1.0.0/725e51fe81b74141ade9efbd3ccaf900/bin/arm-linux-gnueabihf-g++ -o build/linux/x86_64/release/demo build/.objs/demo/linux/x86_64/release/src/main.c.o -s
[100%]: build ok, spent 0.353s
none@ubuntu:~/demo$