cmake: Fix java

* fix cmake/java.cmake
* fix <cmp>/java/CMakeLists.txt
* fix examples/tests/CMakeLists.txt
This commit is contained in:
Mizux Seiha
2022-09-22 18:07:48 +02:00
committed by Corentin Le Molgat
parent ddbbd50228
commit b65c86da8b
8 changed files with 131 additions and 81 deletions

View File

@@ -84,23 +84,9 @@ message(STATUS "Java project: ${JAVA_PROJECT}")
set(JAVA_PROJECT_DIR ${PROJECT_BINARY_DIR}/java/${JAVA_PROJECT})
message(STATUS "Java project build path: ${JAVA_PROJECT_DIR}")
# CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO)
#get_target_property(FLAGS ${PROJECT_NAMESPACE}::ortools COMPILE_DEFINITIONS)
set(FLAGS -DUSE_BOP -DUSE_GLOP -DABSL_MUST_USE_RESULT)
if(USE_COINOR)
list(APPEND FLAGS "-DUSE_CBC" "-DUSE_CLP")
endif()
if(USE_GLPK)
list(APPEND FLAGS "-DUSE_GLPK")
endif()
if(USE_PDLP)
list(APPEND FLAGS "-DUSE_PDLP")
endif()
if(USE_SCIP)
list(APPEND FLAGS "-DUSE_SCIP")
endif()
list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}")
##################
## PROTO FILE ##
##################
# Generate Protobuf java sources
set(PROTO_JAVAS)
file(GLOB_RECURSE proto_java_files RELATIVE ${PROJECT_SOURCE_DIR}
@@ -166,10 +152,94 @@ elseif(UNIX)
set_target_properties(jni${JAVA_ARTIFACT} PROPERTIES INSTALL_RPATH "$ORIGIN")
endif()
# Swig wrap all libraries
set(JAVA_SRC_PATH src/main/java/${JAVA_DOMAIN_EXTENSION}/${JAVA_DOMAIN_NAME}/${JAVA_ARTIFACT})
set(JAVA_TEST_PATH src/test/java/${JAVA_DOMAIN_EXTENSION}/${JAVA_DOMAIN_NAME}/${JAVA_ARTIFACT})
set(JAVA_RESSOURCES_PATH src/main/resources)
#################
## Java Test ##
#################
if(BUILD_TESTING)
# add_java_test()
# CMake function to generate and build java test.
# Parameters:
# the java filename
# e.g.:
# add_java_test(FooTests.java)
function(add_java_test FILE_NAME)
message(STATUS "Configuring test ${FILE_NAME}: ...")
get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE)
get_filename_component(WRAPPER_DIR ${FILE_NAME} DIRECTORY)
get_filename_component(COMPONENT_DIR ${WRAPPER_DIR} DIRECTORY)
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
set(JAVA_TEST_DIR ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${TEST_NAME})
message(STATUS "build path: ${JAVA_TEST_DIR}")
add_custom_command(
OUTPUT ${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
COMMAND ${CMAKE_COMMAND} -E make_directory
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}
COMMAND ${CMAKE_COMMAND} -E copy
${FILE_NAME}
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/
MAIN_DEPENDENCY ${FILE_NAME}
VERBATIM
)
string(TOLOWER ${TEST_NAME} JAVA_TEST_PROJECT)
configure_file(
${PROJECT_SOURCE_DIR}/ortools/java/pom-test.xml.in
${JAVA_TEST_DIR}/pom.xml
@ONLY)
add_custom_command(
OUTPUT ${JAVA_TEST_DIR}/timestamp
COMMAND ${MAVEN_EXECUTABLE} compile -B
COMMAND ${CMAKE_COMMAND} -E touch ${JAVA_TEST_DIR}/timestamp
DEPENDS
${JAVA_TEST_DIR}/pom.xml
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
java_package
BYPRODUCTS
${JAVA_TEST_DIR}/target
COMMENT "Compiling Java ${COMPONENT_NAME}/${TEST_NAME}.java (${JAVA_TEST_DIR}/timestamp)"
WORKING_DIRECTORY ${JAVA_TEST_DIR})
add_custom_target(java_${COMPONENT_NAME}_${TEST_NAME} ALL
DEPENDS
${JAVA_TEST_DIR}/timestamp
WORKING_DIRECTORY ${JAVA_TEST_DIR})
add_test(
NAME java_${COMPONENT_NAME}_${TEST_NAME}
COMMAND ${MAVEN_EXECUTABLE} test
WORKING_DIRECTORY ${JAVA_TEST_DIR})
message(STATUS "Configuring test ${FILE_NAME}: ...DONE")
endfunction()
endif()
#####################
## JAVA WRAPPERS ##
#####################
# CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO)
#get_target_property(FLAGS ${PROJECT_NAMESPACE}::ortools COMPILE_DEFINITIONS)
set(FLAGS -DUSE_BOP -DUSE_GLOP -DABSL_MUST_USE_RESULT)
if(USE_COINOR)
list(APPEND FLAGS "-DUSE_CBC" "-DUSE_CLP")
endif()
if(USE_GLPK)
list(APPEND FLAGS "-DUSE_GLPK")
endif()
if(USE_PDLP)
list(APPEND FLAGS "-DUSE_PDLP")
endif()
if(USE_SCIP)
list(APPEND FLAGS "-DUSE_SCIP")
endif()
list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}")
# Swig wrap all libraries
foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat util)
add_subdirectory(ortools/${SUBPROJECT}/java)
target_link_libraries(jni${JAVA_ARTIFACT} PRIVATE jni${SUBPROJECT})
@@ -275,68 +345,6 @@ add_custom_target(java_deploy
WORKING_DIRECTORY ${JAVA_PROJECT_DIR})
add_dependencies(java_deploy java_package)
#################
## Java Test ##
#################
# add_java_test()
# CMake function to generate and build java test.
# Parameters:
# the java filename
# e.g.:
# add_java_test(FooTests.java)
function(add_java_test FILE_NAME)
message(STATUS "Configuring test ${FILE_NAME}: ...")
get_filename_component(TEST_NAME ${FILE_NAME} NAME_WE)
get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY)
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
set(JAVA_TEST_DIR ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${TEST_NAME})
message(STATUS "build path: ${JAVA_TEST_DIR}")
add_custom_command(
OUTPUT ${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
COMMAND ${CMAKE_COMMAND} -E make_directory
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}
COMMAND ${CMAKE_COMMAND} -E copy
${FILE_NAME}
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/
MAIN_DEPENDENCY ${FILE_NAME}
VERBATIM
)
string(TOLOWER ${TEST_NAME} JAVA_TEST_PROJECT)
configure_file(
${PROJECT_SOURCE_DIR}/ortools/java/pom-test.xml.in
${JAVA_TEST_DIR}/pom.xml
@ONLY)
add_custom_command(
OUTPUT ${JAVA_TEST_DIR}/timestamp
COMMAND ${MAVEN_EXECUTABLE} compile -B
COMMAND ${CMAKE_COMMAND} -E touch ${JAVA_TEST_DIR}/timestamp
DEPENDS
${JAVA_TEST_DIR}/pom.xml
${JAVA_TEST_DIR}/${JAVA_TEST_PATH}/${TEST_NAME}.java
java_package
BYPRODUCTS
${JAVA_TEST_DIR}/target
COMMENT "Compiling Java ${COMPONENT_NAME}/${TEST_NAME}.java (${JAVA_TEST_DIR}/timestamp)"
WORKING_DIRECTORY ${JAVA_TEST_DIR})
add_custom_target(java_${COMPONENT_NAME}_${TEST_NAME} ALL
DEPENDS
${JAVA_TEST_DIR}/timestamp
WORKING_DIRECTORY ${JAVA_TEST_DIR})
if(BUILD_TESTING)
add_test(
NAME java_${COMPONENT_NAME}_${TEST_NAME}
COMMAND ${MAVEN_EXECUTABLE} test
WORKING_DIRECTORY ${JAVA_TEST_DIR})
endif()
message(STATUS "Configuring test ${FILE_NAME}: ...DONE")
endfunction()
###################
## Java Sample ##
###################

View File

@@ -19,7 +19,7 @@ endif()
if(BUILD_JAVA_EXAMPLES)
file(GLOB JAVA_SRCS "*.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
add_java_example(${FILE_NAME})
endforeach()
endif()

View File

@@ -28,3 +28,10 @@ set_target_properties(jnialgorithms PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jnialgorithms PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()

View File

@@ -28,3 +28,10 @@ set_target_properties(jniconstraint_solver PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jniconstraint_solver PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()

View File

@@ -28,3 +28,10 @@ set_target_properties(jnigraph PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jnigraph PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()

View File

@@ -28,3 +28,10 @@ set_target_properties(jniinit PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jniinit PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()

View File

@@ -46,3 +46,10 @@ set_target_properties(jnimodelbuilder PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jnimodelbuilder PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()

View File

@@ -28,3 +28,10 @@ set_target_properties(jnisat PROPERTIES
SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON
POSITION_INDEPENDENT_CODE ON)
target_link_libraries(jnisat PRIVATE ortools::ortools)
if(BUILD_TESTING)
file(GLOB JAVA_SRCS "*Test.java")
foreach(FILE_NAME IN LISTS JAVA_SRCS)
add_java_test(${FILE_NAME})
endforeach()
endif()