diff --git a/CMakeLists.txt b/CMakeLists.txt index b1c7f22c79..2c51fcd116 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) diff --git a/cmake/external/cbc.cmake b/cmake/external/cbc.cmake index e784cbe5a5..7e80500164 100644 --- a/cmake/external/cbc.cmake +++ b/cmake/external/cbc.cmake @@ -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) \ No newline at end of file + 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) \ No newline at end of file