summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2025-02-20 22:43:03 +0800
committerruki <[email protected]>2025-02-20 22:43:03 +0800
commit48065b9580ec329b67a48ce4c7dd79c606ac2aa2 (patch)
tree318be1b1affde940f5d09af1a4d4aeb1c8248dc6
parent0a438f8721806ae97b97c592a5dbc036c3f7ae4d (diff)
improve static/shared library for kotlin
-rw-r--r--tests/projects/kotlin-native/shared_library/src/foo.kt8
-rw-r--r--tests/projects/kotlin-native/shared_library/src/main.c7
-rw-r--r--tests/projects/kotlin-native/shared_library/src/main.kt3
-rw-r--r--tests/projects/kotlin-native/shared_library/xmake.lua9
-rw-r--r--tests/projects/kotlin-native/static_library/src/foo.kt8
-rw-r--r--tests/projects/kotlin-native/static_library/src/main.c7
-rw-r--r--tests/projects/kotlin-native/static_library/src/main.kt3
-rw-r--r--tests/projects/kotlin-native/static_library/xmake.lua9
-rw-r--r--xmake/rules/kotlin-native/xmake.lua6
9 files changed, 50 insertions, 10 deletions
diff --git a/tests/projects/kotlin-native/shared_library/src/foo.kt b/tests/projects/kotlin-native/shared_library/src/foo.kt
new file mode 100644
index 000000000..64ed2a016
--- /dev/null
+++ b/tests/projects/kotlin-native/shared_library/src/foo.kt
@@ -0,0 +1,8 @@
+@file:OptIn(ExperimentalNativeApi::class)
+
+import kotlin.experimental.ExperimentalNativeApi
+import kotlinx.cinterop.*
+
+@ExperimentalNativeApi
+@CName("kotlin_add")
+fun add(a: Int, b: Int): Int = a + b
diff --git a/tests/projects/kotlin-native/shared_library/src/main.c b/tests/projects/kotlin-native/shared_library/src/main.c
new file mode 100644
index 000000000..55e16305d
--- /dev/null
+++ b/tests/projects/kotlin-native/shared_library/src/main.c
@@ -0,0 +1,7 @@
+#include "libfoo_api.h"
+#include <stdio.h>
+
+int main(int argc, char** argv) {
+ printf("add(1, 2) = %d\n", kotlin_add(1, 2));
+ return 0;
+}
diff --git a/tests/projects/kotlin-native/shared_library/src/main.kt b/tests/projects/kotlin-native/shared_library/src/main.kt
deleted file mode 100644
index 543f5ac8f..000000000
--- a/tests/projects/kotlin-native/shared_library/src/main.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-fun main() {
- println("hello xmake!")
-}
diff --git a/tests/projects/kotlin-native/shared_library/xmake.lua b/tests/projects/kotlin-native/shared_library/xmake.lua
index 20c401d76..f1fb7f267 100644
--- a/tests/projects/kotlin-native/shared_library/xmake.lua
+++ b/tests/projects/kotlin-native/shared_library/xmake.lua
@@ -1,7 +1,12 @@
add_rules("mode.debug", "mode.release")
add_requires("kotlin-native")
-target("test")
+target("foo")
set_kind("shared")
- add_files("src/*.kt")
+ add_files("src/foo.kt")
set_toolchains("@kotlin-native")
+target("test")
+ set_kind("binary")
+ add_files("src/main.c")
+ add_deps("foo")
+
diff --git a/tests/projects/kotlin-native/static_library/src/foo.kt b/tests/projects/kotlin-native/static_library/src/foo.kt
new file mode 100644
index 000000000..64ed2a016
--- /dev/null
+++ b/tests/projects/kotlin-native/static_library/src/foo.kt
@@ -0,0 +1,8 @@
+@file:OptIn(ExperimentalNativeApi::class)
+
+import kotlin.experimental.ExperimentalNativeApi
+import kotlinx.cinterop.*
+
+@ExperimentalNativeApi
+@CName("kotlin_add")
+fun add(a: Int, b: Int): Int = a + b
diff --git a/tests/projects/kotlin-native/static_library/src/main.c b/tests/projects/kotlin-native/static_library/src/main.c
new file mode 100644
index 000000000..55e16305d
--- /dev/null
+++ b/tests/projects/kotlin-native/static_library/src/main.c
@@ -0,0 +1,7 @@
+#include "libfoo_api.h"
+#include <stdio.h>
+
+int main(int argc, char** argv) {
+ printf("add(1, 2) = %d\n", kotlin_add(1, 2));
+ return 0;
+}
diff --git a/tests/projects/kotlin-native/static_library/src/main.kt b/tests/projects/kotlin-native/static_library/src/main.kt
deleted file mode 100644
index 543f5ac8f..000000000
--- a/tests/projects/kotlin-native/static_library/src/main.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-fun main() {
- println("hello xmake!")
-}
diff --git a/tests/projects/kotlin-native/static_library/xmake.lua b/tests/projects/kotlin-native/static_library/xmake.lua
index 2e827ec78..646cb2e5d 100644
--- a/tests/projects/kotlin-native/static_library/xmake.lua
+++ b/tests/projects/kotlin-native/static_library/xmake.lua
@@ -1,7 +1,12 @@
add_rules("mode.debug", "mode.release")
add_requires("kotlin-native")
-target("test")
+target("foo")
set_kind("static")
- add_files("src/*.kt")
+ add_files("src/foo.kt")
set_toolchains("@kotlin-native")
+target("test")
+ set_kind("binary")
+ add_files("src/main.c")
+ add_deps("foo")
+
diff --git a/xmake/rules/kotlin-native/xmake.lua b/xmake/rules/kotlin-native/xmake.lua
index 7b359094a..be3c39bac 100644
--- a/xmake/rules/kotlin-native/xmake.lua
+++ b/xmake/rules/kotlin-native/xmake.lua
@@ -23,9 +23,15 @@ rule("kotlin-native.build")
on_load(function (target)
if target:is_static() then
target:add("arflags", {"-produce", "static"}, {force = true})
+ target:add("includedirs", target:targetdir(), {interface = true})
+ if target:is_plat("macosx") then
+ target:add("frameworks", "Foundation", "CoreFoundation", {interface = true})
+ end
elseif target:is_shared() then
target:add("shflags", {"-produce", "dynamic"}, {force = true})
+ target:add("includedirs", target:targetdir(), {interface = true})
end
+ target:set("policy", "build.fence", true)
end)
on_build("build.target")