Added cbc with fallback to locally compiled

This commit is contained in:
Amit Prakash Ambasta
2017-05-31 18:50:57 +05:30
parent 50151907e1
commit 9fbe3e2e33
2 changed files with 48 additions and 36 deletions

View File

@@ -16,7 +16,6 @@ IF(UNIX)
ENDIF()
ENDIF()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG -DUSE_GLOP -DUSE_BOP")
SET(BUILD_CXX ON)
SET(DOWNLOAD_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/downloads"
CACHE PATH "Location where external projects will be downloaded.")
@@ -58,22 +57,23 @@ IF(BUILD_CXX)
SET(GLOG_VERSION 0.3.5)
IF(NOT GLOG_FOUND)
MESSAGE(STATUS "Did not find system glog. Building as an external project ${GLOG_VERSION}")
MESSAGE(STATUS "Did not find system glog. Building as an external project.")
INCLUDE(cmake/external/glog.cmake)
ENDIF()
LIST(APPEND ${PROJECT_NAME}externalLibraries ${GLOG_LIBRARIES})
INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIRS})
SET(CBC_VERSION 2.9.8)
PKG_CHECK_MODULES(CBC cbc)
IF(CBC_FOUND)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CBC_CFLAGS} -DUSE_CBC")
ENDIF(CBC_FOUND)
SET(Cbc_VERSION 2.9.8)
PKG_CHECK_MODULES(Cbc cbc)
SET(Cbc_VERSION 2.9.8)
IF(NOT Cbc_FOUND)
MESSAGE(STATUS "Did not find system coin-cbc. Building as an external Project.")
INCLUDE(cmake/external/cbc.cmake)
ENDIF()
LIST(APPEND ${PROJECT_NAME}externalLibraries ${Cbc_LIBRARIES})
INCLUDE_DIRECTORIES(${Cbc_INCLUDE_DIRS})
PKG_CHECK_MODULES(CLP clp)
IF(CLP_FOUND)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLP_CFLAGS} -DUSE_CLP")
ENDIF(CLP_FOUND)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG -DUSE_GLOP -DUSE_BOP -DUSE_CBC")
FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ortools/*.proto")
SET(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF)
@@ -100,7 +100,6 @@ IF(BUILD_CXX)
ADD_LIBRARY(${PROJECT_NAME} SHARED ${SUBTARGETS})
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${${PROJECT_NAME}externalLibraries}
${CBC_LIBRARIES}
${CMAKE_THREAD_LIBS_INIT})
ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}Proto)

View File

@@ -1,27 +1,40 @@
SET(CBC_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/src)
SET(CBC_URL https://github.com/google/protobuf)
SET(CoinUtils_VERSION 2.10.13)
SET(Osi_VERSION 0.107.8)
SET(Clp_VERSION 1.16.10)
SET(Cgl_VERSION 0.59.9)
IF(WIN32)
SET(CBC_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/libcbc.lib)
ELSE()
SET(CBC_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/libprotobuf.a)
ENDIF()
SET(CoinUtils_URL https://github.com/coin-or/CoinUtils.git)
SET(Osi_URL https://github.com/coin-or/Osi.git)
SET(Clp_URL https://github.com/coin-or/Clp.git)
SET(Cgl_URL https://github.com/coin-or/Cgl.git)
SET(Cbc_URL https://github.com/coin-or/Cbc.git)
ExternalProject_Add(Cbc
PREFIX Cbc
GIT_REPOSITORY ${CBC_URL}
GIT_TAG "v${CBC_VERSION}"
DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
BUILD_IN_SOURCE 1
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf
CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake/
-Dprotobuf_BUILD_TESTS=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
${Protobuf_ADDITIONAL_CMAKE_OPTIONS}
INSTALL_COMMAND ""
CMAKE_CACHE_ARGS
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON)
FOREACH(COIN_PROJECT CoinUtils Osi Clp Cgl Cbc)
IF(WIN32)
SET(${COIN_PROJECT}_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/lib${COIN_PROJECT}.lib)
SET(${COIN_PROJECT}_ADDITIONAL_CMAKE_OPTIONS --enable-msvc)
ELSE()
SET(${COIN_PROJECT}_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/lib${COIN_PROJECT}.a)
ENDIF()
LIST(APPEND ${PROJECT_NAME}externalTargets Protobuf)
SET(${COIN_PROJECT}_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/install/include)
ExternalProject_Add(${COIN_PROJECT}
PREFIX ${COIN_PROJECT}
GIT_REPOSITORY ${${COIN_PROJECT}_URL}
GIT_TAG "releases/${${COIN_PROJECT}_VERSION}"
DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${COIN_PROJECT}/src/${COIN_PROJECT}/configure --enable-static --prefix=${CMAKE_CURRENT_BINARY_DIR}/install CXXFLAGS=${CMAKE_CXX_FLAGS})
ENDFOREACH()
FOREACH(COIN_PROJECT CoinUtils Osi Clp Cgl)
LIST(APPEND Cbc_LIBRARIES ${${COIN_PROJECT}_LIBRARIES})
ENDFOREACH()
ADD_DEPENDENCIES(Osi CoinUtils)
ADD_DEPENDENCIES(Clp CoinUtils Osi)
ADD_DEPENDENCIES(Cgl CoinUtils Osi Clp)
ADD_DEPENDENCIES(Cbc CoinUtils Osi Clp Cgl)
LIST(APPEND ${PROJECT_NAME}externalTargets Cbc)