diff options
| author | ruki <[email protected]> | 2023-03-14 22:00:31 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-03-14 22:00:31 +0800 |
| commit | c1789f73dbee830047ea2eb7cd3b33fc782d6387 (patch) | |
| tree | 01d4588ab1bf9293898e0390c7ca43c588ee2083 | |
| parent | d068e8a4c4f54da17dc964b1329b0d98c4b59149 (diff) | |
| parent | f6898c7129bfae5bfe6aa71563370d07517a81de (diff) | |
Merge pull request #3504 from compilelife/master
add swig java support
| -rw-r--r-- | tests/projects/swig/java_c/src/example.c | 4 | ||||
| -rw-r--r-- | tests/projects/swig/java_c/src/example.i | 5 | ||||
| -rw-r--r-- | tests/projects/swig/java_c/xmake.lua | 21 | ||||
| -rw-r--r-- | xmake/rules/swig/xmake.lua | 7 |
4 files changed, 37 insertions, 0 deletions
diff --git a/tests/projects/swig/java_c/src/example.c b/tests/projects/swig/java_c/src/example.c new file mode 100644 index 000000000..06f76c542 --- /dev/null +++ b/tests/projects/swig/java_c/src/example.c @@ -0,0 +1,4 @@ +int fact(int n) { + return n; +} + diff --git a/tests/projects/swig/java_c/src/example.i b/tests/projects/swig/java_c/src/example.i new file mode 100644 index 000000000..e952f6123 --- /dev/null +++ b/tests/projects/swig/java_c/src/example.i @@ -0,0 +1,5 @@ +%module example +%{ +extern int fact(int n); +%} +extern int fact(int n); diff --git a/tests/projects/swig/java_c/xmake.lua b/tests/projects/swig/java_c/xmake.lua new file mode 100644 index 000000000..65e871ce6 --- /dev/null +++ b/tests/projects/swig/java_c/xmake.lua @@ -0,0 +1,21 @@ +add_rules("mode.release", "mode.debug") + +-- make sure you config to an enviroment with jni.h +-- for example: xmake f -c -p android + +target("example") + set_kind('shared') + -- set moduletype to java + add_rules("swig.c", {moduletype = "java"}) + -- use swigflags to provider package name and output path of java files + add_files("src/example.i", {swigflags = { + "-package", + "com.example", + "-outdir", + "build/java/com/example/" + }}) + add_files("src/example.c") + before_build(function() + -- ensure output path exists before running swig + os.mkdir("build/java/com/example/") + end) diff --git a/xmake/rules/swig/xmake.lua b/xmake/rules/swig/xmake.lua index c0387a940..853ded67a 100644 --- a/xmake/rules/swig/xmake.lua +++ b/xmake/rules/swig/xmake.lua @@ -51,6 +51,11 @@ rule("swig.base") if not target:is_plat("windows") then target:set("extension", ".so") end + elseif moduletype == "java" then + target:set("prefixname", "lib") + if not target:is_plat("windows") then + target:set("extension", ".so") + end else raise("unknown swig module type, please use `add_rules(\"swig.c\", {moduletype = \"python\"})` to set it!") end @@ -68,6 +73,8 @@ rule("swig.base") scriptfile = scriptfile .. ".py" elseif moduletype == "lua" then scriptfile = scriptfile .. ".lua" + elseif moduletype == "java" then + scriptfile = scriptfile .. ".java" end table.insert(scriptfiles, scriptfile) if scriptdir then |
