diff --git a/build.gradle b/build.gradle index ce78204..1c24476 100644 --- a/build.gradle +++ b/build.gradle @@ -12,21 +12,25 @@ repositories { mavenCentral() } +String sharedObject = "libjava-tree-sitter" + task buildSharedObject { inputs.file "lib/ai_serenade_treesitter_Languages.cc" inputs.file "lib/ai_serenade_treesitter_Languages.h" inputs.file "lib/ai_serenade_treesitter_TreeSitter.cc" inputs.file "lib/ai_serenade_treesitter_TreeSitter.h" - outputs.file "libjava-tree-sitter.so" + outputs.file "${sharedObject}.dylib" + outputs.file "${sharedObject}.so" doLast { exec { - commandLine "./build.py", "libjava-tree-sitter", "src/test/tree-sitter-python" + commandLine "./build.py", "-a", "${System.getProperty("os.arch")}", "src/test/tree-sitter-python", "-o", "${sharedObject}" } } } clean { + delete "libjava-tree-sitter.dylib" delete "libjava-tree-sitter.so" } @@ -72,5 +76,5 @@ test { events "passed", "skipped", "failed" } - environment "JAVA_TREE_SITTER", "${project.projectDir.toString()}/libjava-tree-sitter.so" + environment "JAVA_TREE_SITTER", "${project.projectDir.toString()}/libjava-tree-sitter.${System.getProperty("os.name").equalsIgnoreCase("mac os x") ? "dylib" : "so"}" } diff --git a/build.py b/build.py index a7a04f3..4daedc7 100755 --- a/build.py +++ b/build.py @@ -13,6 +13,8 @@ def build(repositories, output_path="libjava-tree-sitter", arch=None, verbose=False): if arch and platform.system() != "Darwin": arch = "64" if "64" in arch else "32" + if arch and platform.system() == "Darwin": + arch = "arm64" if "aarch64" in arch else arch output_path = f"{output_path}.{'dylib' if platform.system() == 'Darwin' else 'so'}" here = os.path.dirname(os.path.realpath(__file__)) @@ -31,7 +33,6 @@ def build(repositories, output_path="libjava-tree-sitter", arch=None, verbose=Fa f"{env} make -C {os.path.join(here, 'tree-sitter')} {'> /dev/null' if not verbose else ''}" ) - cpp = False source_paths = [ os.path.join(here, "lib", "ai_serenade_treesitter_TreeSitter.cc"), os.path.join(here, "lib", "ai_serenade_treesitter_Languages.cc"), @@ -44,7 +45,6 @@ def build(repositories, output_path="libjava-tree-sitter", arch=None, verbose=Fa scanner_c = os.path.join(src_path, "scanner.c") scanner_cc = os.path.join(src_path, "scanner.cc") if os.path.exists(scanner_cc): - cpp = True source_paths.append(scanner_cc) elif os.path.exists(scanner_c): source_paths.append(scanner_c) @@ -55,11 +55,10 @@ def build(repositories, output_path="libjava-tree-sitter", arch=None, verbose=Fa ) source_mtimes = [os.path.getmtime(__file__)] + [os.path.getmtime(path) for path in source_paths] - if cpp: - if ctypes.util.find_library("stdc++"): - compiler.add_library("stdc++") - elif ctypes.util.find_library("c++"): - compiler.add_library("c++") + if ctypes.util.find_library("stdc++"): + compiler.add_library("stdc++") + elif ctypes.util.find_library("c++"): + compiler.add_library("c++") output_mtime = os.path.getmtime(output_path) if os.path.exists(output_path) else 0 if max(source_mtimes) <= output_mtime: diff --git a/lib/ai_serenade_treesitter_TreeSitter.cc b/lib/ai_serenade_treesitter_TreeSitter.cc index f95c16e..f6a02b3 100644 --- a/lib/ai_serenade_treesitter_TreeSitter.cc +++ b/lib/ai_serenade_treesitter_TreeSitter.cc @@ -202,6 +202,7 @@ Java_ai_serenade_treesitter_TreeSitter_treeCursorCurrentTreeCursorNode( JNIEXPORT void JNICALL Java_ai_serenade_treesitter_TreeSitter_treeCursorDelete( JNIEnv* env, jclass self, jlong cursor) { + ts_tree_cursor_delete((TSTreeCursor*)cursor); delete (TSTreeCursor*)cursor; }