mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-14 20:48:00 +00:00
- Linking onnxruntime with JNI_LIBRARIES includes some unnecessary links to native libraries (e.g. libawt) which are not actually used or required by the output onnx library. This causes unsatisfied link exceptions when trying to load the onnx library without including these libraries.
110 lines
5.4 KiB
CMake
110 lines
5.4 KiB
CMake
# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
|
|
# Licensed under the MIT License.
|
|
|
|
#set(CMAKE_VERBOSE_MAKEFILE on)
|
|
|
|
# Setup Java compilation
|
|
include(FindJava)
|
|
find_package(Java REQUIRED)
|
|
find_package(JNI REQUIRED)
|
|
include(UseJava)
|
|
include_directories(${JNI_INCLUDE_DIRS})
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
|
|
|
|
set(JAVA_ROOT ${REPO_ROOT}/java)
|
|
set(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8" "-encoding" "UTF-8")
|
|
if (onnxruntime_RUN_ONNX_TESTS)
|
|
set(JAVA_DEPENDS onnxruntime ${test_data_target})
|
|
else()
|
|
set(JAVA_DEPENDS onnxruntime)
|
|
endif()
|
|
|
|
# Specify the Java source files
|
|
set(onnxruntime4j_src
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/MapInfo.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/NodeInfo.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxRuntime.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxJavaType.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxMap.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxSequence.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxTensor.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OnnxValue.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OrtAllocator.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OrtEnvironment.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OrtException.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OrtSession.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/OrtUtil.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/package-info.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/SequenceInfo.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/TensorInfo.java
|
|
${REPO_ROOT}/java/src/main/java/ai/onnxruntime/ValueInfo.java
|
|
)
|
|
|
|
# Build the jar and generate the native headers
|
|
add_jar(onnxruntime4j SOURCES ${onnxruntime4j_src} VERSION ${ORT_VERSION} GENERATE_NATIVE_HEADERS onnxruntime4j_generated DESTINATION ${REPO_ROOT}/java/src/main/native/)
|
|
|
|
# Specify the native sources (without the generated headers)
|
|
file(GLOB onnxruntime4j_native_src
|
|
"${REPO_ROOT}/java/src/main/native/*.c"
|
|
"${REPO_ROOT}/java/src/main/native/OrtJniUtil.h"
|
|
"${REPO_ROOT}/include/onnxruntime/core/session/*.h"
|
|
)
|
|
|
|
# Build the JNI library
|
|
add_library(onnxruntime4j_jni SHARED ${onnxruntime4j_native_src} ${onnxruntime4j_generated})
|
|
onnxruntime_add_include_to_target(onnxruntime4j_jni onnxruntime_session)
|
|
target_include_directories(onnxruntime4j_jni PRIVATE ${REPO_ROOT}/include ${REPO_ROOT}/java/src/main/native)
|
|
target_link_libraries(onnxruntime4j_jni PUBLIC onnxruntime onnxruntime4j_generated)
|
|
|
|
# Now the jar, jni binary and shared lib binary have been built, now to build the jar with the binaries added.
|
|
|
|
# This blob creates the new jar name
|
|
get_property(onnxruntime_jar_name TARGET onnxruntime4j PROPERTY JAR_FILE)
|
|
get_filename_component(onnxruntime_jar_abs ${onnxruntime_jar_name} ABSOLUTE)
|
|
get_filename_component(jar_path ${onnxruntime_jar_abs} DIRECTORY)
|
|
set(onnxruntime_jar_binaries_name "${jar_path}/onnxruntime4j-${ORT_VERSION}-with-binaries.jar")
|
|
set(onnxruntime_jar_binaries_platform "$<SHELL_PATH:${onnxruntime_jar_binaries_name}>")
|
|
|
|
# Copy the current jar
|
|
add_custom_command(TARGET onnxruntime4j_jni PRE_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
${onnxruntime_jar_name}
|
|
${onnxruntime_jar_binaries_platform})
|
|
|
|
# Make a temp directory to store the binaries
|
|
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/java-libs/lib")
|
|
|
|
# Copy the binaries
|
|
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:onnxruntime4j_jni>" ${CMAKE_CURRENT_BINARY_DIR}/java-libs/lib/)
|
|
|
|
if (WIN32)
|
|
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:onnxruntime>" ${CMAKE_CURRENT_BINARY_DIR}/java-libs/lib/)
|
|
# Update the with-binaries jar so it includes the binaries
|
|
add_custom_command(
|
|
TARGET onnxruntime4j_jni POST_BUILD
|
|
COMMAND ${Java_JAR_EXECUTABLE} -uf ${onnxruntime_jar_binaries_platform} -C ${CMAKE_CURRENT_BINARY_DIR}/java-libs lib/$<TARGET_FILE_NAME:onnxruntime4j_jni> -C ${CMAKE_CURRENT_BINARY_DIR}/java-libs lib/$<TARGET_FILE_NAME:onnxruntime>
|
|
DEPENDS onnxruntime4j
|
|
COMMENT "Rebuilding Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
|
|
VERBATIM
|
|
)
|
|
else ()
|
|
add_custom_command(TARGET onnxruntime4j_jni POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_LINKER_FILE:onnxruntime>" ${CMAKE_CURRENT_BINARY_DIR}/java-libs/lib/)
|
|
# Update the with-binaries jar so it includes the binaries
|
|
add_custom_command(
|
|
TARGET onnxruntime4j_jni POST_BUILD
|
|
COMMAND ${Java_JAR_EXECUTABLE} -uf ${onnxruntime_jar_binaries_platform} -C ${CMAKE_CURRENT_BINARY_DIR}/java-libs lib/$<TARGET_FILE_NAME:onnxruntime4j_jni> -C ${CMAKE_CURRENT_BINARY_DIR}/java-libs lib/$<TARGET_LINKER_FILE_NAME:onnxruntime>
|
|
DEPENDS onnxruntime4j
|
|
COMMENT "Rebuilding Java archive ${_JAVA_TARGET_OUTPUT_NAME}"
|
|
VERBATIM
|
|
)
|
|
endif()
|
|
|
|
create_javadoc(onnxruntime4j_javadoc
|
|
FILES ${onnxruntime4j_src}
|
|
DOCTITLE "Onnx Runtime Java API"
|
|
WINDOWTITLE "OnnxRuntime-Java-API"
|
|
AUTHOR FALSE
|
|
USE TRUE
|
|
VERSION FALSE
|
|
)
|