ziglang / zig

General-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.
https://ziglang.org
MIT License
33.71k stars 2.47k forks source link

Multiple modules with different target/optimize created with `b.createModule()` resulting in `error: file exists in multiple modules` #21072

Closed sno2 closed 1 month ago

sno2 commented 1 month ago

Zig Version

0.14.0-dev.1021+fc2924080

Steps to Reproduce and Observed Behavior

Clone https://codeberg.org/sno2/kiesel/src/branch/zig-build-bug-repro and run `zig build release. You will get the following errors:

$ zig build release
release
└─ install kiesel
   └─ zig build-exe kiesel ReleaseSafe x86-linux-musl 1 errors
src/kiesel.zig:1:1: error: file exists in multiple modules
src/kiesel.zig:1:1: note: root of module kiesel0
src/kiesel.zig:1:1: note: root of module kiesel
error: the following command failed with 1 compilation errors:
/home/sno2/projects/zig/zig build-exe -fstrip -OReleaseSafe -target x86-linux-musl -mcpu baseline --dep kiesel --dep kiesel-runtime --dep args --dep zigline -Mroot=/home/sno2/projects/kiesel/src/cli.zig -OReleaseSafe -target x86-linux-musl -mcpu baseline --dep build-options --dep any-pointer --dep ptk --dep stackinfo -Mkiesel=/home/sno2/projects/kiesel/src/kiesel.zig -ODebug --dep kiesel=kiesel0 -Mkiesel-runtime=/home/sno2/.cache/zig/p/1220dd576cdc51af2bb644288e6e614e09a466bc59e3b388815865d3ce2f13725985/src/root.zig -Margs=/home/sno2/.cache/zig/p/1220904d2fdcd970dd0d216211d092eb3ef6da01117163cc9393ab845a1d66c029d9/args.zig -Mzigline=/home/sno2/.cache/zig/p/1220028df99a6973ec7b807a721f263ce91a1e110ebee1dd5b0dfcb6aa826c0ade5c/src/main.zig -Mbuild-options=/home/sno2/projects/kiesel/.zig-cache/c/fa855389495091b92b12f77db9db343d/options.zig -Many-pointer=/home/sno2/.cache/zig/p/122068e632c479fa771ed988bf36c10db5bd0b2918b92569b2fa440785e4013055a8/any-pointer.zig -Mptk=/home/sno2/.cache/zig/p/1220989ea38c6e870da7cf5012b552813d2867f010b4964ef7cbd137b1c534d5b0be/src/main.zig -Mstackinfo=/home/sno2/.cache/zig/p/12207b3a0abfdf208a6f456d31f3f03054dda60db0d8e88065aee202a3195f8b00e0/src/root.zig -OReleaseSafe -target x86_64-linux-musl -mcpu baseline --dep build-options=build-options0 --dep any-pointer --dep ptk --dep stackinfo=stackinfo0 -Mkiesel0=/home/sno2/projects/kiesel/src/kiesel.zig -Mbuild-options0=/home/sno2/projects/kiesel/.zig-cache/c/fa855389495091b92b12f77db9db343d/options.zig -Mstackinfo0=/home/sno2/.cache/zig/p/12207b3a0abfdf208a6f456d31f3f03054dda60db0d8e88065aee202a3195f8b00e0/src/root.zig -lc --cache-dir /home/sno2/projects/kiesel/.zig-cache --global-cache-dir /home/sno2/.cache/zig --name kiesel --zig-lib-dir /home/sno2/projects/zig/lib/ --listen=- 
Build Summary: 4/7 steps succeeded; 1 failed
release transitive failure
└─ install kiesel transitive failure
   └─ zig build-exe kiesel ReleaseSafe x86-linux-musl 1 errors
error: the following build command failed with exit code 1:
/home/sno2/projects/kiesel/.zig-cache/o/e31aaea0614794348d7f402aec7e0852/build /home/sno2/projects/zig/zig /home/sno2/projects/zig/lib /home/sno2/projects/kiesel /home/sno2/projects/kiesel/.zig-cache /home/sno2/.cache/zig --seed 0xb35d0b2c -Zb3a1ab92c97a7346 release

Expected Behavior

The modules are created with different target/optimize values:

Related:

sno2 commented 1 month ago

The problem was me not correctly specifying the target/optimize of a dependency's module.

diff --git a/build.zig b/build.zig
index 73bb828..cb876a4 100644
--- a/build.zig
+++ b/build.zig
@@ -245,7 +245,10 @@ fn buildKiesel(
         }
     }
     exe.root_module.addImport("kiesel", kiesel);
-    if (b.lazyDependency("kiesel_runtime", .{})) |kiesel_runtime| {
+    if (b.lazyDependency("kiesel_runtime", .{
+        .target = target,
+        .optimize = optimize,
+    })) |kiesel_runtime| {
         // Ensure the runtime uses the kiesel module defined above.
         kiesel_runtime.module("kiesel-runtime").addImport("kiesel", kiesel);
         exe.root_module.addImport("kiesel-runtime", kiesel_runtime.module("kiesel-runtime"));