summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-10-24 20:45:41 +0200
committerArthur LAURENT <[email protected]>2025-10-24 20:55:14 +0200
commitda18615f8926f463e464060fb6789fc58a534c46 (patch)
treee6daadf0d494dc39b2eb312932c99f8179ffccf9
parent6b4789893214a13f19d6109e9cb6249540bf16f1 (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.lua1
-rw-r--r--xmake/rules/swift/xmake.lua11
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