diff --git a/CMakeLists.txt b/CMakeLists.txt index 478d8e7cd4..37a511ae80 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,13 +17,11 @@ IF(UNIX) ENDIF() SET(BUILD_CXX ON) -SET(DOWNLOAD_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/downloads" - CACHE PATH "Location where external projects will be downloaded.") +SET(DOWNLOAD_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE PATH "Location where external projects will be downloaded.") MARK_AS_ADVANCED(BUILD_CXX) MARK_AS_ADVANCED(DOWNLOAD_LOCATION) -SET(${PROJECT_NAME}externalLibraries "") SET(${PROJECT_NAME}externalTargets "") FILE(READ ${CMAKE_CURRENT_SOURCE_DIR}/Dependencies.txt _Dependency_file) @@ -38,9 +36,7 @@ IF(BUILD_CXX) IF(NOT Protobuf_FOUND) MESSAGE(STATUS "Did not find system protobuff. Building as an external project") INCLUDE(cmake/external/protobuf.cmake) - LIST(APPEND ${PROJECT_NAME}externalLibraries ${Protobuf_STATIC_LIBRARIES}) ENDIF() - LIST(APPEND ${PROJECT_NAME}externalLibraries ${Protobuf_LIBRARIES}) INCLUDE_DIRECTORIES(${Protobuf_INCLUDE_DIRS}) FIND_PACKAGE(Gflags ${Gflags_VERSION} QUIET) @@ -48,7 +44,6 @@ IF(BUILD_CXX) MESSAGE(STATUS "Did not find system gflags. Building as an external project") INCLUDE(cmake/external/gflags.cmake) ENDIF() - LIST(APPEND ${PROJECT_NAME}externalLibraries ${Gflags_LIBRARIES}) INCLUDE_DIRECTORIES(${Gflags_INCLUDE_DIRS}) SET(GLOG_VERSION ${Glog_VERSION}) @@ -59,7 +54,6 @@ IF(BUILD_CXX) 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 ${cbc_VERSION}) @@ -69,7 +63,6 @@ IF(BUILD_CXX) 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}) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG -DUSE_GLOP -DUSE_BOP -DUSE_CBC -DUSE_CLP") @@ -95,10 +88,12 @@ IF(BUILD_CXX) LIST(APPEND SUBTARGETS "$") - MESSAGE(STATUS "Libraries : ${${PROJECT_NAME}externalLibraries}") ADD_LIBRARY(${PROJECT_NAME} SHARED ${SUBTARGETS}) TARGET_LINK_LIBRARIES(${PROJECT_NAME} - ${${PROJECT_NAME}externalLibraries} + ${Cbc_LIBRARIES} + ${Gflags_LIBRARIES} + ${Protobuf_LIBRARIES} + ${GLOG_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}Proto) @@ -116,4 +111,4 @@ INSTALL(DIRECTORY ortools 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 + PATTERN CMakeFiles EXCLUDE) diff --git a/cmake/external/cbc.cmake b/cmake/external/cbc.cmake index e02de5f2cf..bd92e555a2 100644 --- a/cmake/external/cbc.cmake +++ b/cmake/external/cbc.cmake @@ -1,29 +1,47 @@ +SET(ADD_CXXFLAGS "-DCBC_THREAD_SAFE -DCBC_NO_INTERRUPT") + FOREACH(COIN_PROJECT CoinUtils Osi Clp Cgl Cbc) SET(${COIN_PROJECT}_URL https://github.com/coin-or/${COIN_PROJECT}.git) SET(${COIN_PROJECT}_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/install/include) - ExternalProject_Add(${COIN_PROJECT} + ExternalProject_Add(${COIN_PROJECT}_project PREFIX ${COIN_PROJECT} GIT_REPOSITORY ${${COIN_PROJECT}_URL} GIT_TAG "releases/${${COIN_PROJECT}_VERSION}" DOWNLOAD_DIR "${DOWNLOAD_LOCATION}" + UPDATE_COMMAND "" BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${COIN_PROJECT}/src/${COIN_PROJECT}/configure - --disable-bzlib --without-lapack --with-pic --enable-static --prefix=${CMAKE_CURRENT_BINARY_DIR}/install CXXFLAGS=${CMAKE_CXX_FLAGS}) - LIST(APPEND Cbc_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/lib${COIN_PROJECT}.a) + CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${COIN_PROJECT}/src/${COIN_PROJECT}_project/configure + --disable-bzlib --without-lapack --with-pic --enable-static --prefix=${CMAKE_CURRENT_BINARY_DIR}/install + ADD_CXXFLAGS=${ADD_CXXFLAGS}) + + ADD_LIBRARY(${COIN_PROJECT} STATIC IMPORTED) + SET_PROPERTY(TARGET ${COIN_PROJECT} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/install/lib/lib${COIN_PROJECT}.a) + + IF (${COIN_PROJECT} STREQUAL "Cbc" OR ${COIN_PROJECT} STREQUAL "Clp") + ADD_LIBRARY(Osi${COIN_PROJECT} STATIC IMPORTED) + SET_PROPERTY(TARGET Osi${COIN_PROJECT} PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/install/lib/libOsi${COIN_PROJECT}.a) + ADD_LIBRARY(${COIN_PROJECT}Solver STATIC IMPORTED) + SET_PROPERTY(TARGET ${COIN_PROJECT}Solver PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/install/lib/lib${COIN_PROJECT}Solver.a) + ENDIF() + + ADD_DEPENDENCIES(${COIN_PROJECT} ${COIN_PROJECT}_project) ENDFOREACH() -# Generated by Clp -LIST(APPEND Cbc_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/libOsiClp.a) -LIST(APPEND Cbc_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/libClpSolver.a) +ADD_DEPENDENCIES(Osi_project CoinUtils_project) +ADD_DEPENDENCIES(Clp_project Osi_project) +ADD_DEPENDENCIES(Cgl_project Clp_project) +ADD_DEPENDENCIES(Cbc_project Cgl_project) -# Generated by Cbc -LIST(APPEND Cbc_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/libCbcSolver.a) -LIST(APPEND Cbc_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/install/lib/libOsiCbc.a) - -ADD_DEPENDENCIES(Osi CoinUtils) -ADD_DEPENDENCIES(Clp CoinUtils Osi) -ADD_DEPENDENCIES(Cgl CoinUtils Osi Clp) -ADD_DEPENDENCIES(Cbc CoinUtils Osi Clp Cgl) +SET_PROPERTY(TARGET Osi PROPERTY INTERFACE_LINK_LIBRARIES CoinUtils) +SET_PROPERTY(TARGET Clp PROPERTY INTERFACE_LINK_LIBRARIES Osi) +SET_PROPERTY(TARGET OsiClp PROPERTY INTERFACE_LINK_LIBRARIES Clp) +SET_PROPERTY(TARGET ClpSolver PROPERTY INTERFACE_LINK_LIBRARIES Clp) +SET_PROPERTY(TARGET Cgl PROPERTY INTERFACE_LINK_LIBRARIES Clp) +SET_PROPERTY(TARGET Cbc PROPERTY INTERFACE_LINK_LIBRARIES Cgl) +SET_PROPERTY(TARGET OsiCbc PROPERTY INTERFACE_LINK_LIBRARIES Cbc) +SET_PROPERTY(TARGET CbcSolver PROPERTY INTERFACE_LINK_LIBRARIES Cbc) LIST(APPEND ${PROJECT_NAME}externalTargets Cbc) +SET(Cbc_LIBRARIES "") +LIST(APPEND Cbc_LIBRARIES Cbc OsiCbc CbcSolver ClpSolver OsiClp) diff --git a/cmake/external/gflags.cmake b/cmake/external/gflags.cmake index f90a64ca72..625a374d5c 100644 --- a/cmake/external/gflags.cmake +++ b/cmake/external/gflags.cmake @@ -1,14 +1,14 @@ -SET(Gflags_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags/include/) +SET(Gflags_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/gflags_project/src/gflags/include/) SET(Gflags_URL https://github.com/gflags/gflags) -SET(Gflags_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags/lib/libgflags.a) -ExternalProject_Add(Gflags +ExternalProject_Add(Gflags_project PREFIX Gflags GIT_REPOSITORY ${Gflags_URL} GIT_TAG "v${Gflags_VERSION}" DOWNLOAD_DIR "${DOWNLOAD_LOCATION}" + UPDATE_COMMAND "" BUILD_IN_SOURCE 1 - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags_project/src/gflags CONFIGURE_COMMAND ${CMAKE_COMMAND} -DBUILD_STATIC_LIBS=ON -DBUILD_TESTING=OFF @@ -20,4 +20,7 @@ ExternalProject_Add(Gflags -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON) -LIST(APPEND ${PROJECT_NAME}externalTargets Gflags) \ No newline at end of file +ADD_LIBRARY(Gflags STATIC IMPORTED) +SET_PROPERTY(TARGET Gflags PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/gflags_project/src/gflags/lib/libgflags.a) +SET(Gflags_LIBRARIES "") +LIST(APPEND Gflags_LIBRARIES Gflags) diff --git a/cmake/external/glog.cmake b/cmake/external/glog.cmake index 1ede7a31de..ecfb2e3693 100644 --- a/cmake/external/glog.cmake +++ b/cmake/external/glog.cmake @@ -1,15 +1,15 @@ -SET(GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog/) -LIST(APPEND GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog/src/) +SET(GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/glog_project/src/glog/) +LIST(APPEND GLOG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/glog_project/src/glog/src/) SET(GLOG_URL https://github.com/google/glog) -SET(GLOG_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog/libglog.a) -ExternalProject_Add(Glog +ExternalProject_Add(Glog_project PREFIX Glog GIT_REPOSITORY ${GLOG_URL} GIT_TAG "v${GLOG_VERSION}" DOWNLOAD_DIR "${DOWNLOAD_LOCATION}" + UPDATE_COMMAND "" BUILD_IN_SOURCE 1 - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog_project/src/glog CONFIGURE_COMMAND ${CMAKE_COMMAND} -DBUILD_TESTING=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON @@ -20,4 +20,7 @@ ExternalProject_Add(Glog -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON) -LIST(APPEND ${PROJECT_NAME}externalTargets Glog) \ No newline at end of file +ADD_LIBRARY(GLOG STATIC IMPORTED) +SET_PROPERTY(TARGET GLOG PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/glog_project/src/glog/libglog.a) +SET(GLOG_LIBRARIES "") +LIST(APPEND GLOG_LIBRARIES GLOG) diff --git a/cmake/external/protobuf.cmake b/cmake/external/protobuf.cmake index 5d5602a783..596659780d 100644 --- a/cmake/external/protobuf.cmake +++ b/cmake/external/protobuf.cmake @@ -1,18 +1,16 @@ FIND_PACKAGE(ZLIB REQUIRED) -SET(Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/src) +SET(Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/protobuf_project/src/protobuf/src) SET(Protobuf_URL https://github.com/google/protobuf) -SET(Protobuf_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/libprotobuf.a) -LIST(APPEND Protobuf_LIBRARIES ${ZLIB_LIBRARIES}) -SET(Protobuf_PROTOC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/protoc) -ExternalProject_Add(Protobuf +ExternalProject_Add(Protobuf_project PREFIX Protobuf GIT_REPOSITORY ${Protobuf_URL} GIT_TAG "v${Protobuf_VERSION}" DOWNLOAD_DIR "${DOWNLOAD_LOCATION}" + UPDATE_COMMAND "" BUILD_IN_SOURCE 1 - SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf + SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/protobuf_project/src/protobuf CONFIGURE_COMMAND ${CMAKE_COMMAND} cmake/ -Dprotobuf_BUILD_TESTS=OFF -DBUILD_STATIC_LIBS=ON @@ -24,4 +22,9 @@ ExternalProject_Add(Protobuf -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON) -LIST(APPEND ${PROJECT_NAME}externalTargets Protobuf) \ No newline at end of file +ADD_LIBRARY(Protobuf STATIC IMPORTED) +SET_PROPERTY(TARGET Protobuf PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/protobuf_project/src/protobuf/libprotobuf.a) +SET(Protobuf_LIBRARIES "") +LIST(APPEND Protobuf_LIBRARIES Protobuf ${ZLIB_LIBRARIES}) + +SET(Protobuf_PROTOC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/protobuf_project/src/protobuf/protoc)