Merge 'bindings/java: Add support for Linux build' from Diego Reis

Small PR.
It also adds the ~~massive~~ java's folders to gitignore

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1646
This commit is contained in:
Jussi Saurio
2025-06-09 08:12:36 +03:00
3 changed files with 20 additions and 1 deletions

View File

@@ -6,6 +6,7 @@ CARGO_BUILD := cargo build --release
MACOS_X86_DIR := $(RELEASE_DIR)/macos_x86
MACOS_ARM64_DIR := $(RELEASE_DIR)/macos_arm64
WINDOWS_DIR := $(RELEASE_DIR)/windows
LINUX_X86_DIR := $(RELEASE_DIR)/linux_x86
.PHONY: libs macos_x86 macos_arm64 windows lint lint_apply test build_test
@@ -33,6 +34,13 @@ windows:
@cp $(TEMP_DIR)/x86_64-pc-windows-gnu/release/_limbo_java.dll $(WINDOWS_DIR)/lib_limbo_java.dll
@rm -rf $(TEMP_DIR)
linux_x86:
@echo "Building release version for linux x86_64..."
@mkdir -p $(TEMP_DIR) $(LINUX_X86_DIR)
@CARGO_TARGET_DIR=$(TEMP_DIR) $(CARGO_BUILD) --target x86_64-unknown-linux-gnu
@cp $(TEMP_DIR)/x86_64-unknown-linux-gnu/release/lib_limbo_java.d $(LINUX_X86_DIR)
@rm -rf $(TEMP_DIR)
lint:
./gradlew spotlessCheck

View File

@@ -18,7 +18,7 @@ maven local to use it.
```shell
$ cd bindings/java
# Please select the appropriate target platform, currently supports `macos_x86`, `macos_arm64`, `windows`
# Please select the appropriate target platform, currently supports `macos_x86`, `macos_arm64`, `windows` and `linux_x86`
$ make macos_x86
# deploy to maven local

View File

@@ -41,6 +41,7 @@ public final class LimboDB implements AutoCloseable {
enum Architecture {
MACOS_ARM64("libs/macos_arm64/lib_limbo_java.dylib", ".dylib"),
MACOS_X86("libs/macos_x86/lib_limbo_java.dylib", ".dylib"),
LINUX_X86("libs/linux_x86/lib_limbo_java.so", ".so"),
WINDOWS("libs/windows/lib_limbo_java.dll", ".dll"),
UNSUPPORTED("", "");
@@ -64,6 +65,16 @@ public final class LimboDB implements AutoCloseable {
String osName = System.getProperty("os.name").toLowerCase();
String osArch = System.getProperty("os.arch").toLowerCase();
// TODO: add support for arm64 on Linux
if (osName.contains("linux")) {
if (osArch.contains("aarch64") || osArch.contains("arm64")) {
throw new UnsupportedOperationException(
"ARM64 architecture is not supported on Linux yet");
} else if (osArch.contains("x86_64") || osArch.contains("amd64")) {
return LINUX_X86;
}
}
if (osName.contains("mac")) {
if (osArch.contains("aarch64") || osArch.contains("arm64")) {
return MACOS_ARM64;