Files
ortools-clone/cmake/cpp.cmake

121 lines
4.2 KiB
CMake

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
FIND_PACKAGE(gflags ${gflags_VERSION})
IF(BUILD_DEPS)
SET(gflags_FOUND False)
ENDIF()
IF(NOT gflags_FOUND)
MESSAGE(STATUS "Did not find system gflags or forced build. Building as an external project")
INCLUDE(cmake/external/gflags.cmake)
ENDIF()
INCLUDE_DIRECTORIES(${gflags_INCLUDE_DIRS})
FIND_PACKAGE(glog ${glog_VERSION})
IF(BUILD_DEPS)
SET(glog_FOUND False)
ENDIF()
IF(NOT glog_FOUND)
MESSAGE(STATUS "Did not find system glog. Building as an external project.")
INCLUDE(cmake/external/glog.cmake)
ENDIF()
INCLUDE_DIRECTORIES(${glog_INCLUDE_DIRS})
FIND_PACKAGE(Cbc ${Cbc_VERSION})
IF(BUILD_DEPS)
SET(Cbc_FOUND False)
ENDIF()
IF(NOT Cbc_FOUND)
IF(NOT MSVC)
MESSAGE(STATUS "Did not find system coin-cbc. Building as an external project.")
INCLUDE(cmake/external/cbc.cmake)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_CLP -DUSE_CBC")
INCLUDE_DIRECTORIES(${Cbc_INCLUDE_DIRS})
ENDIF()
ELSE()
INCLUDE_DIRECTORIES(${Cbc_INCLUDE_DIRS})
IF(MSVC)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DUSE_CLP /DUSE_CBC")
ELSE()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_CLP -DUSE_CBC")
ENDIF()
ENDIF()
FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ortools/*.proto")
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${proto_files})
ADD_CUSTOM_TARGET(${PROJECT_NAME}ProtoSources ALL DEPENDS ${PROTO_SRCS})
ADD_LIBRARY(${PROJECT_NAME}Proto OBJECT ${PROTO_SRCS} ${PROTO_HDRS})
IF(NOT Cbc_FOUND)
IF(NOT MSVC)
ADD_DEPENDENCIES(${PROJECT_NAME}Proto Cbc)
ENDIF()
ENDIF()
IF(NOT glog_FOUND)
ADD_DEPENDENCIES(${PROJECT_NAME}Proto glog)
ENDIF()
SET_TARGET_PROPERTIES(${PROJECT_NAME}Proto PROPERTIES POSITION_INDEPENDENT_CODE ON)
SET(SUBTARGETS "")
FOREACH(SUBPROJECT base util lp_data glop graph algorithms sat bop linear_solver constraint_solver)
ADD_SUBDIRECTORY(ortools/${SUBPROJECT})
LIST(APPEND SUBTARGETS "$<TARGET_OBJECTS:${PROJECT_NAME}_${SUBPROJECT}>")
ENDFOREACH()
LIST(APPEND SUBTARGETS "$<TARGET_OBJECTS:${PROJECT_NAME}Proto>")
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SUBTARGETS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${Cbc_LIBRARIES}
${gflags_LIBRARIES}
${Protobuf_LIBRARIES}
${glog_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT})
ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}Proto)
ADD_SUBDIRECTORY(examples/cpp)
GENERATE_EXPORT_HEADER(${PROJECT_NAME})
SET_PROPERTY(TARGET ${PROJECT_NAME} PROPERTY VERSION ${PROJECT_VERSION})
SET_PROPERTY(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR})
SET_PROPERTY(TARGET ${PROJECT_NAME} PROPERTY INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
SET_PROPERTY(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION)
INSTALL(TARGETS ${PROJECT_NAME}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
INSTALL(DIRECTORY ortools
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT Devel
FILES_MATCHING PATTERN "*.h")
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ortools
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
COMPONENT Devel
FILES_MATCHING PATTERN "*.pb.h"
PATTERN CMakeFiles EXCLUDE)
WRITE_BASIC_PACKAGE_VERSION_FILE("${CMAKE_CURRENT_BINARY_DIR}/ortools/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
EXPORT(EXPORT ${PROJECT_NAME}Targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/ortools/${PROJECT_NAME}Targets.cmake"
NAMESPACE ${PROJECT_NAME}::)
CONFIGURE_FILE(cmake/${PROJECT_NAME}Config.cmake.in
"${CMAKE_CURRENT_BINARY_DIR}/ortools/${PROJECT_NAME}Config.cmake"
@ONLY)
SET(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME})
INSTALL(EXPORT ${PROJECT_NAME}Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${ConfigPackageLocation})
INSTALL(FILES
"${CMAKE_CURRENT_BINARY_DIR}/ortools/${PROJECT_NAME}Config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/ortools/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${ConfigPackageLocation}
COMPONENT Devel)