2018-11-12 15:35:19 +01:00
|
|
|
if(NOT BUILD_JAVA)
|
|
|
|
|
return()
|
2017-12-11 09:20:43 +01:00
|
|
|
endif()
|
|
|
|
|
|
2021-11-12 01:30:58 +01:00
|
|
|
if(NOT TARGET ${PROJECT_NAMESPACE}::ortools)
|
|
|
|
|
message(FATAL_ERROR "Java: missing ${PROJECT_NAMESPACE}::ortools TARGET")
|
2020-02-12 11:30:15 +01:00
|
|
|
endif()
|
|
|
|
|
|
2020-04-09 17:13:17 +02:00
|
|
|
# Will need swig
|
|
|
|
|
set(CMAKE_SWIG_FLAGS)
|
2017-12-11 09:20:43 +01:00
|
|
|
find_package(SWIG REQUIRED)
|
2020-02-12 11:30:15 +01:00
|
|
|
include(UseSWIG)
|
|
|
|
|
|
2020-02-20 18:40:14 +01:00
|
|
|
if(${SWIG_VERSION} VERSION_GREATER_EQUAL 4)
|
|
|
|
|
list(APPEND CMAKE_SWIG_FLAGS "-doxygen")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
|
|
|
list(APPEND CMAKE_SWIG_FLAGS "-DSWIGWORDSIZE64")
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-05-14 18:01:23 +02:00
|
|
|
# Find Java
|
|
|
|
|
find_package(Java 1.8 COMPONENTS Development REQUIRED)
|
|
|
|
|
find_package(JNI REQUIRED)
|
|
|
|
|
|
|
|
|
|
# Find maven
|
|
|
|
|
# On windows mvn spawn a process while mvn.cmd is a blocking command
|
|
|
|
|
if(UNIX)
|
|
|
|
|
find_program(MAVEN_EXECUTABLE mvn)
|
|
|
|
|
else()
|
|
|
|
|
find_program(MAVEN_EXECUTABLE mvn.cmd)
|
|
|
|
|
endif()
|
|
|
|
|
if(NOT MAVEN_EXECUTABLE)
|
|
|
|
|
message(FATAL_ERROR "Check for maven Program: not found")
|
|
|
|
|
else()
|
|
|
|
|
message(STATUS "Found Maven: ${MAVEN_EXECUTABLE}")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
# Needed by java/CMakeLists.txt
|
|
|
|
|
set(JAVA_PACKAGE com.google.ortools)
|
|
|
|
|
set(JAVA_PACKAGE_PATH src/main/java/com/google/ortools)
|
2020-09-16 14:18:29 +02:00
|
|
|
set(JAVA_TEST_PATH src/test/java/com/google/ortools)
|
2020-05-14 18:01:23 +02:00
|
|
|
set(JAVA_RESOURCES_PATH src/main/resources)
|
|
|
|
|
if(APPLE)
|
2021-04-23 15:52:11 +02:00
|
|
|
set(NATIVE_IDENTIFIER darwin-x86-64)
|
2020-05-14 18:01:23 +02:00
|
|
|
elseif(UNIX)
|
|
|
|
|
set(NATIVE_IDENTIFIER linux-x86-64)
|
|
|
|
|
elseif(WIN32)
|
|
|
|
|
set(NATIVE_IDENTIFIER win32-x86-64)
|
|
|
|
|
else()
|
|
|
|
|
message(FATAL_ERROR "Unsupported system !")
|
|
|
|
|
endif()
|
|
|
|
|
set(JAVA_NATIVE_PROJECT ortools-${NATIVE_IDENTIFIER})
|
|
|
|
|
set(JAVA_PROJECT ortools-java)
|
|
|
|
|
|
|
|
|
|
# CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO)
|
2021-11-12 01:30:58 +01:00
|
|
|
#get_target_property(FLAGS ${PROJECT_NAMESPACE}::ortools COMPILE_DEFINITIONS)
|
2020-08-20 21:23:09 +02:00
|
|
|
set(FLAGS -DUSE_BOP -DUSE_GLOP -DABSL_MUST_USE_RESULT)
|
2020-05-14 18:01:23 +02:00
|
|
|
if(USE_COINOR)
|
2020-08-20 21:23:09 +02:00
|
|
|
list(APPEND FLAGS "-DUSE_CBC" "-DUSE_CLP")
|
2020-05-14 18:01:23 +02:00
|
|
|
endif()
|
2021-11-11 23:53:10 +01:00
|
|
|
if(USE_GLPK)
|
|
|
|
|
list(APPEND FLAGS "-DUSE_GLPK")
|
|
|
|
|
endif()
|
|
|
|
|
if(USE_SCIP)
|
|
|
|
|
list(APPEND FLAGS "-DUSE_SCIP")
|
|
|
|
|
endif()
|
2020-05-14 18:01:23 +02:00
|
|
|
list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}")
|
|
|
|
|
|
2020-02-12 11:30:15 +01:00
|
|
|
# Generate Protobuf java sources
|
|
|
|
|
set(PROTO_JAVAS)
|
|
|
|
|
file(GLOB_RECURSE proto_java_files RELATIVE ${PROJECT_SOURCE_DIR}
|
|
|
|
|
"ortools/constraint_solver/*.proto"
|
|
|
|
|
"ortools/linear_solver/*.proto"
|
|
|
|
|
"ortools/sat/*.proto"
|
|
|
|
|
"ortools/util/*.proto"
|
|
|
|
|
)
|
|
|
|
|
list(REMOVE_ITEM proto_java_files "ortools/constraint_solver/demon_profiler.proto")
|
2020-05-14 18:01:23 +02:00
|
|
|
list(REMOVE_ITEM proto_java_files "ortools/constraint_solver/assignment.proto")
|
2020-10-08 16:16:10 +02:00
|
|
|
foreach(PROTO_FILE IN LISTS proto_java_files)
|
2020-02-12 11:30:15 +01:00
|
|
|
#message(STATUS "protoc proto(java): ${PROTO_FILE}")
|
|
|
|
|
get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY)
|
2020-05-14 18:01:23 +02:00
|
|
|
string(REGEX REPLACE "_" "" PROTO_DIR ${PROTO_DIR})
|
2020-02-12 11:30:15 +01:00
|
|
|
get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE)
|
2020-05-14 18:01:23 +02:00
|
|
|
set(PROTO_OUT ${PROJECT_BINARY_DIR}/java/${JAVA_PROJECT}/src/main/java/com/google/${PROTO_DIR})
|
|
|
|
|
set(PROTO_JAVA ${PROTO_OUT}/${PROTO_NAME}.java)
|
2020-02-12 11:30:15 +01:00
|
|
|
#message(STATUS "protoc java: ${PROTO_JAVA}")
|
|
|
|
|
add_custom_command(
|
|
|
|
|
OUTPUT ${PROTO_JAVA}
|
2020-05-14 18:01:23 +02:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${PROTO_OUT}
|
2021-01-07 22:52:48 +01:00
|
|
|
COMMAND ${PROTOC_PRG}
|
2020-02-12 11:30:15 +01:00
|
|
|
"--proto_path=${PROJECT_SOURCE_DIR}"
|
2020-07-17 11:19:12 +02:00
|
|
|
${PROTO_DIRS}
|
2020-05-14 18:01:23 +02:00
|
|
|
"--java_out=${PROJECT_BINARY_DIR}/java/${JAVA_PROJECT}/src/main/java"
|
2020-02-12 11:30:15 +01:00
|
|
|
${PROTO_FILE}
|
2021-01-07 22:52:48 +01:00
|
|
|
DEPENDS ${PROTO_FILE} ${PROTOC_PRG}
|
2020-03-04 17:46:34 +01:00
|
|
|
COMMENT "Generate Java protocol buffer for ${PROTO_FILE}"
|
2020-02-12 11:30:15 +01:00
|
|
|
VERBATIM)
|
|
|
|
|
list(APPEND PROTO_JAVAS ${PROTO_JAVA})
|
|
|
|
|
endforeach()
|
2021-11-12 01:30:58 +01:00
|
|
|
add_custom_target(Java${PROJECT_NAME}_proto DEPENDS ${PROTO_JAVAS} ${PROJECT_NAMESPACE}::ortools)
|
2020-02-12 11:30:15 +01:00
|
|
|
|
2020-04-15 22:48:58 +02:00
|
|
|
# Create the native library
|
|
|
|
|
add_library(jniortools SHARED "")
|
|
|
|
|
set_target_properties(jniortools PROPERTIES
|
|
|
|
|
POSITION_INDEPENDENT_CODE ON)
|
|
|
|
|
# note: macOS is APPLE and also UNIX !
|
|
|
|
|
if(APPLE)
|
|
|
|
|
set_target_properties(jniortools PROPERTIES INSTALL_RPATH "@loader_path")
|
2020-05-14 18:01:23 +02:00
|
|
|
# Xcode fails to build if library doesn't contains at least one source file.
|
|
|
|
|
if(XCODE)
|
|
|
|
|
file(GENERATE
|
|
|
|
|
OUTPUT ${PROJECT_BINARY_DIR}/jniortools/version.cpp
|
|
|
|
|
CONTENT "namespace {char* version = \"${PROJECT_VERSION}\";}")
|
|
|
|
|
target_sources(jniortools PRIVATE ${PROJECT_BINARY_DIR}/jniortools/version.cpp)
|
|
|
|
|
endif()
|
2020-04-15 22:48:58 +02:00
|
|
|
elseif(UNIX)
|
|
|
|
|
set_target_properties(jniortools PROPERTIES INSTALL_RPATH "$ORIGIN")
|
|
|
|
|
endif()
|
|
|
|
|
|
2020-03-05 11:31:52 +01:00
|
|
|
# Swig wrap all libraries
|
2021-03-21 16:19:12 +01:00
|
|
|
foreach(SUBPROJECT IN ITEMS algorithms graph init linear_solver constraint_solver sat util)
|
2020-04-15 22:48:58 +02:00
|
|
|
add_subdirectory(ortools/${SUBPROJECT}/java)
|
2020-05-14 18:01:23 +02:00
|
|
|
target_link_libraries(jniortools PRIVATE jni${SUBPROJECT})
|
2020-02-12 11:30:15 +01:00
|
|
|
endforeach()
|
|
|
|
|
|
2020-05-14 18:01:23 +02:00
|
|
|
#################################
|
|
|
|
|
## Java Native Maven Package ##
|
|
|
|
|
#################################
|
2020-09-22 23:58:47 +02:00
|
|
|
set(JAVA_NATIVE_PROJECT_PATH ${PROJECT_BINARY_DIR}/java/${JAVA_NATIVE_PROJECT})
|
2021-06-08 11:01:02 +08:00
|
|
|
file(MAKE_DIRECTORY ${JAVA_NATIVE_PROJECT_PATH}/${JAVA_RESOURCES_PATH}/${JAVA_NATIVE_PROJECT})
|
2020-09-22 23:58:47 +02:00
|
|
|
|
2020-05-14 18:01:23 +02:00
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-native.xml.in
|
2020-09-22 23:58:47 +02:00
|
|
|
${JAVA_NATIVE_PROJECT_PATH}/pom.xml
|
2020-05-14 18:01:23 +02:00
|
|
|
@ONLY)
|
2020-02-20 18:40:14 +01:00
|
|
|
|
2020-05-14 18:01:23 +02:00
|
|
|
add_custom_target(java_native_package
|
|
|
|
|
DEPENDS
|
2020-09-22 23:58:47 +02:00
|
|
|
${JAVA_NATIVE_PROJECT_PATH}/pom.xml
|
2020-05-14 18:01:23 +02:00
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
|
|
|
$<TARGET_FILE:jniortools>
|
|
|
|
|
$<$<NOT:$<PLATFORM_ID:Windows>>:$<TARGET_SONAME_FILE:${PROJECT_NAME}>>
|
2021-06-08 11:01:02 +08:00
|
|
|
${JAVA_RESOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2021-10-29 11:53:26 +02:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} package -B $<$<BOOL:${BUILD_FAT_JAR}>:-Dfatjar=true>
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} install -B $<$<BOOL:${SKIP_GPG}>:-Dgpg.skip=true>
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${JAVA_NATIVE_PROJECT_PATH}/target
|
|
|
|
|
WORKING_DIRECTORY ${JAVA_NATIVE_PROJECT_PATH})
|
2020-05-14 18:01:23 +02:00
|
|
|
|
|
|
|
|
##########################
|
|
|
|
|
## Java Maven Package ##
|
|
|
|
|
##########################
|
2020-09-22 23:58:47 +02:00
|
|
|
set(JAVA_PROJECT_PATH ${PROJECT_BINARY_DIR}/java/${JAVA_PROJECT})
|
|
|
|
|
file(MAKE_DIRECTORY ${JAVA_PROJECT_PATH}/${JAVA_PACKAGE_PATH})
|
|
|
|
|
|
2021-03-30 10:45:17 +02:00
|
|
|
if(UNIVERSAL_JAVA_PACKAGE)
|
2021-03-15 21:27:59 +01:00
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-full.xml.in
|
|
|
|
|
${JAVA_PROJECT_PATH}/pom.xml
|
|
|
|
|
@ONLY)
|
|
|
|
|
else()
|
|
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-local.xml.in
|
|
|
|
|
${JAVA_PROJECT_PATH}/pom.xml
|
|
|
|
|
@ONLY)
|
|
|
|
|
endif()
|
2020-05-14 18:01:23 +02:00
|
|
|
|
2020-10-08 16:16:10 +02:00
|
|
|
file(GLOB_RECURSE java_files RELATIVE ${PROJECT_SOURCE_DIR}/ortools/java
|
|
|
|
|
"ortools/java/*.java")
|
|
|
|
|
list(REMOVE_ITEM java_files "CMakeTest.java")
|
|
|
|
|
#message(WARNING "list: ${java_files}")
|
|
|
|
|
|
|
|
|
|
set(JAVA_SRCS)
|
|
|
|
|
foreach(JAVA_FILE IN LISTS java_files)
|
|
|
|
|
#message(STATUS "java: ${JAVA_FILE}")
|
|
|
|
|
set(JAVA_OUT ${JAVA_PROJECT_PATH}/src/main/java/${JAVA_FILE})
|
|
|
|
|
#message(STATUS "java out: ${JAVA_OUT}")
|
|
|
|
|
add_custom_command(
|
|
|
|
|
OUTPUT ${JAVA_OUT}
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/${JAVA_FILE}
|
|
|
|
|
${JAVA_OUT}
|
|
|
|
|
DEPENDS ${PROJECT_SOURCE_DIR}/ortools/java/${JAVA_FILE}
|
|
|
|
|
COMMENT "Copy Java file ${JAVA_FILE}"
|
|
|
|
|
VERBATIM)
|
|
|
|
|
list(APPEND JAVA_SRCS ${JAVA_OUT})
|
|
|
|
|
endforeach()
|
|
|
|
|
|
2020-02-12 11:30:15 +01:00
|
|
|
add_custom_target(java_package ALL
|
2020-02-20 18:40:14 +01:00
|
|
|
DEPENDS
|
2020-09-22 23:58:47 +02:00
|
|
|
${JAVA_PROJECT_PATH}/pom.xml
|
2020-10-08 16:16:10 +02:00
|
|
|
${JAVA_SRCS}
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2021-10-29 11:53:26 +02:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} package -B $<$<BOOL:${BUILD_FAT_JAR}>:-Dfatjar=true>
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} install -B $<$<BOOL:${SKIP_GPG}>:-Dgpg.skip=true>
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${JAVA_PROJECT_PATH}/target
|
|
|
|
|
WORKING_DIRECTORY ${JAVA_PROJECT_PATH})
|
2020-05-14 18:01:23 +02:00
|
|
|
add_dependencies(java_package java_native_package Java${PROJECT_NAME}_proto)
|
2019-04-03 17:26:27 +02:00
|
|
|
|
2020-05-14 18:01:23 +02:00
|
|
|
#################
|
|
|
|
|
## Java Test ##
|
|
|
|
|
#################
|
2019-04-03 17:26:27 +02:00
|
|
|
if(BUILD_TESTING)
|
2020-09-16 14:18:29 +02:00
|
|
|
set(TEST_PATH ${PROJECT_BINARY_DIR}/java/tests/ortools-test)
|
|
|
|
|
file(MAKE_DIRECTORY ${TEST_PATH}/${JAVA_TEST_PATH})
|
2020-09-15 21:54:40 +02:00
|
|
|
|
|
|
|
|
file(COPY ${PROJECT_SOURCE_DIR}/ortools/java/CMakeTest.java
|
2020-09-16 14:18:29 +02:00
|
|
|
DESTINATION ${TEST_PATH}/${JAVA_TEST_PATH})
|
2020-09-15 21:54:40 +02:00
|
|
|
|
|
|
|
|
set(JAVA_TEST_PROJECT ortools-test)
|
2020-05-14 18:01:23 +02:00
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-test.xml.in
|
2020-09-15 21:54:40 +02:00
|
|
|
${TEST_PATH}/pom.xml
|
2020-05-14 18:01:23 +02:00
|
|
|
@ONLY)
|
|
|
|
|
|
2021-10-18 12:57:53 +02:00
|
|
|
add_custom_target(java_tests_Test ALL
|
2020-09-15 21:54:40 +02:00
|
|
|
DEPENDS ${TEST_PATH}/pom.xml
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${TEST_PATH}/target
|
2020-09-15 21:54:40 +02:00
|
|
|
WORKING_DIRECTORY ${TEST_PATH})
|
2021-10-18 12:57:53 +02:00
|
|
|
add_dependencies(java_tests_Test java_package)
|
2020-05-14 18:01:23 +02:00
|
|
|
|
|
|
|
|
add_test(
|
2020-09-17 18:01:22 +02:00
|
|
|
NAME java_tests_Test
|
2020-09-15 21:54:40 +02:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} test
|
|
|
|
|
WORKING_DIRECTORY ${TEST_PATH})
|
2020-07-26 00:06:59 +02:00
|
|
|
endif()
|
2020-09-17 18:01:22 +02:00
|
|
|
|
2021-10-08 17:34:48 +02:00
|
|
|
###################
|
|
|
|
|
## Java Sample ##
|
|
|
|
|
###################
|
2020-09-17 18:01:22 +02:00
|
|
|
# add_java_sample()
|
|
|
|
|
# CMake function to generate and build java sample.
|
|
|
|
|
# Parameters:
|
|
|
|
|
# the java filename
|
|
|
|
|
# e.g.:
|
|
|
|
|
# add_java_sample(Foo.java)
|
|
|
|
|
function(add_java_sample FILE_NAME)
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring sample ${FILE_NAME}: ...")
|
2020-09-17 18:01:22 +02:00
|
|
|
get_filename_component(SAMPLE_NAME ${FILE_NAME} NAME_WE)
|
|
|
|
|
get_filename_component(SAMPLE_DIR ${FILE_NAME} DIRECTORY)
|
|
|
|
|
get_filename_component(COMPONENT_DIR ${SAMPLE_DIR} DIRECTORY)
|
|
|
|
|
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
|
|
|
|
|
string(REPLACE "_" "" COMPONENT_NAME_LOWER ${COMPONENT_NAME})
|
|
|
|
|
|
|
|
|
|
set(SAMPLE_PATH ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${SAMPLE_NAME})
|
|
|
|
|
file(MAKE_DIRECTORY ${SAMPLE_PATH}/${JAVA_PACKAGE_PATH})
|
|
|
|
|
|
2021-10-07 18:44:11 +02:00
|
|
|
add_custom_command(
|
|
|
|
|
OUTPUT ${SAMPLE_PATH}/${JAVA_PACKAGE_PATH}/${SAMPLE_NAME}.java
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${FILE_NAME} ${SAMPLE_PATH}/${JAVA_PACKAGE_PATH}
|
|
|
|
|
MAIN_DEPENDENCY ${FILE_NAME}
|
|
|
|
|
VERBATIM
|
|
|
|
|
)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
string(TOLOWER ${SAMPLE_NAME} JAVA_SAMPLE_PROJECT)
|
|
|
|
|
set(JAVA_MAIN_CLASS
|
|
|
|
|
"${JAVA_PACKAGE}.${COMPONENT_NAME_LOWER}.samples.${SAMPLE_NAME}")
|
|
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-sample.xml.in
|
|
|
|
|
${SAMPLE_PATH}/pom.xml
|
|
|
|
|
@ONLY)
|
|
|
|
|
|
2021-10-07 18:44:11 +02:00
|
|
|
add_custom_target(java_${COMPONENT_NAME}_${SAMPLE_NAME} ALL
|
|
|
|
|
DEPENDS
|
|
|
|
|
${SAMPLE_PATH}/pom.xml
|
|
|
|
|
${SAMPLE_PATH}/${JAVA_PACKAGE_PATH}/${SAMPLE_NAME}.java
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${SAMPLE_PATH}/target
|
2020-09-17 18:01:22 +02:00
|
|
|
WORKING_DIRECTORY ${SAMPLE_PATH})
|
2021-10-08 12:05:35 +02:00
|
|
|
add_dependencies(java_${COMPONENT_NAME}_${SAMPLE_NAME} java_package)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
if(BUILD_TESTING)
|
|
|
|
|
add_test(
|
|
|
|
|
NAME java_${COMPONENT_NAME}_${SAMPLE_NAME}
|
|
|
|
|
COMMAND ${MAVEN_EXECUTABLE} exec:java
|
|
|
|
|
WORKING_DIRECTORY ${SAMPLE_PATH})
|
|
|
|
|
endif()
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring sample ${FILE_NAME}: ...DONE")
|
2020-09-17 18:01:22 +02:00
|
|
|
endfunction()
|
|
|
|
|
|
2021-10-08 17:34:48 +02:00
|
|
|
####################
|
|
|
|
|
## Java Example ##
|
|
|
|
|
####################
|
2020-09-17 18:01:22 +02:00
|
|
|
# add_java_example()
|
2020-09-18 19:57:25 +02:00
|
|
|
# CMake function to generate and build java example.
|
2020-09-17 18:01:22 +02:00
|
|
|
# Parameters:
|
|
|
|
|
# the java filename
|
|
|
|
|
# e.g.:
|
|
|
|
|
# add_java_example(Foo.java)
|
|
|
|
|
function(add_java_example FILE_NAME)
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring example ${FILE_NAME}: ...")
|
2020-09-17 18:01:22 +02:00
|
|
|
get_filename_component(EXAMPLE_NAME ${FILE_NAME} NAME_WE)
|
|
|
|
|
get_filename_component(COMPONENT_DIR ${FILE_NAME} DIRECTORY)
|
|
|
|
|
get_filename_component(COMPONENT_NAME ${COMPONENT_DIR} NAME)
|
|
|
|
|
|
|
|
|
|
set(EXAMPLE_PATH ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${EXAMPLE_NAME})
|
|
|
|
|
file(MAKE_DIRECTORY ${EXAMPLE_PATH}/${JAVA_PACKAGE_PATH})
|
|
|
|
|
|
2021-10-07 18:44:11 +02:00
|
|
|
add_custom_command(
|
|
|
|
|
OUTPUT ${EXAMPLE_PATH}/${JAVA_PACKAGE_PATH}/${EXAMPLE_NAME}.java
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${FILE_NAME} ${EXAMPLE_PATH}/${JAVA_PACKAGE_PATH}
|
|
|
|
|
MAIN_DEPENDENCY ${FILE_NAME}
|
|
|
|
|
VERBATIM
|
|
|
|
|
)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
string(TOLOWER ${EXAMPLE_NAME} JAVA_SAMPLE_PROJECT)
|
|
|
|
|
set(JAVA_MAIN_CLASS
|
|
|
|
|
"${JAVA_PACKAGE}.${COMPONENT_NAME}.${EXAMPLE_NAME}")
|
|
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-sample.xml.in
|
|
|
|
|
${EXAMPLE_PATH}/pom.xml
|
|
|
|
|
@ONLY)
|
|
|
|
|
|
2021-10-18 12:57:53 +02:00
|
|
|
add_custom_target(java_${COMPONENT_NAME}_${EXAMPLE_NAME} ALL
|
2021-10-07 18:44:11 +02:00
|
|
|
DEPENDS
|
|
|
|
|
${EXAMPLE_PATH}/pom.xml
|
|
|
|
|
${EXAMPLE_PATH}/${JAVA_PACKAGE_PATH}/${EXAMPLE_NAME}.java
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${EXAMPLE_PATH}/target
|
2020-09-17 18:01:22 +02:00
|
|
|
WORKING_DIRECTORY ${EXAMPLE_PATH})
|
2021-10-18 12:57:53 +02:00
|
|
|
add_dependencies(java_${COMPONENT_NAME}_${EXAMPLE_NAME} java_package)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
if(BUILD_TESTING)
|
|
|
|
|
add_test(
|
|
|
|
|
NAME java_${COMPONENT_NAME}_${EXAMPLE_NAME}
|
|
|
|
|
COMMAND ${MAVEN_EXECUTABLE} exec:java
|
|
|
|
|
WORKING_DIRECTORY ${EXAMPLE_PATH})
|
|
|
|
|
endif()
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring example ${FILE_NAME}: ...DONE")
|
2020-09-17 18:01:22 +02:00
|
|
|
endfunction()
|
|
|
|
|
|
2021-10-08 17:34:48 +02:00
|
|
|
#################
|
|
|
|
|
## Java Test ##
|
|
|
|
|
#################
|
2020-09-17 18:01:22 +02:00
|
|
|
# add_java_test()
|
2020-09-18 19:57:25 +02:00
|
|
|
# CMake function to generate and build java test.
|
2020-09-17 18:01:22 +02:00
|
|
|
# Parameters:
|
|
|
|
|
# the java filename
|
|
|
|
|
# e.g.:
|
|
|
|
|
# add_java_test(Foo.java)
|
|
|
|
|
function(add_java_test FILE_NAME)
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring test ${FILE_NAME}: ...")
|
2020-09-17 18:01:22 +02:00
|
|
|
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(TEST_PATH ${PROJECT_BINARY_DIR}/java/${COMPONENT_NAME}/${TEST_NAME})
|
|
|
|
|
file(MAKE_DIRECTORY ${TEST_PATH}/${JAVA_TEST_PATH})
|
|
|
|
|
|
2021-10-07 18:44:11 +02:00
|
|
|
add_custom_command(
|
|
|
|
|
OUTPUT ${TEST_PATH}/${JAVA_TEST_PATH}/${TEST_NAME}.java
|
|
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${FILE_NAME} ${TEST_PATH}/${JAVA_TEST_PATH}
|
|
|
|
|
MAIN_DEPENDENCY ${FILE_NAME}
|
|
|
|
|
VERBATIM
|
|
|
|
|
)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
string(TOLOWER ${TEST_NAME} JAVA_TEST_PROJECT)
|
|
|
|
|
configure_file(
|
|
|
|
|
${PROJECT_SOURCE_DIR}/ortools/java/pom-test.xml.in
|
|
|
|
|
${TEST_PATH}/pom.xml
|
|
|
|
|
@ONLY)
|
|
|
|
|
|
2021-10-18 12:57:53 +02:00
|
|
|
add_custom_target(java_${COMPONENT_NAME}_${TEST_NAME} ALL
|
2021-10-07 18:44:11 +02:00
|
|
|
DEPENDS
|
|
|
|
|
${TEST_PATH}/pom.xml
|
|
|
|
|
${TEST_PATH}/${JAVA_TEST_PATH}/${TEST_NAME}.java
|
2021-03-10 11:41:15 +01:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} compile -B
|
2020-09-22 23:58:47 +02:00
|
|
|
BYPRODUCTS
|
|
|
|
|
${TEST_PATH}/target
|
2020-09-17 18:01:22 +02:00
|
|
|
WORKING_DIRECTORY ${TEST_PATH})
|
2021-10-18 12:57:53 +02:00
|
|
|
add_dependencies(java_${COMPONENT_NAME}_${TEST_NAME} java_package)
|
2020-09-17 18:01:22 +02:00
|
|
|
|
|
|
|
|
if(BUILD_TESTING)
|
|
|
|
|
add_test(
|
2020-09-22 14:52:43 +02:00
|
|
|
NAME java_${COMPONENT_NAME}_${TEST_NAME}
|
2020-09-17 18:01:22 +02:00
|
|
|
COMMAND ${MAVEN_EXECUTABLE} test
|
|
|
|
|
WORKING_DIRECTORY ${TEST_PATH})
|
|
|
|
|
endif()
|
2021-09-17 15:13:11 +02:00
|
|
|
message(STATUS "Configuring test ${FILE_NAME}: ...DONE")
|
2020-09-17 18:01:22 +02:00
|
|
|
endfunction()
|