-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
69 lines (58 loc) · 2.55 KB
/
CMakeLists.txt
File metadata and controls
69 lines (58 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
set(CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS TRUE)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
project (lbug_java_api)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
if (JNI_FOUND)
message (STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
message (STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
else()
message (FATAL_ERROR "Java/JNI not found")
endif()
include(UseJava)
file(GLOB JAVA_SRC_FILES src/main/java/com/lbugdb/*.java)
set(CMAKE_JAVA_COMPILE_FLAGS -source 1.8 -target 1.8 -encoding utf-8)
add_jar(lbug_java ${JAVA_SRC_FILES}
OUTPUT_DIR "${PROJECT_SOURCE_DIR}/build"
GENERATE_NATIVE_HEADERS lbug_native_header)
get_target_property(_jarFile lbug_java JAR_FILE)
get_target_property(_classDir lbug_java CLASSDIR)
set (_stubDir "${CMAKE_CURRENT_BINARY_DIR}")
add_library(lbug_java_native SHARED src/jni/lbug_java.cpp)
target_include_directories(lbug_java_native PRIVATE ${JNI_INCLUDE_DIRS} ${_classDir} ${_stubDir})
if(LBUG_API_USE_PRECOMPILED_LIB)
get_filename_component(LBUG_API_PRECOMPILED_LIB_DIR "${LBUG_API_PRECOMPILED_LIB_PATH}" DIRECTORY)
get_filename_component(LBUG_API_PRECOMPILED_PREFIX "${LBUG_API_PRECOMPILED_LIB_DIR}" DIRECTORY)
set(LBUG_API_PRECOMPILED_INCLUDE_DIR "${LBUG_API_PRECOMPILED_PREFIX}/include")
target_include_directories(lbug_java_native PRIVATE
${LBUG_API_PRECOMPILED_LIB_DIR}
${LBUG_API_PRECOMPILED_INCLUDE_DIR}
)
if(WIN32)
target_compile_definitions(lbug_java_native PRIVATE LBUG_STATIC_DEFINE)
endif()
target_link_libraries(lbug_java_native PRIVATE
lbug_native_header
"${LBUG_API_PRECOMPILED_LIB_PATH}"
lbug_link_deps
)
else()
target_link_libraries(lbug_java_native PRIVATE lbug_native_header lbug)
endif()
message(STATUS "OS_NAME=${OS_NAME}")
message(STATUS "OS_ARCH=${OS_ARCH}")
string(JOIN "_" LIB_SUFFIX ".so" ${OS_NAME} ${OS_ARCH})
set_target_properties(lbug_java_native PROPERTIES SUFFIX ${LIB_SUFFIX})
set_target_properties(lbug_java_native PROPERTIES PREFIX "lib")
set_target_properties(lbug_java_native
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build"
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build"
ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/build")
add_custom_command(OUTPUT dummy_jar_target
DEPENDS lbug_java_native lbug_java
COMMAND ${Java_JAR_EXECUTABLE} uf ${_jarFile} -C
$<TARGET_FILE_DIR:lbug_java_native> $<TARGET_FILE_NAME:lbug_java_native>)
add_custom_target(lbug_java_api ALL DEPENDS dummy_jar_target)