当前位置: 首页 > news >正文

xmake+xrepo自建仓库添加交叉编译工具链

xmake+xrepo自建仓库添加交叉编译工具链

最近想将交叉编译工具链放到xrepo自建仓库中,在xmake中引用,方便多个电脑快速实现交叉编译。

xmake官方文档感觉不够详细,折腾了好久,这里做个记录。

基本步骤如下:

  1. 添加自建仓库地址到xrepo的repo列表;
  2. 打包上传编译链到自建仓库;
  3. 工程的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.lua1 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$ 
http://www.lryc.cn/news/354926.html

相关文章:

  • 论文阅读》学习了解自己:一个粗略到精细的个性化对话生成的人物感知训练框架 AAAI 2023
  • [Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)
  • MyBatis懒加载数据(大批量数据处理)
  • MySQL--联合索引应用细节应用规范
  • 【spring boot+Lazy ORM+mysql】开发一个数据库管理系统实现对应数据库数据查看和修改
  • 知识分享:隔多久查询一次网贷大数据信用报告比较好?
  • 【Day8:JAVA字符串的学习】
  • jetcache缓存
  • SQLSyntaxErrorException: FUNCTION dbname.to_timestamp does not exist
  • Borel-Cantelli 引理
  • 算法训练营第四十一天 | LeetCode 509 斐波那契数列、LeetCode 70 爬楼梯、LeetCode 746 使用最小花费爬楼梯
  • 网络其他重要协议(DNS、ICMP、NAT)
  • 利用PyCSP3库(含大量全局约束)进行组合约束建模
  • 解决updateByExample时属性值异常的问题(部分属性值没有使用占位符?进行占位,而是变成了属性的名称)
  • [C++][algorithm][Eigen] 基于Eigen实现Softmax函数
  • 一招教大家,如何移除受保护的excel工作表的编辑权限限制?
  • Python 全栈体系【四阶】(五十三)
  • 民国漫画杂志《时代漫画》第27期.PDF
  • 图论(四)—最短路问题(Dijkstra)
  • 用友NC linkVoucher SQL注入漏洞复现
  • 部署Prometheus + Grafana实现监控数据指标
  • GEE27:遥感数据可用数据源计算及条带号制作
  • FURNet问题
  • 抖音小店怎么对接达人合作?达人带货的细节分享,附邀约达人话术
  • 迈向未来:Web3 技术开发的无限可能
  • Python应用开发——30天学习Streamlit Python包进行APP的构建(2)
  • Leecode热题100---46:全排列(递归)
  • Android 多语言
  • Thingsboard规则链:Message Type Filter节点详解
  • SQLI-labs-第二十五关和第二十五a关