Enable fallback for gflags, glog and protobuf
This commit is contained in:
@@ -4,6 +4,7 @@ PROJECT(ortools LANGUAGES CXX)
|
||||
SET(CMAKE_CXX_STANDARD 11)
|
||||
|
||||
INCLUDE(FindPkgConfig)
|
||||
INCLUDE(ExternalProject)
|
||||
|
||||
SET(CMAKE_INSTALL_LIBDIR lib)
|
||||
SET(CMAKE_INSTALL_BINDIR bin)
|
||||
@@ -14,19 +15,56 @@ IF(UNIX)
|
||||
INCLUDE(GNUInstallDirs)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG")
|
||||
|
||||
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.")
|
||||
|
||||
MARK_AS_ADVANCED(BUILD_CXX)
|
||||
MARK_AS_ADVANCED(DOWNLOAD_LOCATION)
|
||||
|
||||
SET(${PROJECT_NAME}externalLibraries "")
|
||||
SET(${PROJECT_NAME}externalTargets "")
|
||||
|
||||
IF(BUILD_CXX)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_GLOP -DUSE_BOP")
|
||||
FIND_PACKAGE(Threads REQUIRED)
|
||||
|
||||
FIND_PACKAGE(Protobuf REQUIRED)
|
||||
SET(Protobuf_VERSION 3.0.2)
|
||||
FIND_PACKAGE(Protobuf ${Protobuf_VERSION} QUIET)
|
||||
|
||||
FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ortools/*.proto")
|
||||
SET(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF)
|
||||
FIND_PACKAGE(Gflags REQUIRED)
|
||||
IF(NOT Protobuf_FOUND)
|
||||
MESSAGE(STATUS "Did not find system protobuff. Building as an external project")
|
||||
INCLUDE(cmake/external/zlib.cmake)
|
||||
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})
|
||||
|
||||
SET(Gflags_VERSION 2.2.0)
|
||||
FIND_PACKAGE(Gflags ${Gflags_VERSION} QUIET)
|
||||
|
||||
IF(NOT Gflags_FOUND)
|
||||
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 0.3.5)
|
||||
PKG_CHECK_MODULES(GLOG libglog>=${GLOG_VERSION})
|
||||
# Set again since pkg_check_module resets GLOG_VERSION
|
||||
SET(GLOG_VERSION 0.3.5)
|
||||
|
||||
IF(NOT GLOG_FOUND)
|
||||
MESSAGE(STATUS "Did not find system glog. Building as an external project ${GLOG_VERSION}")
|
||||
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")
|
||||
@@ -37,7 +75,8 @@ IF(BUILD_CXX)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLP_CFLAGS} -DUSE_CLP")
|
||||
ENDIF(CLP_FOUND)
|
||||
|
||||
PKG_CHECK_MODULES(GLOG libglog)
|
||||
FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ortools/*.proto")
|
||||
SET(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF)
|
||||
|
||||
INCLUDE_DIRECTORIES(.)
|
||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
|
||||
@@ -45,6 +84,7 @@ IF(BUILD_CXX)
|
||||
|
||||
PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${proto_files})
|
||||
ADD_LIBRARY(${PROJECT_NAME}Proto OBJECT ${PROTO_SRCS} ${PROTO_HDRS})
|
||||
ADD_DEPENDENCIES(${PROJECT_NAME}Proto ${${PROJECT_NAME}externalTargets})
|
||||
SET_TARGET_PROPERTIES(${PROJECT_NAME}Proto PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
SET(SUBTARGETS "")
|
||||
@@ -56,12 +96,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}
|
||||
${GLOG_LIBRARIES}
|
||||
${Protobuf_LIBRARIES}
|
||||
${gflags_LIBRARIES}
|
||||
${CBC_LIBRARIES})
|
||||
${${PROJECT_NAME}externalLibraries}
|
||||
${CBC_LIBRARIES}
|
||||
${CMAKE_THREAD_LIBS_INIT})
|
||||
|
||||
ADD_DEPENDENCIES(${PROJECT_NAME} ${PROJECT_NAME}Proto)
|
||||
INSTALL(TARGETS ${PROJECT_NAME}
|
||||
|
||||
27
cmake/external/cbc.cmake
vendored
Normal file
27
cmake/external/cbc.cmake
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
SET(CBC_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/src)
|
||||
SET(CBC_URL https://github.com/google/protobuf)
|
||||
|
||||
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()
|
||||
|
||||
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)
|
||||
|
||||
LIST(APPEND ${PROJECT_NAME}externalTargets Protobuf)
|
||||
27
cmake/external/gflags.cmake
vendored
Normal file
27
cmake/external/gflags.cmake
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
SET(Gflags_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags/include/)
|
||||
SET(Gflags_URL https://github.com/gflags/gflags)
|
||||
|
||||
IF(WIN32)
|
||||
SET(Gflags_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags/${CMAKE_BUILD_TYPE}/libgflags.lib)
|
||||
ELSE()
|
||||
SET(Gflags_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags/lib/libgflags.a)
|
||||
ENDIF()
|
||||
|
||||
ExternalProject_Add(Gflags
|
||||
PREFIX Gflags
|
||||
GIT_REPOSITORY ${Gflags_URL}
|
||||
GIT_TAG "v${Gflags_VERSION}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
|
||||
BUILD_IN_SOURCE 1
|
||||
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/gflags/src/gflags
|
||||
CONFIGURE_COMMAND ${CMAKE_COMMAND}
|
||||
-DBUILD_TESTING=OFF
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||
${Gflags_ADDITIONAL_CMAKE_OPTIONS}
|
||||
INSTALL_COMMAND ""
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_BUILD_TYPE:STRING=Release
|
||||
-DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON)
|
||||
|
||||
LIST(APPEND ${PROJECT_NAME}externalTargets Gflags)
|
||||
29
cmake/external/glog.cmake
vendored
Normal file
29
cmake/external/glog.cmake
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
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_URL https://github.com/google/glog)
|
||||
|
||||
IF(WIN32)
|
||||
SET(GLOG_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog/${CMAKE_BUILD_TYPE}/libglog.lib)
|
||||
ELSE()
|
||||
SET(GLOG_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog/libglog.a)
|
||||
ENDIF()
|
||||
MESSAGE("Glog: ${GLOG_VERSION}")
|
||||
|
||||
ExternalProject_Add(Glog
|
||||
PREFIX Glog
|
||||
GIT_REPOSITORY ${GLOG_URL}
|
||||
GIT_TAG "v${GLOG_VERSION}"
|
||||
DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
|
||||
BUILD_IN_SOURCE 1
|
||||
SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/glog/src/glog
|
||||
CONFIGURE_COMMAND ${CMAKE_COMMAND}
|
||||
-DBUILD_TESTING=OFF
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
|
||||
${Glogs_ADDITIONAL_CMAKE_OPTIONS}
|
||||
INSTALL_COMMAND ""
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_BUILD_TYPE:STRING=Release
|
||||
-DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON)
|
||||
|
||||
LIST(APPEND ${PROJECT_NAME}externalTargets Glog)
|
||||
34
cmake/external/protobuf.cmake
vendored
Normal file
34
cmake/external/protobuf.cmake
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
SET(Protobuf_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/src)
|
||||
SET(Protobuf_URL https://github.com/google/protobuf)
|
||||
|
||||
IF(WIN32)
|
||||
SET(Protobuf_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/libprotobuf.lib)
|
||||
SET(Protobuf_PROTOC_EXECUTABLE
|
||||
${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/protoc.exe)
|
||||
SET(Protobuf_ADDITIONAL_CMAKE_OPTIONS -Dprotobuf_MSVC_STATIC_RUNTIME:BOOL=OFF -A x64)
|
||||
ELSE()
|
||||
SET(Protobuf_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/libprotobuf.a)
|
||||
SET(Protobuf_PROTOC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/protoc)
|
||||
ENDIF()
|
||||
|
||||
ExternalProject_Add(Protobuf
|
||||
PREFIX Protobuf
|
||||
DEPENDS Zlib
|
||||
GIT_REPOSITORY ${Protobuf_URL}
|
||||
GIT_TAG "v${Protobuf_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
|
||||
-DZLIB_ROOT=${ZLIB_INSTALL}
|
||||
${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
|
||||
-DZLIB_ROOT:STRING=${ZLIB_INSTALL})
|
||||
|
||||
LIST(APPEND ${PROJECT_NAME}externalTargets Protobuf)
|
||||
45
cmake/external/zlib.cmake
vendored
Normal file
45
cmake/external/zlib.cmake
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
INCLUDE(ExternalProject)
|
||||
|
||||
SET(Zlib_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/zlib_archive)
|
||||
SET(Zlib_URL https://github.com/madler/zlib)
|
||||
SET(Zlib_BUILD ${CMAKE_CURRENT_BINARY_DIR}/zlib/src/zlib)
|
||||
SET(Zlib_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/zlib/install)
|
||||
SET(Zlib_TAG 50893291621658f355bc5b4d450a8d06a563053d)
|
||||
|
||||
IF(WIN32)
|
||||
SET(Zlib_STATIC_LIBRARIES
|
||||
debug ${CMAKE_CURRENT_BINARY_DIR}/zlib/install/lib/zlibstaticd.lib
|
||||
optimized ${CMAKE_CURRENT_BINARY_DIR}/zlib/install/lib/zlibstatic.lib)
|
||||
ELSE()
|
||||
SET(Zlib_STATIC_LIBRARIES
|
||||
${CMAKE_CURRENT_BINARY_DIR}/zlib/install/lib/libz.a)
|
||||
ENDIF()
|
||||
|
||||
SET(Zlib_HEADERS
|
||||
"${Zlib_INSTALL}/include/zconf.h"
|
||||
"${Zlib_INSTALL}/include/zlib.h")
|
||||
|
||||
ExternalProject_Add(Zlib
|
||||
PREFIX zlib
|
||||
GIT_REPOSITORY ${Zlib_URL}
|
||||
GIT_TAG ${Zlib_TAG}
|
||||
INSTALL_DIR ${Zlib_INSTALL}
|
||||
BUILD_IN_SOURCE 1
|
||||
DOWNLOAD_DIR ${DOWNLOAD_LOCATION}
|
||||
CMAKE_CACHE_ARGS
|
||||
-DCMAKE_BUILD_TYPE:STRING=RELEASE
|
||||
-DCMAKE_INSTALL_PREFIX:STRING=${Zlib_INSTALL}
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON)
|
||||
|
||||
ADD_CUSTOM_TARGET(Zlib_CREATE_DESTINATION_DIR
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${Zlib_INCLUDE_DIR}
|
||||
DEPENDS Zlib)
|
||||
|
||||
ADD_CUSTOM_TARGET(Zlib_COPY_HEADERS_TO_DESTINATION DEPENDS Zlib_CREATE_DESTINATION_DIR)
|
||||
|
||||
FOREACH(header_file ${ZLIB_HEADERS})
|
||||
ADD_CUSTOM_COMMAND(TARGET Zlib_COPY_HEADERS_TO_DESTINATION PRE_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${header_file} ${Zlib_INCLUDE_DIR})
|
||||
ENDFOREACH()
|
||||
|
||||
LIST(APPEND ${PROJECT_NAME}externalTargets Zlib)
|
||||
Reference in New Issue
Block a user