xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
9.97k stars 780 forks source link

远程交叉编译链编译安装远程包失败 #1310

Closed OuYangPaste closed 3 years ago

OuYangPaste commented 3 years ago

描述问题

最简化了下 xmake.lua 内容:

add_requires("cross-jzt21") set_toolchains("cross@cross-jzt21") add_requires("mbedtls")

其中 cross-jzt21 为 我们内部私有 repo 交叉编译工具链 mbedtls 用的是通过 xmake-repo 提供

发现 mbedtls 的编译并没有采取 cross-jzt21 编译链,而是直接使用 pc 环境的 gcc

顺带问一句,远程交叉编译链想像指定前缀(本地交叉编译链可以通过 --cross 指定),应该怎么操作呢? 试过直接 set_config("--cross", "前缀") 结果好像直接死循环了

错误信息

整个操作过程log: info.log

相关环境

waruqi commented 3 years ago

带有依赖包的交叉编译,必须切到 cross 平台而不是 linux 平台,你仅仅设置了cross工具链和包,全局编译平台没切换,要么通过 xmake f -p cross 切换,要么通过 set_plat("cross") 切换,参考:https://github.com/xmake-io/xmake/blob/49953b37d748a0116626a74f87faebf198c2d688/tests/projects/package/toolchain_muslcc/xmake.lua#L4

顺带问一句,远程交叉编译链想像指定前缀(本地交叉编译链可以通过 --cross 指定),应该怎么操作呢?

自定义 toolchain("mycross") 工具链,通过 set_cross 设置, 然后切换绑定到你的工具链。。set_toolchains("mycross@cross-jzt21")

OuYangPaste commented 3 years ago

啊,原来这样子,谢谢。因为我们平台打算直接划分为 linux 和 other rtos,所以一直没想过 platform 会有影响。 远程编译链如果我不想让本地 xmake.lua 去干预编译器配置,我能直接在 repo 的 xmake.lua 进行一定的配置去 设置 cross 前缀 和其他设置吗,然后本地 xmake.lua 只管拉取和使用?

OuYangPaste commented 3 years ago

刚才在本地 xmake.lua 试了下,有两个比较头痛的问题,下面是正常能用的本地编译链配置: toolchain("mycross") set_kind("standalone") set_sdkdir("/home/paste/working/jd-ingenic/ISVP-T21-1.0.33-20200527/software/pc/tools/toolchain/gcc_472/mips-gcc472-glibc216-64bit-r2.3.3/mips-gcc472-glibc216-64bit") set_cross("mips-linux-gnu-") toolchain_end()

如果我把 set_sdkdir 去掉,则 xmake f 会一直吃满CPU 一直卡住,就算 xmake clean 也一样一直卡住 cpu 100% 但是如果同时我把 set_cross 也一起去掉,就不会卡住,这个问题和我上面提到过的 set_conf("cross", "mips-linux-gnu-") 就一直卡住的现象很像

另外一个问题是,我按照刚才你给我的建议,在上面 toolchain("mycross") 基础上,绑定了自己的工具链,但是一直提示 error: the toolchain mycross not found! 完整配置如下(其中尝试注释 set_sdkdir 这一行但是没有作用): ---[[ toolchain("mycross") set_kind("standalone") set_sdkdir("/home/paste/working/jd-ingenic/ISVP-T21-1.0.33-20200527/software/pc/tools/toolchain/gcc_472/mips-gcc472-glibc216-64bit-r2.3.3/mips-gcc472-glibc216-64bit") set_cross("mips-linux-gnu-") toolchain_end() --]]

add_requires("cross-jzt21") set_toolchains("mycross@cross-jzt21")

waruqi commented 3 years ago

如果我把 set_sdkdir 去掉,则 xmake f 会一直吃满CPU 一直卡住,就算 xmake clean 也一样一直卡住 cpu 100% 但是如果同时我把 set_cross 也一起去掉,就不会卡住,这个问题和我上面提到过的 set_conf("cross", "mips-linux-gnu-") 就一直卡住的现象很像

卡死问题我修复了

set_sdkdir("/home/paste/working/jd-ingenic/ISVP-T21-1.0.33-20200527/software/pc/tools/toolchain/gcc_472/mips-gcc472-glibc216-64bit-r2.3.3/mips-gcc472-glibc216-64bit")

都走远程拉取工具链了,说明 xmake 内部会自动下载工具链并使用里面的sdk路径,那你还是设置 sdkdir 干嘛。。

另外一个问题是,我按照刚才你给我的建议,在上面 toolchain("mycross") 基础上,绑定了自己的工具链,但是一直提示 error: the toolchain mycross not found!

这个我 dev 也修复了

set_kind("standalone")

改成 set_kind("cross")

参考:https://github.com/xmake-io/xmake/blob/master/xmake/toolchains/muslcc/xmake.lua

啊,原来这样子,谢谢。因为我们平台打算直接划分为 linux 和 other rtos,所以一直没想过 platform 会有影响。

包定义,根据不同平台,处理方式不同,只有 cross 平台支持交叉编译工具链自定义切换,其他平台都是固定默认工具链。。

https://github.com/xmake-io/xmake-repo/blob/3d22cbbb4d73eedece48fa6dacb89311b9a94c42/packages/l/libomp/xmake.lua#L16

https://github.com/xmake-io/xmake-repo/blob/6bfc7ebb97abf0ced40925d9d62110abba6b422c/packages/o/openssl/xmake.lua#L26

    on_install("macosx", "linux", "cross", function (package)
OuYangPaste commented 3 years ago

啊,感动,谢谢,set_sdkdir 我只是用来测试看卡住的问题和有没设置工具链有没关系而已

OuYangPaste commented 3 years ago

刚才验了一下,卡死问题已经解决,mycross 也不再报not found,不过 mycross 关联的工具链没有生效,而是直接用了gcc 去进行编译,已经设置 set_kind("cross")

waruqi commented 3 years ago

在更新下试试

OuYangPaste commented 3 years ago

可以了╰(´︶`)╯ 现在来说 repo 上面是只能存在 package 域吗,像这样的 toolchain 域好像不能在 repo 的 xmake.lua 里用

waruqi commented 3 years ago

除了xmake内置的toolchain,用户自定义的 toolchain 只能用户自己设置到xmake.lua

OuYangPaste commented 3 years ago

这样子啊,不过既然选择远程拉取交叉编译链,对于一些需要手动去针对配置的编译链,如果能在 repo 里配置会更好吧?

waruqi commented 3 years ago

工具链的配置更加复杂多样化,只能用户自己在xmake.lua里面自己配置,repo仅用于处理包

OuYangPaste commented 3 years ago

emmm,这个貌似是个多对多的问题,本地的话可以更好地复用同一个 toolchain 的配置去关联不同版本的工具链包,我想着如果远端能配的话,多个人各自项目去用同一个交叉编译链就不用各自配置了╮(‵▽′)╭,不过目前来说遇到过的交叉编译链只见过一个比较奇葩的,其他的都还好

waruqi commented 3 years ago

搞个通用的xxx.lua 用 includes进来复用就行了

OuYangPaste commented 3 years ago

也是,能解决的方法有很多

waruqi commented 3 years ago

那就先这样吧