From 2a12468b93b9f0681ff1567db8e5ce610346419d Mon Sep 17 00:00:00 2001 From: Amit Prakash Ambasta Date: Mon, 29 May 2017 18:18:00 +0530 Subject: [PATCH] Added cmake support for C++, initial python build support --- CMakeLists.txt | 77 ++++++ cmake/UseSWIG.cmake | 239 ++++++++++++++++++ examples/cpp/CMakeLists.txt | 53 ++++ ortools/CMakeLists.txt | 9 + ortools/algorithms/CMakeLists.txt | 10 + ortools/algorithms/python/CMakeLists.txt | 7 + ortools/base/CMakeLists.txt | 9 + ortools/bop/CMakeLists.txt | 15 ++ ortools/constraint_solver/CMakeLists.txt | 51 ++++ .../constraint_solver/python/CMakeLists.txt | 7 + ortools/glop/CMakeLists.txt | 15 ++ ortools/graph/CMakeLists.txt | 15 ++ ortools/graph/python/CMakeLists.txt | 7 + ortools/linear_solver/CMakeLists.txt | 19 ++ ortools/linear_solver/python/CMakeLists.txt | 7 + ortools/lp_data/CMakeLists.txt | 9 + ortools/sat/CMakeLists.txt | 17 ++ ortools/util/CMakeLists.txt | 9 + 18 files changed, 575 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/UseSWIG.cmake create mode 100644 examples/cpp/CMakeLists.txt create mode 100644 ortools/CMakeLists.txt create mode 100644 ortools/algorithms/CMakeLists.txt create mode 100644 ortools/algorithms/python/CMakeLists.txt create mode 100644 ortools/base/CMakeLists.txt create mode 100644 ortools/bop/CMakeLists.txt create mode 100644 ortools/constraint_solver/CMakeLists.txt create mode 100644 ortools/constraint_solver/python/CMakeLists.txt create mode 100644 ortools/glop/CMakeLists.txt create mode 100644 ortools/graph/CMakeLists.txt create mode 100644 ortools/graph/python/CMakeLists.txt create mode 100644 ortools/linear_solver/CMakeLists.txt create mode 100644 ortools/linear_solver/python/CMakeLists.txt create mode 100644 ortools/lp_data/CMakeLists.txt create mode 100644 ortools/sat/CMakeLists.txt create mode 100644 ortools/util/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..7f807fdfa6 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,77 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 3.8) + +PROJECT(or_tools LANGUAGES CXX) +SET(CMAKE_CXX_STANDARD 17) + +INCLUDE(FindPkgConfig) + +IF(UNIX) + IF(NOT APPLE) + INCLUDE(GNUInstallDirs) + ENDIF() +ENDIF() +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG") + +IF(BUILD_PYTHON) + SET(BUILD_CXX ON) + FIND_PACKAGE(PythonInterp) + FIND_PACKAGE(PythonLibs) + INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) + + IF(PYTHON_VERSION_MAJOR GREATER_EQUAL 3) + SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS};-py3;-DPY3") + ENDIF() + + FIND_PACKAGE(SWIG REQUIRED) + INCLUDE(cmake/UseSWIG.cmake) +ENDIF(BUILD_PYTHON) + +IF(BUILD_CXX) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_GLOP -DUSE_BOP") + + FIND_PACKAGE(Protobuf REQUIRED) + FIND_PACKAGE(Gflags REQUIRED) + + PKG_CHECK_MODULES(CBC cbc) + IF(CBC_FOUND) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CBC_CFLAGS} -DUSE_CBC") + ENDIF(CBC_FOUND) + + PKG_CHECK_MODULES(CLP clp) + IF(CLP_FOUND) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLP_CFLAGS} -DUSE_CLP") + ENDIF(CLP_FOUND) + + INCLUDE_DIRECTORIES(.) + INCLUDE_DIRECTORIES(examples) + INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) + + SET(SUBTARGETS "") + + FOREACH(SUBPROJECT base util lp_data glop graph algorithms sat bop linear_solver constraint_solver) + ADD_SUBDIRECTORY(ortools/${SUBPROJECT}) + LIST(APPEND SUBTARGETS "$") + ENDFOREACH() + + ADD_LIBRARY(${PROJECT_NAME} SHARED ${SUBTARGETS}) + INSTALL(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}_Exports + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + ADD_SUBDIRECTORY(examples/cpp) +ENDIF(BUILD_CXX) + +IF(BUILD_PYTHON) + FOREACH(SUBPROJECT constraint_solver algorithms graph linear_solver) + ADD_SUBDIRECTORY(ortools/${SUBPROJECT}/python) + ENDFOREACH(SUBPROJECT constraint_solver algorithms) +ENDIF(BUILD_PYTHON) + +INSTALL(DIRECTORY ortools + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h") +INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ortools + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.pb.h" + PATTERN CMakeFiles EXCLUDE) \ No newline at end of file diff --git a/cmake/UseSWIG.cmake b/cmake/UseSWIG.cmake new file mode 100644 index 0000000000..7816b51925 --- /dev/null +++ b/cmake/UseSWIG.cmake @@ -0,0 +1,239 @@ +SET(SWIG_CXX_EXTENSION cxx) +SET(SWIG_EXTRA_LIBRARIES "") + +SET(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS .py) +SET(SWIG_JAVA_EXTRA_FILE_EXTENSIONS .java JNI.java) + +MACRO(SWIG_MODULE_INITIALIZE NAME LANGUAGE) + STRING(TOUPPER "${LANGUAGE}" SWIG_UPPERCASE_LANGUAGE) + STRING(TOLOWER "${LANGUAGE}" SWIG_LOWERCASE_LANGUAGE) + + SET(SWIG_MODULE_${NAME}_LANGUAGE ${SWIG_UPPERCASE_LANGUAGE}) + SET(SWIG_MODULE_${NAME}_SWIG_LANGUAGE_FLAG ${SWIG_LOWERCASE_LANGUAGE}) + + SET(SWIG_MODULE_${NAME}_REAL_NAME ${NAME}) + + IF(";${CMAKE_SWIG_FLAGS};" MATCHES ";-noproxy;") + SET(SWIG_MODULE_${NAME}_NOPROXY TRUE) + ENDIF() + + IF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xUNKNOWN") + MESSAGE(FATAL_ERROR "SWIG Error: Language \"${LANGUAGE}\" not found") + ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xPYTHON" AND NOT SWIG_MODULE_${NAME}_NOPROXY) + SET(SWIG_MODULE_${NAME}_REAL_NAME "_${NAME}") + ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xPERL") + SET(SWIG_MODULE_${NAME}_EXTRA_FLAGS "-shadow") + ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xCSHARP") + SET(SWIG_MODULE_${NAME}_EXTRA_FLAGS "-dllimport;${NAME}") + ENDIF() +ENDMACRO() + +MACRO(SWIG_GET_EXTRA_OUTPUT_FILES LANGUAGE OUTFILES GENERATEDPATH INFILE) + SET(${OUTFILES} "") + GET_SOURCE_FILE_PROPERTY(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename ${INFILE} SWIG_MODULE_NAME) + + IF(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND") + IF(EXISTS ${INFILE}) + FILE(STRINGS ${INFILE} _MODULE_NAME REGEX "[ ]*%module[ ]*[a-zA-Z0-9_]+.*") + ENDIF() + + IF(_MODULE_NAME) + STRING(REGEX REPLACE "[ ]*%module[ ]*([a-zA-Z0-9_]+).*" "\\1" _MODULE_NAME "${_MODULE_NAME}") + SET(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${_MODULE_NAME}") + ELSE() + IF(EXISTS ${INFILE}) + FILE(STRINGS ${INFILE} _MODULE_NAME REGEX "[ ]*%module[ ]*\\(.*\\)[ ]*[a-zA-Z0-9_]+.*") + ENDIF() + + IF(_MODULE_NAME) + STRING(REGEX REPLACE "[ ]*%module[ ]*\\(.*\\)[ ]*([a-zA-Z0-9_]+).*" "\\1" _MODULE_NAME "${_MODULE_NAME}") + SET(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${_MODULE_NAME}") + ELSE() + GET_FILENAME_COMPONENT(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename ${INFILE} NAME_WE) + ENDIF() + ENDIF() + ENDIF() + + FOREACH(IT ${SWIG_${LANGUAGE}_EXTRA_FILE_EXTENSIONS}) + SET(${OUTFILES} ${${OUTFILES}} "${GENERATEDPATH}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}${IT}") + ENDFOREACH() +ENDMACRO() + +MACRO(SWIG_ADD_SOURCE_TO_MODULE NAME OUTFILES INFILE) + SET(SWIG_FULL_INFILE ${INFILE}) + GET_FILENAME_COMPONENT(SWIG_SOURCE_FILE_NAME_WE "${INFILE}" NAME_WE) + GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_GENERATED ${INFILE} GENERATED) + GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_CPLUSPLUS ${INFILE} CPLUSPLUS) + GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_FLAGS ${INFILE} SWIG_FLAGS) + + IF("${SWIG_SOURCE_FILE_FLAGS}" STREQUAL "NOTFOUND") + SET(SWIG_SOURCE_FILE_FLAGS "") + ENDIF() + + GET_FILENAME_COMPONENT(SWIG_SOURCE_FILE_FULLNAME "${INFILE}" ABSOLUTE) + + IF(CMAKE_SWIG_OUTDIR) + SET(SWIG_OUTDIR ${CMAKE_SWIG_OUTDIR}) + ELSE() + SET(SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}) + ENDIF() + + IF(SWIG_OUTFILE_DIR) + SET(SWIG_OUTFILE_DIR ${SWIG_OUTFILE_DIR}) + ELSE() + SET(SWIG_OUTFILE_DIR ${SWIG_OUTDIR}) + ENDIF() + + IF(NOT SWIG_MODULE_${NAME}_NOPROXY) + SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${NAME}_LANGUAGE} + SWIG_EXTRA_GENERATED_FILES + "${SWIG_OUTDIR}" "${SWIG_SOURCE_FILE_FULLNAME}") + ENDIF() + + SET(SWIG_GENERATED_FILE_FULLNAME "${SWIG_OUTFILE_DIR}/${SWIG_SOURCE_FILE_NAME_WE}") + STRING(APPEND SWIG_GENERATED_FILE_FULLNAME "${SWIG_MODULE_${NAME}_LANGUAGE}_wrap") + + IF(SWIG_SOURCE_FILE_CPLUSPLUS) + STRING(APPEND SWIG_GENERATED_FILE_FULLNAME ".${SWIG_CXX_EXTENSION}") + ELSE() + STRING(APPEND SWIG_GENERATED_FILE_FULLNAME ".c") + ENDIF() + + GET_DIRECTORY_PROPERTY(CMAKE_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES) + LIST(REMOVE_DUPLICATES CMAKE_INCLUDE_DIRECTORIES) + SET(SWIG_INCLUDE_DIRS) + + FOREACH(IT ${CMAKE_INCLUDE_DIRECTORIES}) + SET(SWIG_INCLUDE_DIRS ${SWIG_INCLUDE_DIRS} "-I${IT}") + ENDFOREACH() + + SET(SWIG_SPECIAL_FLAGS) + + IF(SWIG_SOURCE_FILE_CPLUSPLUS) + SET(SWIG_SPECIAL_FLAGS ${SWIG_SPECIAL_FLAGS} "-c++") + ENDIF() + + SET(SWIG_EXTRA_FLAGS) + + IF(SWIG_MODULE_${NAME}_EXTRA_FLAGS) + SET(SWIG_EXTRA_FLAGS ${SWIG_EXTRA_FLAGS} ${SWIG_MODULE_${NAME}_EXTRA_FLAGS}) + ENDIF() + + ADD_CUSTOM_COMMAND( + OUTPUT "${SWIG_GENERATED_FILE_FULLNAME}" ${SWIG_EXTRA_GENERATED_FILES} + COMMAND ${CMAKE_COMMAND} -E make_directory ${SWIG_OUTDIR} + COMMAND "${SWIG_EXECUTABLE}" + ARGS "-${SWIG_MODULE_${NAME}_SWIG_LANGUAGE_FLAG}" + ${SWIG_SOURCE_FILE_FLAGS} + ${CMAKE_SWIG_FLAGS} + -outdir ${SWIG_OUTDIR} + ${SWIG_SPECIAL_FLAGS} + ${SWIG_EXTRA_FLAGS} + ${SWIG_INCLUDE_DIRS} + -o "${SWIG_GENERATED_FILE_FULLNAME}" + -module "${NAME}" + "${SWIG_SOURCE_FILE_FULLNAME}" + MAIN_DEPENDENCY "${SWIG_SOURCE_FILE_FULLNAME}" + DEPENDS ${SWIG_MODULE_${NAME}_EXTRA_DEPS} + IMPLICIT_DEPENDS CXX "${SWIG_SOURCE_FILE_FULLNAME}" + COMMENT "Swig source") + + SET_SOURCE_FILES_PROPERTIES("${SWIG_GENERATED_FILE_FULLNAME}" + ${SWIG_EXTRA_GENERATED_FILES} PROPERTIES GENERATED TRUE) + + SET(${OUTFILES} "${SWIG_GENERATED_FILE_FULLNAME}" ${SWIG_EXTRA_GENERATED_FILES}) +ENDMACRO() + +MACRO(SWIG_ADD_LIBRARY NAME) + SET(OPTIONS "") + SET(ONEVALUEARGS LANGUAGE TYPE) + SET(MULTIVALUEARGS SOURCES) + + CMAKE_PARSE_ARGUMENTS(_SAM "${OPTIONS}" "${ONEVALUEARGS}" "${MULTIVALUEARGS}" ${ARGN}) + + IF(NOT DEFINED _SAM_LANGUAGE) + MESSAGE(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing LANGUAGE argument") + ENDIF() + + IF(NOT DEFINED _SAM_SOURCES) + MESSAGE(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing SOURCES argument") + ENDIF() + + IF(NOT DEFINED _SAM_TYPE) + SET(_SAM_TYPE MODULE) + ELSEIF("${_SAM_TYPE}" STREQUAL "USE_BUILD_SHARED_LIBS") + UNSET(_SAM_TYPE) + ENDIF() + + SWIG_MODULE_INITIALIZE(${NAME} ${_SAM_LANGUAGE}) + + SET(SWIG_DOT_I_SOURCES) + SET(SWIG_OTHER_SOURCES) + + FOREACH(IT ${_SAM_SOURCES}) + IF(${IT} MATCHES "\\.i$") + SET(SWIG_DOT_I_SOURCES ${SWIG_DOT_I_SOURCES} "${IT}") + ELSE() + SET(SWIG_OTHER_SOURCES ${SWIG_OTHER_SOURCES} "${IT}") + ENDIF() + ENDFOREACH() + + SET(SWIG_GENERATED_SOURCES) + + FOREACH(IT ${SWIG_DOT_I_SOURCES}) + SWIG_ADD_SOURCE_TO_MODULE(${NAME} SWIG_GENERATED_SOURCE ${IT}) + SET(SWIG_GENERATED_SOURCES ${SWIG_GENERATED_SOURCES} "${SWIG_GENERATED_SOURCE}") + ENDFOREACH() + + GET_DIRECTORY_PROPERTY(SWIG_EXTRA_CLEAN_FILES ADDITIONAL_MAKE_CLEAN_FILES) + SET_DIRECTORY_PROPERTIES(PROPERTIES + ADDITIONAL_MAKE_CLEAN_FILES "${SWIG_EXTRA_CLEAN_FILES};${SWIG_GENERATED_SOURCES}") + ADD_LIBRARY(${SWIG_MODULE_${NAME}_REAL_NAME} ${_SAM_TYPE} ${SWIG_GENERATED_SOURCES} ${SWIG_OTHER_SOURCES}) + + IF("${_SAM_TYPE}" STREQUAL "MODULE") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES NO_SONAME ON) + ENDIF() + + STRING(TOLOWER "${_SAM_LANGUAGE}" SWIG_LOWERCASE_LANGUAGE) + + IF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "octave") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".oct") + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "go") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "java") + + IF(APPLE) + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".jnilib") + ENDIF(APPLE) + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "lua") + + IF("${_SAM_TYPE}" STREQUAL "MODULE") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + ENDIF() + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "python") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + + IF(WIN32 AND NOT CYGWIN) + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".pyd") + ENDIF() + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "r") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "ruby") + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + + IF(APPLE) + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".bundle") + ENDIF(APPLE) + ELSE() + SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "") + ENDIF() +ENDMACRO() + +MACRO(SWIG_LINK_LIBRARIES NAME) + IF(SWIG_MODULE_${NAME}_REAL_NAME) + TARGET_LINK_LIBRARIES(${SWIG_MODULE_${NAME}_REAL_NAME} ${ARGN}) + ELSE() + MESSAGE(SEND_ERROR "Can not find Swig library \"${NAME}\".") + ENDIF() +ENDMACRO() \ No newline at end of file diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt new file mode 100644 index 0000000000..deb15024cb --- /dev/null +++ b/examples/cpp/CMakeLists.txt @@ -0,0 +1,53 @@ +ADD_LIBRARY(executable_libs STATIC + cvrptw_lib.cc + parse_dimacs_assignment.cc + fap_model_printer.cc + fap_parser.cc + fap_utilities.cc) + +FOREACH(EXECUTABLE + costas_array + cryptarithm + cvrp_disjoint_tw + cvrptw + cvrptw_with_breaks + cvrptw_with_refueling + cvrptw_with_resources + cvrptw_with_stop_times_and_resources + dimacs_assignment + dobble_ls + flow_api + frequency_assignment_problem + golomb + integer_programming + jobshop + jobshop_earlytardy + jobshop_ls + jobshop_sat + linear_assignment_api + linear_programming + linear_solver_protocol_buffers + ls_api + magic_square + model_util + mps_driver + multidim_knapsack + network_routing + nqueens + pdptw + rcpsp_sat + shift_minimization_sat + solve + sports_scheduling + strawberry_fields_with_column_generation + tsp + weighted_tardiness_sat) + ADD_EXECUTABLE(${EXECUTABLE} ${EXECUTABLE}.cc) + TARGET_LINK_LIBRARIES(${EXECUTABLE} + executable_libs + ${PROJECT_NAME} + ${Protobuf_LIBRARIES} + ${gflags_LIBRARIES} + ${CBC_LIBRARIES}) + INSTALL(TARGETS ${EXECUTABLE} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +ENDFOREACH() \ No newline at end of file diff --git a/ortools/CMakeLists.txt b/ortools/CMakeLists.txt new file mode 100644 index 0000000000..1ef6ed3df8 --- /dev/null +++ b/ortools/CMakeLists.txt @@ -0,0 +1,9 @@ +ENABLE_LANGUAGE(CXX) +ENABLE_LANGUAGE(Python) + +PROJECT(or_tools_algorithms) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/algorithms/CMakeLists.txt b/ortools/algorithms/CMakeLists.txt new file mode 100644 index 0000000000..66aa00e5c4 --- /dev/null +++ b/ortools/algorithms/CMakeLists.txt @@ -0,0 +1,10 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_algorithms) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +LIST(REMOVE_ITEM ${PROJECT_NAME}_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/hungarian_test.cc") + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/algorithms/python/CMakeLists.txt b/ortools/algorithms/python/CMakeLists.txt new file mode 100644 index 0000000000..b6e30b15ac --- /dev/null +++ b/ortools/algorithms/python/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(BUILD_PYTHON) + SET_PROPERTY(SOURCE knapsack_solver.i PROPERTY CPLUSPLUS ON) + SET_PROPERTY(SOURCE knapsack_solver.i PROPERTY SWIG_MODULE_NAME pywrapknapsack_solver) + + SWIG_ADD_LIBRARY(pywrapknapsack_solver TYPE MODULE LANGUAGE python SOURCES knapsack_solver.i) + SWIG_LINK_LIBRARIES(pywrapknapsack_solver ${PROJECT_NAME}) +ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/base/CMakeLists.txt b/ortools/base/CMakeLists.txt new file mode 100644 index 0000000000..6c8b5655f6 --- /dev/null +++ b/ortools/base/CMakeLists.txt @@ -0,0 +1,9 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_base) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/bop/CMakeLists.txt b/ortools/bop/CMakeLists.txt new file mode 100644 index 0000000000..ddd79fc79e --- /dev/null +++ b/ortools/bop/CMakeLists.txt @@ -0,0 +1,15 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_bop) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS bop_parameters.proto) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${PROTO_SRCS}) + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES} ${PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/constraint_solver/CMakeLists.txt b/ortools/constraint_solver/CMakeLists.txt new file mode 100644 index 0000000000..39995b486b --- /dev/null +++ b/ortools/constraint_solver/CMakeLists.txt @@ -0,0 +1,51 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_constraint_solver) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") + +PROTOBUF_GENERATE_CPP(SOLVER_PROTO_SRCS SOLVER_PARAM_HDRS solver_parameters.proto) +PROTOBUF_GENERATE_CPP(MODEL__PROTO_SRCS MODEL__PROTO_HDRS model.proto) +PROTOBUF_GENERATE_CPP(SEARCH_PROTO_SRCS SEARCH_PROTO_HDRS search_limit.proto) +PROTOBUF_GENERATE_CPP(ASSIGN_PROTO_SRCS ASSIGN_PROTO_HDRS assignment.proto) +PROTOBUF_GENERATE_CPP(PROFIL_PROTO_SRCS PROFIL_PROTO_HDRS demon_profiler.proto) +PROTOBUF_GENERATE_CPP(ROUTEN_PROTO_SRCS ROUTEN_PROTO_HDRS routing_enums.proto) +PROTOBUF_GENERATE_CPP(ROUTPA_PROTO_SRCS ROUTPA_PROTO_HDRS routing_parameters.proto) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${SOLVER_PROTO_SRCS} + ${MODEL__PROTO_SRCS} + ${SEARCH_PROTO_SRCS} + ${ASSIGN_PROTO_SRCS} + ${PROFIL_PROTO_SRCS} + ${ROUTEN_PROTO_SRCS} + ${ROUTPA_PROTO_SRCS}) + + +IF(BUILD_PYTHON) + PROTOBUF_GENERATE_PYTHON(PY_ASSIGN_PROTO_SRCS assignment.proto) + PROTOBUF_GENERATE_PYTHON(PY_SEARCH_PROTO_SRCS search_limit.proto) + PROTOBUF_GENERATE_PYTHON(PY_MODEL__PROTO_SRCS model.proto) + PROTOBUF_GENERATE_PYTHON(PY_ROUTEN_PROTO_SRCS routing_enums.proto) + PROTOBUF_GENERATE_PYTHON(PY_SOLVER_PROTO_SRCS solver_parameters.proto) + PROTOBUF_GENERATE_PYTHON(PY_ROUTPA_PROTO_SRCS routing_parameters.proto) +ENDIF(BUILD_PYTHON) + +ADD_LIBRARY(${PROJECT_NAME} + OBJECT + ${${PROJECT_NAME}_SOURCES} + ${SOLVER_PROTO_SRCS} + ${MODEL__PROTO_SRCS} + ${SEARCH_PROTO_SRCS} + ${ASSIGN_PROTO_SRCS} + ${PROFIL_PROTO_SRCS} + ${ROUTEN_PROTO_SRCS} + ${ROUTPA_PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) +ADD_DEPENDENCIES(${PROJECT_NAME} + ForceProtobufGen_${ROOT_PROJECT}_glop + ForceProtobufGen_${ROOT_PROJECT}_linear_solver + ForceProtobufGen_${ROOT_PROJECT}_sat) \ No newline at end of file diff --git a/ortools/constraint_solver/python/CMakeLists.txt b/ortools/constraint_solver/python/CMakeLists.txt new file mode 100644 index 0000000000..304bfa02a0 --- /dev/null +++ b/ortools/constraint_solver/python/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(BUILD_PYTHON) + SET_PROPERTY(SOURCE routing.i PROPERTY CPLUSPLUS ON) + SET_PROPERTY(SOURCE routing.i PROPERTY SWIG_MODULE_NAME pywrapcp) + + SWIG_ADD_LIBRARY(pywrapcp TYPE MODULE LANGUAGE python SOURCES routing.i) + SWIG_LINK_LIBRARIES(pywrapcp ${PROJECT_NAME}) +ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/glop/CMakeLists.txt b/ortools/glop/CMakeLists.txt new file mode 100644 index 0000000000..00b26d72bf --- /dev/null +++ b/ortools/glop/CMakeLists.txt @@ -0,0 +1,15 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(or_tools_glop) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS parameters.proto) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${PROTO_SRCS}) + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES} ${PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/graph/CMakeLists.txt b/ortools/graph/CMakeLists.txt new file mode 100644 index 0000000000..a37430447c --- /dev/null +++ b/ortools/graph/CMakeLists.txt @@ -0,0 +1,15 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_graph) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS flow_problem.proto) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${PROTO_SRCS}) + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES} ${PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/graph/python/CMakeLists.txt b/ortools/graph/python/CMakeLists.txt new file mode 100644 index 0000000000..0962106911 --- /dev/null +++ b/ortools/graph/python/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(BUILD_PYTHON) + SET_PROPERTY(SOURCE graph.i PROPERTY CPLUSPLUS ON) + SET_PROPERTY(SOURCE graph.i PROPERTY SWIG_MODULE_NAME pywrapgraph) + + SWIG_ADD_LIBRARY(pywrapgraph TYPE MODULE LANGUAGE python SOURCES graph.i) + SWIG_LINK_LIBRARIES(pywrapgraph ${PROJECT_NAME}) +ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/linear_solver/CMakeLists.txt b/ortools/linear_solver/CMakeLists.txt new file mode 100644 index 0000000000..cd7edcec2a --- /dev/null +++ b/ortools/linear_solver/CMakeLists.txt @@ -0,0 +1,19 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_linear_solver) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS linear_solver.proto) + +IF(BUILD_PYTHON) + PROTOBUF_GENERATE_PYTHON(PY_PROTO_SRCS linear_solver.proto) +ENDIF(BUILD_PYTHON) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${PROTO_SRCS}) + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES} ${PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/linear_solver/python/CMakeLists.txt b/ortools/linear_solver/python/CMakeLists.txt new file mode 100644 index 0000000000..3ceece33a4 --- /dev/null +++ b/ortools/linear_solver/python/CMakeLists.txt @@ -0,0 +1,7 @@ +IF(BUILD_PYTHON) + SET_PROPERTY(SOURCE linear_solver.i PROPERTY CPLUSPLUS ON) + SET_PROPERTY(SOURCE linear_solver.i PROPERTY SWIG_MODULE_NAME pywraplp) + + SWIG_ADD_LIBRARY(pywraplp TYPE MODULE LANGUAGE python SOURCES linear_solver.i) + SWIG_LINK_LIBRARIES(pywraplp ${PROJECT_NAME}) +ENDIF() \ No newline at end of file diff --git a/ortools/lp_data/CMakeLists.txt b/ortools/lp_data/CMakeLists.txt new file mode 100644 index 0000000000..6762428069 --- /dev/null +++ b/ortools/lp_data/CMakeLists.txt @@ -0,0 +1,9 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_lp_data) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/sat/CMakeLists.txt b/ortools/sat/CMakeLists.txt new file mode 100644 index 0000000000..cc4f335385 --- /dev/null +++ b/ortools/sat/CMakeLists.txt @@ -0,0 +1,17 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_sat) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") +PROTOBUF_GENERATE_CPP(BOOL_PROTO_SRCS BOOL_PROTO_HDRS boolean_problem.proto) +PROTOBUF_GENERATE_CPP(SAT_PROTO_SRCS SAT_PROTO_HDRS sat_parameters.proto) + +ADD_CUSTOM_TARGET(ForceProtobufGen_${PROJECT_NAME} + ALL + DEPENDS + ${BOOL_PROTO_SRCS} + ${SAT_PROTO_SRCS}) + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES} ${BOOL_PROTO_SRCS} ${SAT_PROTO_SRCS}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/ortools/util/CMakeLists.txt b/ortools/util/CMakeLists.txt new file mode 100644 index 0000000000..f22a4a0f3f --- /dev/null +++ b/ortools/util/CMakeLists.txt @@ -0,0 +1,9 @@ +ENABLE_LANGUAGE(CXX) +# ENABLE_LANGUAGE(Python) +SET(ROOT_PROJECT ${PROJECT_NAME}) +PROJECT(${PROJECT_NAME}_util) + +FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") + +ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) +SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) \ No newline at end of file