diff options
| author | Arthur LAURENT <[email protected]> | 2025-10-24 19:47:06 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2025-10-24 19:47:06 +0200 |
| commit | 5c1bb9431687dbcc3caeae94204475e23f98d148 (patch) | |
| tree | cbe73831bf231ac6fea3427b7737c858b27cdae9 | |
| parent | 072000e5d38b878e8ba929a232097d3267478acb (diff) | |
nfc(swift) add a test
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 |
