From b65c86da8becd63b7cb7bb8cc788627d6e4d2ade Mon Sep 17 00:00:00 2001 From: Mizux Seiha Date: Thu, 22 Sep 2022 18:07:48 +0200 Subject: [PATCH] cmake: Fix java * fix cmake/java.cmake * fix /java/CMakeLists.txt * fix examples/tests/CMakeLists.txt --- cmake/java.cmake | 168 +++++++++--------- examples/tests/CMakeLists.txt | 2 +- ortools/algorithms/java/CMakeLists.txt | 7 + ortools/constraint_solver/java/CMakeLists.txt | 7 + ortools/graph/java/CMakeLists.txt | 7 + ortools/init/java/CMakeLists.txt | 7 + ortools/linear_solver/java/CMakeLists.txt | 7 + ortools/sat/java/CMakeLists.txt | 7 + 8 files changed, 131 insertions(+), 81 deletions(-) diff --git a/cmake/java.cmake b/cmake/java.cmake index a866b54b2e..60dfc1c72f 100644 --- a/cmake/java.cmake +++ b/cmake/java.cmake @@ -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 ## ################### diff --git a/examples/tests/CMakeLists.txt b/examples/tests/CMakeLists.txt index b1f88861ea..e07f3e471c 100644 --- a/examples/tests/CMakeLists.txt +++ b/examples/tests/CMakeLists.txt @@ -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() diff --git a/ortools/algorithms/java/CMakeLists.txt b/ortools/algorithms/java/CMakeLists.txt index ee07ffc6fd..7f0626738f 100644 --- a/ortools/algorithms/java/CMakeLists.txt +++ b/ortools/algorithms/java/CMakeLists.txt @@ -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() diff --git a/ortools/constraint_solver/java/CMakeLists.txt b/ortools/constraint_solver/java/CMakeLists.txt index 97f5dc6727..09e9ba07a4 100644 --- a/ortools/constraint_solver/java/CMakeLists.txt +++ b/ortools/constraint_solver/java/CMakeLists.txt @@ -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() diff --git a/ortools/graph/java/CMakeLists.txt b/ortools/graph/java/CMakeLists.txt index 5d34c6e9cc..73a019f33b 100644 --- a/ortools/graph/java/CMakeLists.txt +++ b/ortools/graph/java/CMakeLists.txt @@ -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() diff --git a/ortools/init/java/CMakeLists.txt b/ortools/init/java/CMakeLists.txt index 326a662ed2..e4eb952b2d 100644 --- a/ortools/init/java/CMakeLists.txt +++ b/ortools/init/java/CMakeLists.txt @@ -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() diff --git a/ortools/linear_solver/java/CMakeLists.txt b/ortools/linear_solver/java/CMakeLists.txt index c35371ccb4..e487b5a80a 100644 --- a/ortools/linear_solver/java/CMakeLists.txt +++ b/ortools/linear_solver/java/CMakeLists.txt @@ -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() diff --git a/ortools/sat/java/CMakeLists.txt b/ortools/sat/java/CMakeLists.txt index 787349d9c0..b400f6c26c 100644 --- a/ortools/sat/java/CMakeLists.txt +++ b/ortools/sat/java/CMakeLists.txt @@ -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()