-
-
Notifications
You must be signed in to change notification settings - Fork 778
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
交叉编译 #1008
Comments
is_plat 依赖 xmake f -p plat 配置读取,而里面的 set_config 又是设置 xmake config 中的配置值,这就会存在先有鸡还是先有蛋的问题。。 所以尽量不要使用set_config,即使要用,不要在 is_plat/is_arch 的 if 内部配置。 交叉编译通常只需要指定 --sdk= 一个参数, 如果要省去sdk的设置,尽量使用 set_toolset/set_toolchains,这个是可以特定每个target单独设置,不同更加细粒度到cc/ld。 也可以在 xmake.lua 中自己定义自己的多个 如果 |
如果非要根据自己的 toolchain("my_toolchain")
set_kind("standalone")
set_cross("arm-linux-musleabi-")
set_sdkdir("/tmp/arm-linux-musleabi-cross")
set_bindir("/tmp/arm-linux-musleabi-cross/bin")
on_load(function (toolchain)
-- load some basic configuration for cross-toolchain, e.g. toolchain:set("toolchain", "cc", cross .. "gcc")
import("toolchains.cross.load", {rootdir = os.programdir()})
load(toolchain)
-- add some custom flags
--toolchain:add("ldflags", "--static", {force = true})
--toolchain:add("syslinks", "gcc", "c")
end)
toolchain_end()
target("hello")
set_kind("binary")
add_files("apps/hello/*.c")
if is_plat("myplat") then
set_toolchains("my_toolchain")
end 这里通过 set_toolchains 来绑定自定义工具链到特定 target,当然也可以设置对所有target生效,然后只需要 当然,如果不用set_toolchains,那么,也只需要 |
我稍微改进了下,简化了交叉工具链的定制,现在只需要这样就可以了,请更新到dev版本: toolchain("my_toolchain")
set_kind("standalone")
set_cross("arm-linux-musleabi-")
set_sdkdir("/tmp/arm-linux-musleabi-cross")
toolchain_end()
target("hello")
set_kind("binary")
add_files("apps/hello/*.c")
if is_plat("myplat") then
set_toolchains("my_toolchain")
end |
昨天的patch改出了点问题,如果已经拉取,请重新更新下dev版本, |
好的,谢谢。
…---原始邮件---
发件人: "ruki"<[email protected]>
发送时间: 2020年11月2日 10:44:27
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "zt449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
昨天的patch改出了点问题,如果已经拉取,请重新更新下dev版本,xmake update -s dev
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
问题1:
toolchain_end() 上面代码set_bindir设置后没有作用,然后我查了一下core/tool/toolchain.lua文件,这里是不是应该改一下:
end
end 问题2:
toolchain_end() ` |
问题一,是后来的改动没还好,我回头再改下 |
好的
…---原始邮件---
发件人: "ruki"<[email protected]>
发送时间: 2020年11月8日 15:02:50
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "zt449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
问题一,是后来的改动没还好,我回头再改下
问题二,目前xmake.lua里面写死绑定toolchain,会跳过toolchain的check过程,所以cross得手动配置上,否则没取到,但是走 xmake f 会自动check cross toolchain,所以有cross值
关于一个问题,之前我就知道的,只不过后来一直没时间细看,你先加上cross用吧,我可能需要等后面有时间了,才能够细看下如果加上check
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
还有个问题,当交叉编译链安装目录下有lib目录是,xmake会去显性链接-L/$sdkdir/lib,那对于64位编译器下面的lib64好像就没有去显性链接。因为链接了lib目录,但没有链接lib64目录,感觉有点别扭。实际上没有必要去显性链接,因为gcc一般会自动去链接 “ aarch64-none-linux-gnu-gcc -print-search-dirs“ 打印出的目录。
…------------------ 原始邮件 ------------------
发件人: "xmake-io/xmake" <[email protected]>;
发送时间: 2020年11月8日(星期天) 下午3:02
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
问题一,是后来的改动没还好,我回头再改下
问题二,目前xmake.lua里面写死绑定toolchain,会跳过toolchain的check过程,所以cross得手动配置上,否则没取到,但是走 xmake f 会自动check cross toolchain,所以有cross值
关于一个问题,之前我就知道的,只不过后来一直没时间细看,你先加上cross用吧,我可能需要等后面有时间了,才能够细看下如果加上check
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
默认的交叉工具链会设置 -L lib ,你可以自定义toolchain在 on_load中,追加 toolchain:add("linkdirs", "xxxx/lib64") 可以参考musl工具链: xmake/xmake/toolchains/musl/xmake.lua Lines 32 to 44 in 52752ca
在 toolchain:load_cross_toolchain 之前优先添加 toolchain:add("linkdirs", "xxxx/lib64") xmake/xmake/toolchains/cross/load.lua Lines 52 to 56 in 52752ca
|
问题1 的 bindir 我修复了 dev |
关于这个问题,我dev上去掉了内置显式的 sdk/inclde sdk/lib ,完全依赖编译器自身内部去找,这样兼容性应该会更好些,你可以再试试 |
嗯嗯,好的,我也觉得这样会更好一些。
…---原始邮件---
发件人: "ruki"<[email protected]>
发送时间: 2020年11月9日 10:52:38
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "zt449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
还有个问题,当交叉编译链安装目录下有lib目录是,xmake会去显性链接-L/$sdkdir/lib,那对于64位编译器下面的lib64好像就没有去显性链接。因为链接了lib目录,但没有链接lib64目录,感觉有点别扭。实际上没有必要去显性链接,因为gcc一般会自动去链接 “ aarch64-none-linux-gnu-gcc -print-search-dirs“ 打印出的目录。
…
------------------ 原始邮件 ------------------ 发件人: "xmake-io/xmake" <[email protected]>; 发送时间: 2020年11月8日(星期天) 下午3:02 收件人: "xmake-io/xmake"<[email protected]>; 抄送: "449569708"<[email protected]>;"Author"<[email protected]>; 主题: Re: [xmake-io/xmake] 交叉编译 (#1008) 问题一,是后来的改动没还好,我回头再改下 问题二,目前xmake.lua里面写死绑定toolchain,会跳过toolchain的check过程,所以cross得手动配置上,否则没取到,但是走 xmake f 会自动check cross toolchain,所以有cross值 关于一个问题,之前我就知道的,只不过后来一直没时间细看,你先加上cross用吧,我可能需要等后面有时间了,才能够细看下如果加上check — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.
关于这个问题,我dev上去掉了内置显式的 sdk/inclde sdk/lib ,完全依赖编译器自身内部去找,这样兼容性应该会更好些,你可以再试试
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
这个问题我dev上修复了,你再更新下试试 |
你这也在更新下吧,dev,我修复了一个 set_toolset 配置问题,#1024 |
我想问一下,xmake支持离线更新么?因为有的工作环境下,是不能直接联网的。在linux下,是可以直接将仓库clone下来,大不了再重新安装。但是在windows下,就不清楚怎么更新了。
…---原始邮件---
发件人: "ruki"<[email protected]>
发送时间: 2020年11月13日 14:36:35
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "zt449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
Closed #1008.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
github ci上每次构建,都会有对应win安装包,下载下来直接安装就行了 |
安装包是可以下载的,主要是有没有离线更新lua脚本的方法。
…---原始邮件---
发件人: "ruki"<[email protected]>
发送时间: 2020年11月15日 13:52:05
收件人: "xmake-io/xmake"<[email protected]>;
抄送: "zt449569708"<[email protected]>;"Author"<[email protected]>;
主题: Re: [xmake-io/xmake] 交叉编译 (#1008)
github ci上每次构建,都会有对应win安装包,下载下来直接安装就行了
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
安装包下来安装 ,lua脚本不就也同步更新了么。有什么区别呢? 安装包又不大,没必要为了省这一几百k,单独下载lua 如果你非要只更新lua脚本,直接git clone xmake的仓库源码,覆盖里面的整个xmake子目录不就好了,就是lua脚本 |
`
if is_plat("arm64") then
set_config("sdk", "/opt/gcc-arm64")
set_config("bin", "/opt/gcc-arm64/bin")
end
target("hello")
set_kind("binary")
add_files("src/*.c")
`
想请教一下,这种写法方式为什么无法交叉编译呢?因为我代码可能在多个不同的CPU平台编译,但是可能又记不住那么长的配置命令,所以只想通过简单地 xmake f -p 'plat' 来进行平台切换。
The text was updated successfully, but these errors were encountered: