mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-30 20:18:08 +00:00
Make Java build and run tests on Windows the box (#3811)
Incorporate .DLL symbolic link names fix. Make unit tests run. Make gradle run on Windows.
This commit is contained in:
parent
6f95cdfa68
commit
111469728f
4 changed files with 45 additions and 7 deletions
|
|
@ -11,7 +11,6 @@ if (NOT CMAKE_SYSTEM_NAME STREQUAL "Android")
|
|||
find_package(JNI REQUIRED)
|
||||
include_directories(${JNI_INCLUDE_DIRS})
|
||||
endif()
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
|
||||
|
||||
set(JAVA_ROOT ${REPO_ROOT}/java)
|
||||
set(JAVA_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/java)
|
||||
|
|
@ -37,9 +36,13 @@ message(STATUS "Using gradle: ${GRADLE_EXECUTABLE}")
|
|||
file(GLOB_RECURSE onnxruntime4j_gradle_files "${JAVA_ROOT}/*.gradle")
|
||||
file(GLOB_RECURSE onnxruntime4j_src "${JAVA_ROOT}/src/main/java/ai/onnxruntime/*.java")
|
||||
set(JAVA_OUTPUT_JAR ${JAVA_ROOT}/build/libs/onnxruntime.jar)
|
||||
# this jar is solely used to signalling mechanism for dependency management in CMake
|
||||
# this jar is solely used to signaling mechanism for dependency management in CMake
|
||||
# if any of the Java sources change, the jar (and generated headers) will be regenerated and the onnxruntime4j_jni target will be rebuilt
|
||||
add_custom_command(OUTPUT ${JAVA_OUTPUT_JAR} COMMAND ${GRADLE_EXECUTABLE} clean jar WORKING_DIRECTORY ${JAVA_ROOT} DEPENDS ${onnxruntime4j_gradle_files} ${onnxruntime4j_src})
|
||||
set(GRADLE_ARGS clean jar)
|
||||
if(WIN32)
|
||||
set(GRADLE_ARGS ${GRADLE_ARGS} -Dorg.gradle.daemon=false)
|
||||
endif()
|
||||
add_custom_command(OUTPUT ${JAVA_OUTPUT_JAR} COMMAND ${GRADLE_EXECUTABLE} ${GRADLE_ARGS} WORKING_DIRECTORY ${JAVA_ROOT} DEPENDS ${onnxruntime4j_gradle_files} ${onnxruntime4j_src})
|
||||
add_custom_target(onnxruntime4j DEPENDS ${JAVA_OUTPUT_JAR})
|
||||
set_source_files_properties(${JAVA_OUTPUT_JAR} PROPERTIES GENERATED TRUE)
|
||||
set_property(TARGET onnxruntime4j APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${JAVA_OUTPUT_DIR}")
|
||||
|
|
@ -52,6 +55,7 @@ file(GLOB onnxruntime4j_native_src
|
|||
)
|
||||
# Build the JNI library
|
||||
add_library(onnxruntime4j_jni SHARED ${onnxruntime4j_native_src})
|
||||
set_property(TARGET onnxruntime4j_jni PROPERTY CXX_STANDARD 11)
|
||||
|
||||
# Tell the JNI code about the requested providers
|
||||
if (onnxruntime_USE_CUDA)
|
||||
|
|
@ -109,8 +113,14 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Android")
|
|||
file(MAKE_DIRECTORY ${ANDROID_PACKAGE_JNILIBS_DIR})
|
||||
file(MAKE_DIRECTORY ${ANDROID_PACKAGE_ABI_DIR})
|
||||
endif()
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime> ${JAVA_PACKAGE_LIB_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime>)
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime4j_jni> ${JAVA_PACKAGE_JNI_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime4j_jni>)
|
||||
# On Windows TARGET_LINKER_FILE_NAME is the .lib, TARGET_FILE_NAME is the .dll
|
||||
if (WIN32)
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime> ${JAVA_PACKAGE_LIB_DIR}/$<TARGET_FILE_NAME:onnxruntime>)
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime4j_jni> ${JAVA_PACKAGE_JNI_DIR}/$<TARGET_FILE_NAME:onnxruntime4j_jni>)
|
||||
else()
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime> ${JAVA_PACKAGE_LIB_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime>)
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime4j_jni> ${JAVA_PACKAGE_JNI_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime4j_jni>)
|
||||
endif()
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime> ${ANDROID_PACKAGE_ABI_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime>)
|
||||
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink $<TARGET_FILE:onnxruntime4j_jni> ${ANDROID_PACKAGE_ABI_DIR}/$<TARGET_LINKER_FILE_NAME:onnxruntime4j_jni>)
|
||||
|
|
|
|||
14
cmake/onnxruntime_java_unittests.cmake
Normal file
14
cmake/onnxruntime_java_unittests.cmake
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
# Licensed under the MIT License.
|
||||
|
||||
# This is a windows only file so we can run gradle tests via ctest
|
||||
FILE(TO_NATIVE_PATH ${GRADLE_EXECUTABLE} GRADLE_NATIVE_PATH)
|
||||
FILE(TO_NATIVE_PATH ${BIN_DIR} BINDIR_NATIVE_PATH)
|
||||
|
||||
execute_process(COMMAND cmd /C ${GRADLE_NATIVE_PATH} cmakeCheck -DcmakeBuildDir=${BINDIR_NATIVE_PATH} -Dorg.gradle.daemon=false
|
||||
WORKING_DIRECTORY ${REPO_ROOT}/java
|
||||
RESULT_VARIABLE HAD_ERROR)
|
||||
|
||||
if(HAD_ERROR)
|
||||
message(FATAL_ERROR "Java Unitests failed")
|
||||
endif()
|
||||
|
|
@ -795,7 +795,20 @@ set_property(TARGET custom_op_library APPEND_STRING PROPERTY LINK_FLAGS ${ONNXRU
|
|||
if (onnxruntime_BUILD_JAVA)
|
||||
message(STATUS "Running Java tests")
|
||||
# delegate to gradle's test runner
|
||||
add_test(NAME onnxruntime4j_test COMMAND ${GRADLE_EXECUTABLE} cmakeCheck -DcmakeBuildDir=${CMAKE_CURRENT_BINARY_DIR}
|
||||
WORKING_DIRECTORY ${REPO_ROOT}/java)
|
||||
if(WIN32)
|
||||
# On windows ctest requires a test to be an .exe(.com) file
|
||||
# So there are two options 1) Install Chocolatey and its gradle package
|
||||
# That package would install gradle.exe shim to its bin so ctest could run gradle.exe
|
||||
# 2) With standard installation we get gradle.bat. We delegate execution to a separate .cmake file
|
||||
# That can handle both .exe and .bat
|
||||
add_test(NAME onnxruntime4j_test COMMAND ${CMAKE_COMMAND}
|
||||
-DGRADLE_EXECUTABLE=${GRADLE_EXECUTABLE}
|
||||
-DBIN_DIR=${CMAKE_CURRENT_BINARY_DIR}
|
||||
-DREPO_ROOT=${REPO_ROOT}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime_java_unittests.cmake)
|
||||
else()
|
||||
add_test(NAME onnxruntime4j_test COMMAND ${GRADLE_EXECUTABLE} cmakeCheck -DcmakeBuildDir=${CMAKE_CURRENT_BINARY_DIR}
|
||||
WORKING_DIRECTORY ${REPO_ROOT}/java)
|
||||
endif()
|
||||
set_property(TEST onnxruntime4j_test APPEND PROPERTY DEPENDS onnxruntime4j_jni)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -268,6 +268,7 @@ public class OrtSession implements AutoCloseable {
|
|||
/**
|
||||
* Gets the metadata for the currently loaded model.
|
||||
*
|
||||
* @throws OrtException on failure
|
||||
* @return The metadata.
|
||||
*/
|
||||
public OnnxModelMetadata getMetadata() throws OrtException {
|
||||
|
|
|
|||
Loading…
Reference in a new issue