Skip to content
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

更好的 zig & C/C++ 混合构建支持 #3251

Closed
SaeruHikari opened this issue Jan 6, 2023 · 6 comments
Closed

更好的 zig & C/C++ 混合构建支持 #3251

SaeruHikari opened this issue Jan 6, 2023 · 6 comments

Comments

@SaeruHikari
Copy link

你在什么场景下需要该功能?

考虑这样一个混链场景:

target("Zig-CGPUMandelbrot")
    set_group("04.examples/cgpu")
    set_kind("binary")
    add_rules("utils.dxc", {
        spv_outdir = "/../resources/shaders/cgpu-mandelbrot",
        dxil_outdir = "/../resources/shaders/cgpu-mandelbrot"})
    add_deps("SkrRT")
    add_files("cgpu-mandelbrot/**.hlsl")
    set_toolchains("@zig")
    add_files("cgpu-mandelbrot/lodepng.c")
    add_files("cgpu-mandelbrot/mandelbrot.zig")
  • SkrRT 是一个 C/C++ 目标,使用 MSVC/Clang-Cl/LLVM 等标准 C++ 工具链,也有一些 public 的 flags;
  • 在这个 Zig 目标中,也有一些 C/C++ 文件 (lodepng.c);

在这种情境下,现在的 zig toolchain 会默认使用 zig cc 构建这个 C 文件,并接受 SkrRT 传递来的 cxflags。但是 zig cc 有可能不认识这些标志,就会导致构建失败。

描述可能的解决方案

提供一种混合 toolchain 的方法,可以针对 C/C++ 文件使用默认 C/C++ 工具链,只对 Zig 文件单独使用 Zig 编译器。

描述你认为的候选方案

No response

其他信息

No response

@waruqi waruqi added this to the v2.7.5 milestone Jan 6, 2023
@waruqi
Copy link
Member

waruqi commented Jan 6, 2023

看了下,只有显式设置 toolchain 为 zig 才会用 zig cc 。。你把 set_toolchains 去掉,让 xmake 自动根据 .c/.zig 自动去找,就行了。。原本支持

  1. 删了 set_toolchain
  2. 将 zig 设置到 PATH 里面,然后执行 xmake f -c
  3. 或者 xmake f --zc=/xxx/zig --zcld=/xxxx/zig 配置也可以

@SaeruHikari
Copy link
Author

  • 试了下放到 PATH 下面确实支持;
  • 不使用 set_toolchains 的话,有办法把用 add_requires("zig 0.10.x") 下载的 zig 集成工具链配置到默认的 zc 上吗

@waruqi
Copy link
Member

waruqi commented Jan 6, 2023

不使用 set_toolchains 的话,有办法把用 add_requires("zig 0.10.x") 下载的 zig 集成工具链配置到默认的 zc 上吗

目前不行,必须得绑定个 toolchain

@SaeruHikari
Copy link
Author

OK,那我把 zig 集成到工程 SDK 里面好了,应该就没问题了

@waruqi
Copy link
Member

waruqi commented Jan 6, 2023

更新到 dev 再试下

add_rules("mode.debug", "mode.release")

add_requires("zig >=0.10")

target("demo")
    set_kind("binary")
    add_files("src/*.c")
    add_files("src/*.zig")
    set_toolchains("@zig", {zigcc = false})

@SaeruHikari
Copy link
Author

OK 了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants