Separate dependency libs into their own flags, addition of imported targets. Working *nix build

This commit is contained in:
Amit Prakash Ambasta
2017-06-05 17:11:45 +05:30
parent b98bedd906
commit 93bc5a3e0e
5 changed files with 66 additions and 44 deletions

View File

@@ -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 "$<TARGET_OBJECTS:${PROJECT_NAME}Proto>")
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)
PATTERN CMakeFiles EXCLUDE)

View File

@@ -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)

View File

@@ -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)
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)

View File

@@ -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)
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)

View File

@@ -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)
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)