summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-10-24 19:47:06 +0200
committerArthur LAURENT <[email protected]>2025-10-24 19:47:06 +0200
commit5c1bb9431687dbcc3caeae94204475e23f98d148 (patch)
treecbe73831bf231ac6fea3427b7737c858b27cdae9
parent072000e5d38b878e8ba929a232097d3267478acb (diff)
nfc(swift) add a test
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/fibonacci.h6
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/module.modulemap3
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.cpp9
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.swift7
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.cpp7
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.swift3
-rw-r--r--tests/projects/swift/bidirectional_cxx_interop_lib/xmake.lua23
-rw-r--r--xmake/rules/swift/xmake.lua2
8 files changed, 59 insertions, 1 deletions
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/fibonacci.h b/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/fibonacci.h
new file mode 100644
index 000000000..009ea2f3b
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/fibonacci.h
@@ -0,0 +1,6 @@
+#ifndef FIBONACCI_FIBONACCI_H
+#define FIBONACCI_FIBONACCI_H
+
+extern "C" int fibonacci_cpp(int x);
+
+#endif // FIBONACCI_FIBONACCI_H
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/module.modulemap b/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/module.modulemap
new file mode 100644
index 000000000..6d39a1953
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/include/fibonacci/module.modulemap
@@ -0,0 +1,3 @@
+module Fibonacci {
+ header "fibonacci.h"
+}
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.cpp b/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.cpp
new file mode 100644
index 000000000..638e6dc38
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.cpp
@@ -0,0 +1,9 @@
+#include <fibonacci/fibonacci.h>
+#include <fibonacci-Swift.h>
+#include <iostream>
+
+extern "C" int fibonacci_cpp(int x) {
+ std::cout << "x [cpp]: " << x << std::endl;
+ if (x <= 1) return 1;
+ return SwiftFibonacci::fibonacciSwift(x - 1) + SwiftFibonacci::fibonacciSwift(x - 2);
+}
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.swift b/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.swift
new file mode 100644
index 000000000..24149f613
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/lib/fibonacci.swift
@@ -0,0 +1,7 @@
+public func fibonacciSwift(_ x: CInt) -> CInt {
+ print("x [swift]: \(x)")
+ if x <= 1 {
+ return 1
+ }
+ return fibonacciSwift(x - 1) + fibonacciSwift(x - 2)
+}
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.cpp b/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.cpp
new file mode 100644
index 000000000..af50b1171
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.cpp
@@ -0,0 +1,7 @@
+#include <fibonacci-Swift.h>
+#include <iostream>
+
+int main(int argc, char ** argv) {
+ std::cout << SwiftFibonacci::fibonacciSwift(5) << std::endl;
+ return 0;
+}
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.swift b/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.swift
new file mode 100644
index 000000000..aaa192db1
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/src/fibonacci.swift
@@ -0,0 +1,3 @@
+import Fibonacci
+
+print(fibonacci_cpp(5))
diff --git a/tests/projects/swift/bidirectional_cxx_interop_lib/xmake.lua b/tests/projects/swift/bidirectional_cxx_interop_lib/xmake.lua
new file mode 100644
index 000000000..aca6d4235
--- /dev/null
+++ b/tests/projects/swift/bidirectional_cxx_interop_lib/xmake.lua
@@ -0,0 +1,23 @@
+target("fibonacci")
+ set_kind("$(kind)")
+ set_languages("cxx20")
+ add_files("lib/**.swift", {public = true})
+ add_files("lib/**.cpp")
+ set_values("swift.modulename", "SwiftFibonacci")
+ set_values("swift.interop", "cxx")
+ -- for automatic clang modulemap
+ add_scflags("-Iinclude/fibonacci", {public = true})
+ add_includedirs("include")
+ add_headerfiles("include/**.h")
+
+target("cxx_interop_lib")
+ set_kind("binary")
+ set_languages("cxx20")
+ add_files("src/**.cpp")
+ add_deps("fibonacci")
+
+target("swift_interop_lib")
+ set_kind("binary")
+ add_files("src/**.swift")
+ add_deps("fibonacci")
+ set_values("swift.interop", "cxx")
diff --git a/xmake/rules/swift/xmake.lua b/xmake/rules/swift/xmake.lua
index 8bb168679..25ac86891 100644
--- a/xmake/rules/swift/xmake.lua
+++ b/xmake/rules/swift/xmake.lua
@@ -181,7 +181,7 @@ 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() or target:values("swift.interop") then
+ if target:is_library() then
target:add("scflags", "-parse-as-library")
end