diff --git a/cmake/onnxruntime_java.cmake b/cmake/onnxruntime_java.cmake index d29224b518..edc6c91fe5 100644 --- a/cmake/onnxruntime_java.cmake +++ b/cmake/onnxruntime_java.cmake @@ -100,13 +100,31 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Android") file(MAKE_DIRECTORY ${ANDROID_PACKAGE_OUTPUT_DIR}) endif() -# Set platform and ach for packaging +# Set platform and arch for packaging +# Checks the names set by MLAS on non-Windows platforms first if (CMAKE_SYSTEM_NAME STREQUAL "Android") set(JNI_ARCH ${ANDROID_ABI}) -elseif (CMAKE_SIZEOF_VOID_P EQUAL "8") +elseif (ARM64) + set(JNI_ARCH aarch64) +elseif (X86_64) set(JNI_ARCH x64) +elseif (POWER) + set(JNI_ARCH ppc64) else() - message(FATAL_ERROR "Java is currently not supported for x86 architecture") + # Now mirror the checks used with MSVC + if(MSVC) + if(onnxruntime_target_platform STREQUAL "ARM64") + set(JNI_ARCH aarch64) + elseif(onnxruntime_target_platform STREQUAL "x64") + set(JNI_ARCH x64) + else() + # if everything else failed then we're on a 32-bit arch and Java isn't supported + message(FATAL_ERROR "Java is currently not supported on 32-bit x86 architecture") + endif() + else() + # if everything else failed then we're on a 32-bit arch and Java isn't supported + message(FATAL_ERROR "Java is currently not supported on 32-bit x86 architecture") + endif() endif() if (WIN32) diff --git a/cmake/onnxruntime_mlas.cmake b/cmake/onnxruntime_mlas.cmake index ebf3e199ce..40afbfe11b 100644 --- a/cmake/onnxruntime_mlas.cmake +++ b/cmake/onnxruntime_mlas.cmake @@ -151,7 +151,9 @@ else() OUTPUT_VARIABLE dumpmachine_output ERROR_QUIET ) - if(dumpmachine_output MATCHES "^arm.*") + if(dumpmachine_output MATCHES "^arm64.*") + set(ARM64 TRUE) + elseif(dumpmachine_output MATCHES "^arm.*") set(ARM TRUE) elseif(dumpmachine_output MATCHES "^aarch64.*") set(ARM64 TRUE) diff --git a/java/src/main/java/ai/onnxruntime/OnnxRuntime.java b/java/src/main/java/ai/onnxruntime/OnnxRuntime.java index 3078493d86..1f972fadc0 100644 --- a/java/src/main/java/ai/onnxruntime/OnnxRuntime.java +++ b/java/src/main/java/ai/onnxruntime/OnnxRuntime.java @@ -59,10 +59,15 @@ final class OnnxRuntime { } String detectedArch = null; String arch = System.getProperty("os.arch", "generic").toLowerCase(Locale.ENGLISH); - if (arch.indexOf("amd64") == 0 || arch.indexOf("x86_64") == 0) { + if (arch.startsWith("amd64") || arch.startsWith("x86_64")) { detectedArch = "x64"; - } else if (arch.indexOf("x86") == 0) { + } else if (arch.startsWith("x86")) { + // 32-bit x86 is not supported by the Java API detectedArch = "x86"; + } else if (arch.startsWith("aarch64")) { + detectedArch = "aarch64"; + } else if (arch.startsWith("ppc64")) { + detectedArch = "ppc64"; } else if (isAndroid()) { detectedArch = arch; } else { diff --git a/onnxruntime/core/mlas/lib/aarch64/QgemmU8X8KernelNeon.S b/onnxruntime/core/mlas/lib/aarch64/QgemmU8X8KernelNeon.S index d1dad123ff..6f1d7f9ec5 100644 --- a/onnxruntime/core/mlas/lib/aarch64/QgemmU8X8KernelNeon.S +++ b/onnxruntime/core/mlas/lib/aarch64/QgemmU8X8KernelNeon.S @@ -23,7 +23,11 @@ Abstract: .equ .LGemmU8X8KernelFrame_ColumnSumBuffer, 0 .equ .LGemmU8X8KernelFrame_DepthValue, 8 +#if defined(__APPLE__) + .equ .LGemmU8X8KernelFrame_ZeroMode, 12 +#else .equ .LGemmU8X8KernelFrame_ZeroMode, 16 +#endif .text