Files
ortools-clone/cmake/cpp.cmake
2017-06-28 15:45:56 +05:30

83 lines
2.7 KiB
CMake

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
FIND_PACKAGE(gflags ${gflags_VERSION})
IF(NOT gflags_FOUND)
MESSAGE(STATUS "Did not find system gflags. Building as an external project")
INCLUDE(external/gflags.cmake)
ENDIF()
INCLUDE_DIRECTORIES(${gflags_INCLUDE_DIRS})
FIND_PACKAGE(glog ${glog_VERSION})
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(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)
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)
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)