Closed OuYangPaste closed 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")
啊,原来这样子,谢谢。因为我们平台打算直接划分为 linux 和 other rtos,所以一直没想过 platform 会有影响。 远程编译链如果我不想让本地 xmake.lua 去干预编译器配置,我能直接在 repo 的 xmake.lua 进行一定的配置去 设置 cross 前缀 和其他设置吗,然后本地 xmake.lua 只管拉取和使用?
刚才在本地 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")
如果我把 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 平台支持交叉编译工具链自定义切换,其他平台都是固定默认工具链。。
on_install("macosx", "linux", "cross", function (package)
啊,感动,谢谢,set_sdkdir 我只是用来测试看卡住的问题和有没设置工具链有没关系而已
刚才验了一下,卡死问题已经解决,mycross 也不再报not found,不过 mycross 关联的工具链没有生效,而是直接用了gcc 去进行编译,已经设置 set_kind("cross")
在更新下试试
可以了╰(´︶`)╯ 现在来说 repo 上面是只能存在 package 域吗,像这样的 toolchain 域好像不能在 repo 的 xmake.lua 里用
除了xmake内置的toolchain,用户自定义的 toolchain 只能用户自己设置到xmake.lua
这样子啊,不过既然选择远程拉取交叉编译链,对于一些需要手动去针对配置的编译链,如果能在 repo 里配置会更好吧?
工具链的配置更加复杂多样化,只能用户自己在xmake.lua里面自己配置,repo仅用于处理包
emmm,这个貌似是个多对多的问题,本地的话可以更好地复用同一个 toolchain 的配置去关联不同版本的工具链包,我想着如果远端能配的话,多个人各自项目去用同一个交叉编译链就不用各自配置了╮(‵▽′)╭,不过目前来说遇到过的交叉编译链只见过一个比较奇葩的,其他的都还好
搞个通用的xxx.lua 用 includes进来复用就行了
也是,能解决的方法有很多
那就先这样吧
描述问题
最简化了下 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
相关环境