create regress_simple for JavaScript
[liba.git] / java / CMakeLists.txt
blobfa5fb054f585d3bf42314bd82d1b71464ae7267b
1 include(UseJava) # https://cmake.org/cmake/help/latest/module/UseJava.html
2 set(CMAKE_SHARED_MODULE_SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
4 if(WIN32)
5   set(CMAKE_SHARED_MODULE_PREFIX "")
6 endif()
8 set(CMAKE_JNI_TARGET TRUE)
9 file(GLOB_RECURSE SOURCES src/*.java)
10 add_jar(ajar GENERATE_NATIVE_HEADERS ajar_native
11   DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/include
12   SOURCES ${SOURCES} OUTPUT_NAME liba
15 if(CMAKE_VERSION VERSION_LESS 3.11)
16   if(WIN32)
17     set(sep ";")
18   else()
19     set(sep ":")
20   endif()
22   add_custom_command(TARGET ajar POST_BUILD
23     COMMAND ${Java_JAVAC_EXECUTABLE} -classpath ${sep}${CMAKE_CURRENT_SOURCE_DIR}${sep}${CMAKE_CURRENT_BINARY_DIR}
24       -d ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ajar.dir -h ${CMAKE_CURRENT_LIST_DIR}/include
25       @${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/ajar.dir/java_sources
26     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
27   )
28 else()
29   add_custom_command(TARGET ajar POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory
30     ${CMAKE_CURRENT_BINARY_DIR}/include ${CMAKE_CURRENT_LIST_DIR}/include
31   )
32 endif()
34 option(LIBA_JAVADOC "Enable/Disable ffi javadoc" 0)
36 if(LIBA_JAVADOC)
37   create_javadoc(${PROJECT_NAME} FILES ${SOURCES}
38     INSTALLPATH ${CMAKE_INSTALL_DATADIR}/javadoc
39   )
40   add_dependencies(adoc ${PROJECT_NAME}_javadoc)
41 endif()
43 if(LIBA_FLOAT EQUAL 8)
44   set(OBJECTS $<TARGET_OBJECTS:a>)
45 else()
46   get_property(OBJECTS TARGET a PROPERTY SOURCES)
47 endif()
49 if(LIBA_CXX)
50   file_scaner(SOURCES RECURSE src EXT c h cc hh cpp hpp)
51 else()
52   file_scaner(SOURCES RECURSE src EXT c h)
53 endif()
55 add_library(ajni MODULE ${OBJECTS} ${SOURCES})
56 set_target_properties(ajni PROPERTIES DEFINE_SYMBOL A_EXPORTS OUTPUT_NAME a)
57 add_library_properties(ajni PRIVATE alib)
58 set_library_options(ajni)
60 if(CMAKE_VERSION VERSION_LESS 3.11)
61   target_include_directories(ajni PRIVATE
62     ${CMAKE_CURRENT_LIST_DIR}/include ${JNI_INCLUDE_DIRS}
63   )
64 else()
65   target_link_libraries(ajni PRIVATE ajar_native)
66 endif()
68 if(NOT LIBA_FLOAT EQUAL 8)
69   target_compile_definitions(ajni PRIVATE A_SIZE_FLOAT=8)
70 endif()
72 if("${LIBA_INSTALL}" MATCHES "^$|[Jj]ava")
73   install_jar(ajar ${CMAKE_INSTALL_DATADIR}/java)
74   install(TARGETS ajni
75     ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/jni
76     LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/jni
77     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
78   )
79 endif()
81 execute_process(COMMAND ${Java_JAVA_EXECUTABLE} -version
82   OUTPUT_VARIABLE version ERROR_VARIABLE version
84 string(FIND "${version}" "64-Bit" found)
86 if(${found} GREATER -1)
87   set(JAVA_SIZEOF_VOID_P 8) # 64
88 else()
89   set(JAVA_SIZEOF_VOID_P 4) # 32
90 endif()
92 if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/test/CMakeLists.txt AND
93   CMAKE_SIZEOF_VOID_P EQUAL JAVA_SIZEOF_VOID_P AND BUILD_TESTING)
94   get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
96   if(NOT CMAKE_VERSION VERSION_LESS 3.0)
97     set(WORKING_DIRECTORY $<TARGET_FILE_DIR:ajni>)
98   elseif(IS_MULTI_CONFIG)
99     set(WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
100   else()
101     set(WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
102   endif()
104   file(GLOB_RECURSE SOURCES src/*.java)
105   add_subdirectory(test)
106 endif()