diff options
| author | Arthur LAURENT <[email protected]> | 2025-10-24 20:45:41 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2025-10-24 20:55:14 +0200 |
| commit | da18615f8926f463e464060fb6789fc58a534c46 (patch) | |
| tree | e6daadf0d494dc39b2eb312932c99f8179ffccf9 | |
| parent | 6b4789893214a13f19d6109e9cb6249540bf16f1 (diff) | |
fix(swift) use -parse-as-library flag only if target is a library or swift.interop.cxxmain is set (to avoir duplicate main symbols in output binary)
| -rw-r--r-- | tests/projects/swift/cxx_interop/xmake.lua | 1 | ||||
| -rw-r--r-- | xmake/rules/swift/xmake.lua | 11 |
2 files changed, 7 insertions, 5 deletions
diff --git a/tests/projects/swift/cxx_interop/xmake.lua b/tests/projects/swift/cxx_interop/xmake.lua index cd5ef0469..68f7ede78 100644 --- a/tests/projects/swift/cxx_interop/xmake.lua +++ b/tests/projects/swift/cxx_interop/xmake.lua @@ -6,3 +6,4 @@ target("cxx_interop") set_values("swift.modulename", "SwiftFibonacci") set_values("swift.interop", "cxx") set_values("swift.interop.headername", "fibonacci-Swift.h") + set_values("swift.interop.cxxmain", true) diff --git a/xmake/rules/swift/xmake.lua b/xmake/rules/swift/xmake.lua index afb8983cb..b54fe5724 100644 --- a/xmake/rules/swift/xmake.lua +++ b/xmake/rules/swift/xmake.lua @@ -59,9 +59,6 @@ rule("swift.interop", function() target:add("includedirs", outdir, {public = true}) local mode = (type(target:values("swift.interop")) == "string") and target:values("swift.interop") or "objc" - if mode == "cxx" then - target:add("scflags", "-cxx-interoperability-mode=default") - end local headername = (target:values("swift.interop.headername") or (target:name() .. "-Swift.h")) local header = path.join(outdir, headername) @@ -184,10 +181,14 @@ rule("swift.build") set_sourcekinds("sc") on_build_files("private.action.build.object", {jobgraph = true, batch = true}) on_config(function (target) - if target:is_library() then - target:add("scflags", "-parse-as-library") + local mode = (type(target:values("swift.interop")) == "string") and target:values("swift.interop") or "objc" + if mode == "cxx" then + target:add("scflags", "-cxx-interoperability-mode=default") end + if target:is_library() or target:values("swift.interop.cxxmain") then + target:add("scflags", "-parse-as-library") + end local modulename = target:values("swift.modulename") or target:name() target:add("scflags", "-module-name", modulename, {force = true}) -- we use swift-frontend to support multiple modules |
