Rework CMake dependencies management (Fix #1116)

- By default don't build dependencies simply call find_package()
- By default only build C++ library
- IF building Python, Java or .Net wrapper then force build dependencies
  - Build dependencies as STATIC
  - Build and Install (in CMAKE_BINARY_DIR) dependencies at configure time
This commit is contained in:
Corentin Le Molgat
2019-04-03 17:26:27 +02:00
parent d9d16afe28
commit a49b9143a4
30 changed files with 729 additions and 533 deletions

View File

@@ -1,100 +1,92 @@
# This file is just an orchestration
cmake_minimum_required(VERSION 3.8.2)
cmake_minimum_required(VERSION 3.5.2)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
# Default Build Type to be Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel. (default: Release)"
FORCE)
endif(NOT CMAKE_BUILD_TYPE)
# Use find_package everywhere, no-op if it's a subproject
macro(find_package)
if(NOT TARGET ${ARGV0} AND NOT TARGET ${ARGV0}::${ARGV0})
_find_package(${ARGV})
else()
if(TARGET ${ARGV0})
get_target_property(TGT_VER ${ARGV0} VERSION)
set(TGT ${ARGV0})
else()
get_target_property(TGT_VER ${ARGV0}::${ARGV0} VERSION)
set(TGT ${ARGV0}::${ARGV0})
endif()
message(STATUS "Found ${ARGV0}: CMake Target ${TGT} (found version \"${TGT_VER}\")")
set(${ARGV0}_FOUND TRUE)
endif()
endmacro()
# Apple: Don't modify install_name when touching RPATH.
if(POLICY CMP0068)
cmake_policy(SET CMP0068 NEW)
endif()
project(ortools-meta NONE)
include(utils)
set_version(VERSION)
project(ortools LANGUAGES CXX VERSION ${VERSION})
message(STATUS "version: ${PROJECT_VERSION}")
# Default Build Type to be Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel. (default: Release)"
FORCE)
endif()
include(CTest)
if(UNIX)
# Needed to create python package from the build directory
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
option(BUILD_SHARED_LIBS "Build shared libraries(.so)." ON)
elseif(MSVC)
# Windows only support static build.
set(BUILD_SHARED_LIBS OFF)
endif()
# When incorporating ortools in a CMake Project, then only C++ library will be built.
# Consequently Python, Java and C# wrapper won't be built.
if("^${CMAKE_SOURCE_DIR}$" STREQUAL "^${PROJECT_SOURCE_DIR}$")
set(ORTOOLS_IS_SUBPROJECT FALSE)
else()
set(ORTOOLS_IS_SUBPROJECT TRUE)
endif()
include(CMakeDependentOption)
option(BUILD_DEPS "Force re-build of all dependencies" ON)
# By default only the ortools C++ library is built.
option(BUILD_CXX "Build C++ library" ON)
CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python Library" OFF
"BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF)
CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java Library" OFF
"BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF)
CMAKE_DEPENDENT_OPTION(BUILD_DOTNET "Build .NET Library" OFF
"BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF)
option(BUILD_PYTHON "Build Python Library" OFF)
option(BUILD_JAVA "Build Java Library" OFF)
option(BUILD_DOTNET "Build .NET Library" OFF)
message(STATUS "Build C++ library: ${BUILD_CXX}")
message(STATUS "Build Python: ${BUILD_PYTHON}")
message(STATUS "Build Java: ${BUILD_JAVA}")
message(STATUS "Build .Net: ${BUILD_DOTNET}")
#option(BUILD_DOC "Build doxygen" OFF)
#message(STATUS "Build doxygen: ${BUILD_DOC}")
# By default all dependencies are NOT built (i.e. BUILD_DEPS=OFF).
# IF building any wrapper THEN Force BUILD_DEPS=ON
# IF BUILD_DEPS=ON THEN Force all BUILD_*=ON
include(CMakeDependentOption)
CMAKE_DEPENDENT_OPTION(BUILD_DEPS "Force re-build of all dependencies" OFF
"NOT BUILD_PYTHON; NOT BUILD_JAVA; NOT BUILD_DOTNET" ON)
CMAKE_DEPENDENT_OPTION(BUILD_ZLIB "Build the ZLIB dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_absl "Build the abseil-cpp dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_gflags "Build the gflags dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_glog "Build the glog dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_Protobuf "Build the Protobuf dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_CoinUtils "Build the CoinUtils dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_Osi "Build the Osi dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_Clp "Build the Clp dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_Cgl "Build the Cgl dependency Library" OFF
"NOT BUILD_DEPS" ON)
CMAKE_DEPENDENT_OPTION(BUILD_Cbc "Build the Cbc dependency Library" OFF
"NOT BUILD_DEPS" ON)
message(STATUS "Build all dependencies: ${BUILD_DEPS}")
message(STATUS "Build CXX library: ${BUILD_CXX}")
message(STATUS "Build Python Binding: ${BUILD_PYTHON}")
message(STATUS "Build Java Binding: ${BUILD_JAVA}")
message(STATUS "Build .Net Binding: ${BUILD_DOTNET}")
message(STATUS "Build ZLIB: ${BUILD_ZLIB}")
message(STATUS "Build abseil-cpp: ${BUILD_absl}")
message(STATUS "Build gflags: ${BUILD_gflags}")
message(STATUS "Build glog: ${BUILD_glog}")
message(STATUS "Build protobuf: ${BUILD_Protobuf}")
message(STATUS "Build CoinUtils: ${BUILD_CoinUtils}")
message(STATUS "Build Osi: ${BUILD_Osi}")
message(STATUS "Build Clp: ${BUILD_Clp}")
message(STATUS "Build Cgl: ${BUILD_Cgl}")
message(STATUS "Build Cbc: ${BUILD_Cbc}")
# Add OR Tools Dependencies as CMake subproject if missing
if(BUILD_DEPS)
add_subdirectory(cmake/external external)
endif()
# Build Needed dependencies
add_subdirectory(cmake/dependencies dependencies)
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/dependencies/install)
if(BUILD_CXX)
include(cpp)
if(BUILD_TESTING)
add_subdirectory(examples/cpp)
endif()
endif()
include(CTest)
if(BUILD_PYTHON)
include(python)
if(BUILD_TESTING)
add_subdirectory(examples/python)
add_subdirectory(examples/notebook)
endif()
endif()
include(cpp)
if(BUILD_JAVA)
include(java)
if(BUILD_TESTING)
add_subdirectory(examples/java)
endif()
endif()
if(BUILD_DOTNET)
include(dotnet)
if(BUILD_TESTING)
add_subdirectory(examples/dotnet)
endif()
endif()
include(python)
include(java)
include(dotnet)

View File

@@ -1,7 +1,33 @@
include(utils)
set_version(VERSION)
project(ortools LANGUAGES CXX VERSION ${VERSION})
message(STATUS "ortools version: ${PROJECT_VERSION}")
if(NOT BUILD_CXX)
return()
endif()
# Check dependencies
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
set(THREAD_PREFER_PTHREAD_FLAG TRUE)
find_package(Threads REQUIRED)
find_package(ZLIB REQUIRED)
find_package(absl REQUIRED CONFIG)
set(GFLAGS_USE_TARGET_NAMESPACE TRUE)
find_package(gflags REQUIRED CONFIG)
if(BUILD_gflags)
set(GFLAGS_DEP gflags::gflags_static)
else()
set(GFLAGS_DEP gflags::gflags)
endif()
find_package(glog REQUIRED CONFIG)
find_package(Protobuf REQUIRED CONFIG)
find_package(CoinUtils REQUIRED CONFIG)
find_package(Osi REQUIRED CONFIG)
find_package(Clp REQUIRED CONFIG)
find_package(Cgl REQUIRED CONFIG)
find_package(Cbc REQUIRED CONFIG)
# If wrapper are built, we need to have the install rpath in BINARY_DIR to package
if(BUILD_PYTHON OR BUILD_JAVA OR BUILD_DOTNET)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
endif()
# config options
if(MSVC)
@@ -44,25 +70,30 @@ else()
endif()
add_definitions(-DUSE_GLOP -DUSE_BOP -DUSE_CBC -DUSE_CLP)
# Verify Dependencies
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
find_package(Threads REQUIRED)
# Main Target
add_library(${PROJECT_NAME} "")
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
if(CMAKE_VERSION VERSION_LESS "3.8.2")
set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 11
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
)
else()
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
endif()
if(NOT APPLE)
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION})
else()
# Clang don't support version x.y.z with z > 255
set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD_REQUIRED ON)
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)
set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_POSITION_INDEPENDENT_CODE ON)
set_target_properties(${PROJECT_NAME} PROPERTIES
SOVERSION ${PROJECT_VERSION_MAJOR}
POSITION_INDEPENDENT_CODE ON
INTERFACE_POSITION_INDEPENDENT_CODE ON
)
set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${PROJECT_VERSION_MAJOR})
set_target_properties(${PROJECT_NAME} PROPERTIES COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION)
if(APPLE)
@@ -86,9 +117,10 @@ target_link_libraries(${PROJECT_NAME} PUBLIC
absl::strings
absl::synchronization
absl::any
gflags::gflags glog::glog
${GFLAGS_DEP}
glog::glog
protobuf::libprotobuf
Cbc::CbcSolver Cbc::OsiCbc Cbc::ClpSolver Cbc::OsiClp
Coin::CbcSolver Coin::OsiCbc Coin::ClpSolver Coin::OsiClp
Threads::Threads)
if(WIN32)
target_link_libraries(${PROJECT_NAME} PUBLIC psapi.lib ws2_32.lib)
@@ -108,7 +140,7 @@ file(GLOB_RECURSE proto_files RELATIVE ${PROJECT_SOURCE_DIR} "ortools/*.proto")
get_target_property(protobuf_dirs protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES)
foreach(dir ${protobuf_dirs})
if ("${dir}" MATCHES "BUILD_INTERFACE")
list(APPEND PROTO_DIRS "--proto_path=${dir}")
list(APPEND PROTO_DIRS "\"--proto_path=${dir}\"")
endif()
endforeach()
@@ -124,7 +156,7 @@ foreach (PROTO_FILE ${proto_files})
OUTPUT ${PROTO_SRC} ${PROTO_HDR}
COMMAND protobuf::protoc
"--proto_path=${PROJECT_SOURCE_DIR}"
"${PROTO_DIRS}"
${PROTO_DIRS}
"--cpp_out=${PROJECT_BINARY_DIR}"
${PROTO_FILE}
DEPENDS ${PROTO_FILE} protobuf::protoc
@@ -161,6 +193,10 @@ foreach(SUBPROJECT
add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}::${SUBPROJECT})
endforeach()
if(BUILD_TESTING)
add_subdirectory(examples/cpp)
endif()
# Install rules
include(GNUInstallDirs)

View File

@@ -0,0 +1,179 @@
####################
## SWIG (WIN32) ##
####################
if(WIN32 AND (BUILD_PYTHON OR BUILD_JAVA OR BUILD_DOTNET))
message(STATUS "Getting SWIG: ...")
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/SWIG.CMakeLists.txt.in
${CMAKE_CURRENT_BINARY_DIR}/SWIG/CMakeLists.txt @ONLY)
execute_process(
COMMAND ${CMAKE_COMMAND} -H. -Bproject_build -G "${CMAKE_GENERATOR}"
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SWIG)
if(result)
message(FATAL_ERROR "CMake step for SWIG failed: ${result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build project_build --config ${CMAKE_BUILD_TYPE}
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SWIG)
if(result)
message(FATAL_ERROR "Build step for SWIG failed: ${result}")
endif()
message(STATUS "Getting SWIG: ...DONE")
set(SWIG_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/SWIG/source/swig.exe
CACHE INTERNAL "swig.exe location" FORCE)
endif()
############
## ZLIB ##
############
if(BUILD_ZLIB)
build_git_dependency(
NAME
ZLIB
REPOSITORY
"https://github.com/madler/ZLIB.git"
TAG
"v1.2.11"
APPLY_PATCH
"${CMAKE_SOURCE_DIR}/patches/ZLIB.patch"
)
endif()
##################
## ABSEIL-CPP ##
##################
if(BUILD_absl)
build_git_dependency(
NAME
abseil-cpp
REPOSITORY
"https://github.com/abseil/abseil-cpp.git"
TAG
"master"
)
endif()
##############
## GFLAGS ##
##############
if(BUILD_gflags)
build_git_dependency(
NAME
gflags
REPOSITORY
"https://github.com/gflags/gflags.git"
TAG
"v2.2.2"
CMAKE_ARGS
-DINSTALL_SHARED_LIBS:BOOL=OFF
-DBUILD_STATIC_LIBS:BOOL=ON
-DINSTALL_STATIC_LIBS:BOOL=ON
)
endif()
############
## GLOG ##
############
if(BUILD_glog)
build_git_dependency(
NAME
glog
REPOSITORY
"https://github.com/google/glog.git"
TAG
"v0.4.0"
CMAKE_ARGS
-DWITH_GFLAGS:BOOL=OFF
)
endif()
################
## Protobuf ##
################
if(BUILD_Protobuf)
build_git_dependency(
NAME
Protobuf
REPOSITORY
"https://github.com/protocolbuffers/protobuf.git"
TAG
"v3.7.1"
CMAKE_ARGS
"SOURCE_SUBDIR cmake"
)
endif()
#################
## Coinutils ##
#################
if(BUILD_CoinUtils)
build_git_dependency(
NAME
CoinUtils
REPOSITORY
"https://github.com/Mizux/CoinUtils.git"
TAG
"master"
)
endif()
###########
## Osi ##
###########
if(BUILD_Osi)
build_git_dependency(
NAME
Osi
REPOSITORY
"https://github.com/Mizux/Osi.git"
TAG
"master"
)
endif()
###########
## Clp ##
###########
if(BUILD_Clp)
build_git_dependency(
NAME
Clp
REPOSITORY
"https://github.com/Mizux/Clp.git"
TAG
"master"
)
endif()
###########
## Cgl ##
###########
if(BUILD_Cgl)
build_git_dependency(
NAME
Cgl
REPOSITORY
"https://github.com/Mizux/Cgl.git"
TAG
"master"
)
endif()
###########
## Cbc ##
###########
if(BUILD_Cbc)
build_git_dependency(
NAME
Cbc
REPOSITORY
"https://github.com/Mizux/Cbc.git"
TAG
"master"
)
endif()

View File

@@ -0,0 +1,43 @@
cmake_minimum_required(VERSION 3.5)
project(@GIT_DEP_NAME@ NONE)
include(ExternalProject)
ExternalProject_Add(${PROJECT_NAME}_project
TMP_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/tmp"
STAMP_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/stamp"
DOWNLOAD_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/download"
SOURCE_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/source"
BINARY_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/build"
GIT_REPOSITORY "@GIT_DEP_REPOSITORY@"
GIT_TAG "@GIT_DEP_TAG@"
LOG_DOWNLOAD FALSE
# UPDATE_COMMAND ""
LOG_UPDATE FALSE
PATCH_COMMAND @PATCH_CMD@
#LOG_PATCH FALSE
# CONFIGURE_COMMAND ""
CMAKE_ARGS
-DCMAKE_PREFIX_PATH=@CMAKE_CURRENT_BINARY_DIR@/install
-DCMAKE_INSTALL_PREFIX=@CMAKE_CURRENT_BINARY_DIR@/install
-DCMAKE_BUILD_TYPE=@CMAKE_BUILD_TYPE@
-DBUILD_SHARED_LIBS=OFF
-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
-DBUILD_TESTING=OFF
@GIT_DEP_CMAKE_ARGS@
LOG_CONFIGURE FALSE
# BUILD_COMMAND ""
LOG_BUILD FALSE
# INSTALL_COMMAND ""
LOG_INSTALL FALSE
TEST_COMMAND ""
LOG_TEST FALSE
)

View File

@@ -0,0 +1,34 @@
cmake_minimum_required(VERSION 3.5)
project(SWIG NONE)
include(ExternalProject)
ExternalProject_Add(SWIG_project
TMP_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/tmp"
STAMP_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/stamp"
DOWNLOAD_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/download"
SOURCE_DIR "@CMAKE_CURRENT_BINARY_DIR@/${PROJECT_NAME}/source"
BUILD_IN_SOURCE 1
URL "https://superb-dca2.dl.sourceforge.net/project/swig/swigwin/swigwin-3.0.12/swigwin-3.0.12.zip"
LOG_DOWNLOAD TRUE
UPDATE_COMMAND ""
LOG_UPDATE TRUE
PATCH_COMMAND ""
LOG_PATCH TRUE
CONFIGURE_COMMAND ""
LOG_CONFIGURE TRUE
BUILD_COMMAND ""
LOG_BUILD TRUE
INSTALL_COMMAND ""
LOG_INSTALL TRUE
TEST_COMMAND ""
LOG_TEST TRUE
)

View File

@@ -4,3 +4,7 @@ endif()
find_package(SWIG)
find_program (DOTNET_CLI NAMES dotnet)
if(BUILD_TESTING)
add_subdirectory(examples/dotnet)
endif()

View File

@@ -1,228 +0,0 @@
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Force dependencies to be built as static
set(BUILD_SHARED_BCKP ${BUILD_SHARED_LIBS})
set(BUILD_SHARED_LIBS OFF)
# Disable test rules for dependencies
set(BUILD_TESTING OFF)
# Build Dependencies
#file(READ ${PROJECT_SOURCE_DIR}/Dependencies.txt _Dependency_file)
#foreach(DEPENDENCY Protobuf gflags glog)
# string(REGEX REPLACE ".*${DEPENDENCY} = ([0-9.]+).*" "\\1" ${DEPENDENCY}_VERSION ${_Dependency_file})
#endforeach()
####################
## SWIG (WIN32) ##
####################
if(WIN32 AND (BUILD_PYTHON OR BUILD_JAVA OR BUILD_CSHARP))
message(STATUS "Adding CMake Subproject: Swig...")
# Download and unpack swig at configure time
configure_file(
${CMAKE_CURRENT_LIST_DIR}/swig.CMakeLists.txt
${CMAKE_BINARY_DIR}/swig-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download )
if(result)
message(FATAL_ERROR "CMake step for swig failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download )
if(result)
message(FATAL_ERROR "Build step for swig failed: ${result}")
endif()
set(SWIG_EXECUTABLE ${CMAKE_BINARY_DIR}/swig/swig.exe
CACHE INTERNAL "swig.exe location" FORCE)
message(STATUS "Adding CMake Subproject: Swig...DONE")
endif()
##############
## GFLAGS ##
##############
if(NOT TARGET gflags::gflags)
message(STATUS "Target gflags::gflags not found.")
message(STATUS "Adding CMake Subproject: Gflags...")
# Download and unpack gflags at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/gflags.CMakeLists.txt
${CMAKE_BINARY_DIR}/gflags-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download)
if(result)
message(FATAL_ERROR "CMake step for gflags failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download)
if(result)
message(FATAL_ERROR "Build step for gflags failed: ${result}")
endif()
set(GFLAGS_NAMESPACE "gflags")
set(GFLAGS_INSTALL_HEADERS ON)
set(GFLAGS_BUILD_SHARED_LIBS OFF)
set(GFLAGS_INSTALL_SHARED_LIBS OFF)
set(GFLAGS_BUILD_STATIC_LIBS ON)
set(GFLAGS_INSTALL_STATIC_LIBS ON)
#set(GFLAGS_IS_SUBPROJECT TRUE)
add_subdirectory(
${CMAKE_BINARY_DIR}/gflags-src
${CMAKE_BINARY_DIR}/gflags-build)
message(STATUS "Adding CMake Subproject: Gflag...DONE")
endif()
############
## GLOG ##
############
if(NOT TARGET glog::glog)
message(STATUS "Target glog::glog not found.")
message(STATUS "Adding CMake Subproject: Glog...")
# Download and unpack glog at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/glog.CMakeLists.txt
${CMAKE_BINARY_DIR}/glog-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download)
if(result)
message(FATAL_ERROR "CMake step for glog failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download)
if(result)
message(FATAL_ERROR "Build step for glog failed: ${result}")
endif()
set(gflags_NAMESPACE "gflags" CACHE INTERNAL "Namespace for gflags")
add_subdirectory(
${CMAKE_BINARY_DIR}/glog-src
${CMAKE_BINARY_DIR}/glog-build)
message(STATUS "Adding CMake Subproject: Glog...DONE")
endif()
############
## ZLIB ##
############
if(NOT TARGET ZLIB::ZLIB)
message(STATUS "Target ZLIB::ZLIB not found.")
message(STATUS "Adding CMake Subproject: ZLIB...")
# Download and unpack zlib at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/zlib.CMakeLists.txt
${CMAKE_BINARY_DIR}/zlib-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download)
if(result)
message(FATAL_ERROR "CMake step for zlib failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download)
if(result)
message(FATAL_ERROR "Build step for zlib failed: ${result}")
endif()
add_subdirectory(
${CMAKE_BINARY_DIR}/zlib-src
${CMAKE_BINARY_DIR}/zlib-build)
message(STATUS "Adding CMake Subproject: ZLIB...DONE")
endif()
################
## PROTOBUF ##
################
if(NOT TARGET protobuf::libprotobuf OR NOT TARGET protobuf::protoc)
message(STATUS "Target protobuf::libprotobuf or protobuf::protoc not found.")
message(STATUS "Adding CMake Subproject: Protobuf...")
# Download and unpack protobuf at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/protobuf.CMakeLists.txt
${CMAKE_BINARY_DIR}/protobuf-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download )
if(result)
message(FATAL_ERROR "CMake step for protobuf failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download )
if(result)
message(FATAL_ERROR "Build step for protobuf failed: ${result}")
endif()
set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "Disable Protobuf tests")
add_subdirectory(
${CMAKE_BINARY_DIR}/protobuf-src/cmake
${CMAKE_BINARY_DIR}/protobuf-build)
message(STATUS "Adding CMake Subproject: Protobuf...DONE")
endif()
##############
## ABSEIL ##
##############
if(NOT TARGET absl::base)
message(STATUS "Target absl::base not found.")
message(STATUS "Adding CMake Subproject: Abseil...")
# Download and unpack abseil at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/abseil.CMakeLists.txt
${CMAKE_BINARY_DIR}/abseil-cpp-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/abseil-cpp-download)
if(result)
message(FATAL_ERROR "CMake step for abseil failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/abseil-cpp-download)
if(result)
message(FATAL_ERROR "Build step for abseil failed: ${result}")
endif()
add_subdirectory(
${CMAKE_BINARY_DIR}/abseil-cpp-src
${CMAKE_BINARY_DIR}/abseil-cpp-build)
message(STATUS "Adding CMake Subproject: Abseil...DONE")
endif()
###########
## CBC ##
###########
if(NOT TARGET Cbc::CbcSolver OR NOT TARGET Cbc::ClpSolver)
message(STATUS "Target Cbc::CbcSolver or Cbc::ClpSolver not found.")
message(STATUS "Adding CMake Subproject: Cbc...")
# Download and unpack cbc at configure time
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/cbc.CMakeLists.txt
${CMAKE_BINARY_DIR}/cbc-download/CMakeLists.txt)
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download)
if(result)
message(FATAL_ERROR "CMake step for cbc failed: ${result}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download)
if(result)
message(FATAL_ERROR "Build step for cbc failed: ${result}")
endif()
add_subdirectory(
${CMAKE_BINARY_DIR}/cbc-src
${CMAKE_BINARY_DIR}/cbc-build)
message(STATUS "Adding CMake Subproject: Cbc...DONE")
endif()
# Reapply previous state
set(BUILD_SHARED_LIBS ${BUILD_SHARED_BCKP})

View File

@@ -1,22 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(abseil-cpp-download NONE)
include(ExternalProject)
ExternalProject_Add(abseil-cpp_project
GIT_REPOSITORY https://github.com/abseil/abseil-cpp
GIT_TAG "bf29470"
SOURCE_DIR "${CMAKE_BINARY_DIR}/abseil-cpp-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/abseil-cpp-build"
UPDATE_COMMAND ""
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/abseil-cpp-bf29470.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -1,22 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(cbc-download NONE)
include(ExternalProject)
ExternalProject_Add(cbc_project
GIT_REPOSITORY https://github.com/Mizux/coinor-cbc
GIT_TAG "097659fae0c9ce690e4108ad1fed1541488d083d"
SOURCE_DIR "${CMAKE_BINARY_DIR}/cbc-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/cbc-build"
UPDATE_COMMAND ""
#PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/cbc.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -1,22 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(gflags-download NONE)
include(ExternalProject)
ExternalProject_Add(gflags_project
GIT_REPOSITORY https://github.com/gflags/gflags
GIT_TAG "v2.2.2"
SOURCE_DIR "${CMAKE_BINARY_DIR}/gflags-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/gflags-build"
UPDATE_COMMAND ""
#PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/gflags-2.2.1.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -1,23 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(glog-download NONE)
include(ExternalProject)
ExternalProject_Add(glog_project
GIT_REPOSITORY https://github.com/google/glog
GIT_TAG "55cc27b6eca3d7906fc1a920ca95df7717deb4e7"
#GIT_TAG "v0.3.5"
SOURCE_DIR "${CMAKE_BINARY_DIR}/glog-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/glog-build"
UPDATE_COMMAND ""
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/glog.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -1,22 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(protobuf-download NONE)
include(ExternalProject)
ExternalProject_Add(protobuf_project
GIT_REPOSITORY https://github.com/google/protobuf
GIT_TAG "v3.7.1"
SOURCE_DIR "${CMAKE_BINARY_DIR}/protobuf-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/protobuf-build"
UPDATE_COMMAND ""
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/protobuf-3.7.1.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -1,18 +0,0 @@
cmake_minimum_required(VERSION 3.5)
project(swig-download NONE)
include(ExternalProject)
ExternalProject_Add(SWIG_project
URL "https://superb-dca2.dl.sourceforge.net/project/swig/swigwin/swigwin-3.0.12/swigwin-3.0.12.zip"
BUILD_IN_SOURCE 1
SOURCE_DIR "${CMAKE_BINARY_DIR}/swig"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON
)

View File

@@ -1,22 +0,0 @@
cmake_minimum_required(VERSION 3.5)
# simplify variable expansion
cmake_policy(SET CMP0053 NEW)
cmake_policy(SET CMP0010 NEW)
project(zlib-download NONE)
include(ExternalProject)
ExternalProject_Add(zlib_project
GIT_REPOSITORY "https://github.com/madler/zlib.git"
GIT_TAG "v1.2.11"
SOURCE_DIR "${CMAKE_BINARY_DIR}/zlib-src"
BINARY_DIR "${CMAKE_BINARY_DIR}/zlib-build"
UPDATE_COMMAND ""
PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/zlib.patch"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
LOG_DOWNLOAD ON
)

View File

@@ -9,3 +9,7 @@ find_package(JNI REQUIRED)
if(NOT TARGET ortools::ortools)
message(FATAL_ERROR "Java: missing ortools TARGET")
endif()
if(BUILD_TESTING)
add_subdirectory(examples/java)
endif()

View File

@@ -4,12 +4,51 @@ set(@PACKAGE_PREFIX@_VERSION @PROJECT_VERSION@)
@PACKAGE_INIT@
include (CMakeFindDependencyMacro)
include(CMakeFindDependencyMacro)
if(${CMAKE_VERSION} VERSION_LESS "3.9.6")
if(NOT ZLIB_FOUND)
find_dependency(ZLIB REQUIRED)
endif()
if(NOT absl_FOUND)
find_dependency(absl REQUIRED)
endif()
if(NOT gflags_FOUND)
find_dependency(gflags REQUIRED)
endif()
if(NOT glog_FOUND)
find_dependency(glog REQUIRED)
endif()
if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND)
find_dependency(Protobuf REQUIRED)
endif()
if(NOT Clp_FOUND)
find_dependency(Clp REQUIRED)
endif()
if(NOT Cbc_FOUND)
find_dependency(Cbc REQUIRED)
endif()
else()
if(NOT ZLIB_FOUND)
find_dependency(ZLIB REQUIRED CONFIG)
endif()
if(NOT absl_FOUND)
find_dependency(absl REQUIRED CONFIG)
endif()
if(NOT gflags_FOUND)
find_dependency(gflags REQUIRED CONFIG)
endif()
if(NOT glog_FOUND)
find_dependency(glog REQUIRED CONFIG)
endif()
if(NOT Protobuf_FOUND AND NOT PROTOBUF_FOUND)
find_dependency(Protobuf REQUIRED CONFIG)
endif()
if(NOT Clp_FOUND)
find_dependency(Clp REQUIRED CONFIG)
endif()
if(NOT Cbc_FOUND)
find_dependency(Cbc REQUIRED CONFIG)
endif()
endif()
find_dependency(ZLIB REQUIRED NO_MODULE)
find_dependency(gflags REQUIRED NO_MODULE)
find_dependency(glog REQUIRED NO_MODULE)
find_dependency(Protobuf REQUIRED NO_MODULE)
find_dependency(Cbc REQUIRED NO_MODULE)
include ("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")

View File

@@ -198,4 +198,7 @@ if(BUILD_TESTING)
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
# run the tests within the virtualenv
add_test(pytest_venv ${VENV_BIN_DIR}/python ${VENV_DIR}/test.py)
add_subdirectory(examples/python)
add_subdirectory(examples/notebook)
endif()

View File

@@ -61,3 +61,67 @@ function(check_target my_target)
CMake target in your project, see CMake/README.md for more details")
endif(NOT TARGET ${my_target})
endfunction()
# build_git_dependency()
#
# CMake function to download, build and install (in staging area) a dependency at configure
# time.
#
# Parameters:
# NAME: name of the dependency
# REPOSITORY: git url of the dependency
# TAG: tag of the dependency
# APPLY_PATCH: apply patch
# CMAKE_ARGS: List of specific CMake args to add
#
# build_dependency(
# NAME
# abseil-cpp
# URL
# https://github.com/abseil/abseil-cpp.git
# TAG
# master
# APPLY_PATCH
# ${CMAKE_SOURCE_DIR}/patches/abseil-cpp.patch
# )
function(build_git_dependency)
set(options "")
set(oneValueArgs NAME REPOSITORY TAG APPLY_PATCH)
set(multiValueArgs CMAKE_ARGS)
cmake_parse_arguments(GIT_DEP
"${options}"
"${oneValueArgs}"
"${multiValueArgs}"
${ARGN}
)
message(STATUS "Building ${GIT_DEP_NAME}: ...")
if(GIT_DEP_APPLY_PATCH)
set(PATCH_CMD "git apply \"${GIT_DEP_APPLY_PATCH}\"")
else()
set(PATCH_CMD "\"\"")
endif()
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt.in
${CMAKE_CURRENT_BINARY_DIR}/${GIT_DEP_NAME}/CMakeLists.txt @ONLY)
execute_process(
COMMAND ${CMAKE_COMMAND} -H. -Bproject_build -G "${CMAKE_GENERATOR}"
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${GIT_DEP_NAME})
if(result)
message(FATAL_ERROR "CMake step for ${GIT_DEP_NAME} failed: ${result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build project_build --config ${CMAKE_BUILD_TYPE}
RESULT_VARIABLE result
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${GIT_DEP_NAME})
if(result)
message(FATAL_ERROR "Build step for ${GIT_DEP_NAME} failed: ${result}")
endif()
message(STATUS "Building ${GIT_DEP_NAME}: ...DONE")
endfunction()

View File

@@ -13,6 +13,8 @@ endif()
get_filename_component(PARENT_SOURCE_DIR ${PROJECT_SOURCE_DIR} DIRECTORY)
include(GNUInstallDirs)
foreach(EXECUTABLE
costas_array_sat
cvrp_disjoint_tw

View File

@@ -16,7 +16,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::base absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -28,7 +27,6 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:ZLIB::ZLIB,INTERFACE_COMPILE_OPTIONS>
@@ -38,7 +36,6 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -49,7 +46,6 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
@@ -57,6 +53,5 @@ add_dependencies(${NAME}
absl::base absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::base ALIAS ${NAME})

View File

@@ -15,7 +15,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::memory absl::synchronization absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -26,7 +25,6 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::memory,INTERFACE_COMPILE_OPTIONS>
@@ -35,7 +33,6 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -45,13 +42,11 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::memory absl::synchronization absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::bop ALIAS ${NAME})

View File

@@ -16,7 +16,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::base absl::memory absl::container absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -30,7 +29,6 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:ZLIB::ZLIB,INTERFACE_COMPILE_OPTIONS>
@@ -42,7 +40,6 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -55,7 +52,6 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
@@ -63,6 +59,5 @@ add_dependencies(${NAME}
absl::base absl::memory absl::container absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::constraint_solver ALIAS ${NAME})

View File

@@ -15,7 +15,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::strings
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -24,14 +23,12 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::strings,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -39,13 +36,11 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::strings
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::data ALIAS ${NAME})

View File

@@ -15,7 +15,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::memory absl::container absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -27,7 +26,6 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::memory,INTERFACE_COMPILE_OPTIONS>
@@ -37,7 +35,6 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -48,13 +45,11 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::memory absl::container absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::glop ALIAS ${NAME})

View File

@@ -15,7 +15,7 @@ set_target_properties(${NAME} PROPERTIES
# absl::hash absl::meta absl::memory absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# Coin::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -28,7 +28,7 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::hash,INTERFACE_COMPILE_OPTIONS>
@@ -39,7 +39,7 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -51,13 +51,13 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::hash absl::meta absl::memory absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
Coin::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::graph ALIAS ${NAME})

View File

@@ -15,7 +15,7 @@ set_target_properties(${NAME} PROPERTIES
# absl::memory absl::container absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# Coin::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -27,7 +27,7 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::memory,INTERFACE_COMPILE_OPTIONS>
@@ -37,7 +37,7 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -48,13 +48,13 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::memory absl::container absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
Coin::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::linear_solver ALIAS ${NAME})

View File

@@ -15,7 +15,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::synchronization absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -26,7 +25,6 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::synchronization,INTERFACE_COMPILE_OPTIONS>
@@ -35,7 +33,6 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -45,13 +42,11 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::synchronization absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::lp_data ALIAS ${NAME})

View File

@@ -15,7 +15,6 @@ set_target_properties(${NAME} PROPERTIES
# absl::strings
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -24,14 +23,12 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::strings,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -39,13 +36,11 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::strings
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::port ALIAS ${NAME})

View File

@@ -15,7 +15,7 @@ set_target_properties(${NAME} PROPERTIES
# absl::any absl::memory absl::synchronization absl::container absl::strings absl::str_format
# gflags::gflags glog::glog
# protobuf::libprotobuf
# Cbc::Cbc
# Coin::Cbc
# ${PROJECT_NAME}::proto)
target_include_directories(${NAME} PRIVATE
${PROJECT_SOURCE_DIR}
@@ -29,7 +29,7 @@ target_include_directories(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:glog::glog,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_INCLUDE_DIRECTORIES>)
target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:absl::any,INTERFACE_COMPILE_OPTIONS>
@@ -41,7 +41,7 @@ target_compile_options(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_OPTIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_OPTIONS>
)
target_compile_definitions(${NAME} PRIVATE
@@ -54,13 +54,13 @@ target_compile_definitions(${NAME} PRIVATE
$<TARGET_PROPERTY:gflags::gflags,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:glog::glog,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Cbc::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:Coin::Cbc,INTERFACE_COMPILE_DEFINITIONS>
$<TARGET_PROPERTY:${PROJECT_NAME}::proto,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(${NAME}
absl::any absl::memory absl::synchronization absl::container absl::strings absl::str_format
gflags::gflags glog::glog
protobuf::libprotobuf
Cbc::Cbc
Coin::Cbc
${PROJECT_NAME}::proto)
add_library(${PROJECT_NAME}::sat ALIAS ${NAME})

210
patches/ZLIB.patch Normal file
View File

@@ -0,0 +1,210 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0fe939d..5f25cce 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,24 +1,23 @@
-cmake_minimum_required(VERSION 2.4.4)
-set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
+cmake_minimum_required(VERSION 2.8.12)
+cmake_policy(SET CMP0048 NEW)
+project(zlib VERSION 1.2.11.1 LANGUAGES C)
-project(zlib C)
+option(ASM686 "Enable building i686 assembly implementation" OFF)
+option(AMD64 "Enable building amd64 assembly implementation" OFF)
-set(VERSION "1.2.11")
+include(GNUInstallDirs)
+set(INSTALL_BIN_DIR "${CMAKE_INSTALL_BINDIR}" CACHE PATH "Installation directory for executables")
+set(INSTALL_LIB_DIR "${CMAKE_INSTALL_LIBDIR}" CACHE PATH "Installation directory for libraries")
+set(INSTALL_INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}" CACHE PATH "Installation directory for headers")
-option(ASM686 "Enable building i686 assembly implementation")
-option(AMD64 "Enable building amd64 assembly implementation")
-
-set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
-set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
-set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
-set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
-set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
+set(INSTALL_MAN_DIR "${CMAKE_INSTALL_MANDIR}" CACHE PATH "Installation directory for manual pages")
+set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_DATADIR}/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
include(CheckTypeSize)
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckCSourceCompiles)
-enable_testing()
+include(CTest)
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
@@ -63,7 +62,6 @@ if(MSVC)
set(CMAKE_DEBUG_POSTFIX "d")
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
- include_directories(${CMAKE_CURRENT_SOURCE_DIR})
endif()
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
@@ -83,7 +81,6 @@ configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
${ZLIB_PC} @ONLY)
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
-include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
#============================================================================
@@ -132,9 +129,9 @@ endif()
if(CMAKE_COMPILER_IS_GNUCC)
if(ASM686)
set(ZLIB_ASMS contrib/asm686/match.S)
- elseif (AMD64)
+ elseif(AMD64)
set(ZLIB_ASMS contrib/amd64/amd64-match.S)
- endif ()
+ endif()
if(ZLIB_ASMS)
add_definitions(-DASMV)
@@ -143,20 +140,20 @@ if(CMAKE_COMPILER_IS_GNUCC)
endif()
if(MSVC)
- if(ASM686)
+ if(ASM686)
ENABLE_LANGUAGE(ASM_MASM)
- set(ZLIB_ASMS
+ set(ZLIB_ASMS
contrib/masmx86/inffas32.asm
contrib/masmx86/match686.asm
- )
- elseif (AMD64)
+ )
+ elseif(AMD64)
ENABLE_LANGUAGE(ASM_MASM)
- set(ZLIB_ASMS
+ set(ZLIB_ASMS
contrib/masmx64/gvmat64.asm
contrib/masmx64/inffasx64.asm
- )
- endif()
-
+ )
+ # set(ZLIB_SRCS ${ZLIB_SRCS} contrib/masmx64/inffas8664.c)
+ endif()
if(ZLIB_ASMS)
add_definitions(-DASMV -DASMINF)
endif()
@@ -184,9 +181,25 @@ if(MINGW)
endif(MINGW)
add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
+target_include_directories(zlib PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:include>)
+set_target_properties(zlib PROPERTIES
+ DEFINE_SYMBOL ZLIB_DLL
+ SOVERSION 1)
+
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
-set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
-set_target_properties(zlib PROPERTIES SOVERSION 1)
+target_include_directories(zlibstatic PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+ $<INSTALL_INTERFACE:include>)
+
+if(BUILD_SHARED_LIBS)
+ add_library(ZLIB::ZLIB ALIAS zlib)
+else()
+ add_library(ZLIB::ZLIB ALIAS zlibstatic)
+endif()
if(NOT CYGWIN)
# This property causes shared libraries on Linux to have the full version
@@ -197,6 +210,7 @@ if(NOT CYGWIN)
# This has no effect with MSVC, on that platform the version info for
# the DLL comes from the resource file win32/zlib1.rc
set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
+ set_target_properties(zlibstatic PROPERTIES VERSION ${ZLIB_FULL_VERSION})
endif()
if(UNIX)
@@ -210,12 +224,30 @@ elseif(BUILD_SHARED_LIBS AND WIN32)
set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
endif()
-if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
+#if(WIN32)
+# add_definitions(-DZLIB_WINAPI)
+#endif()
+
+if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
install(TARGETS zlib zlibstatic
- RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
- ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
- LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
-endif()
+ EXPORT ZLIBTargets
+ RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
+ ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
+ LIBRARY DESTINATION "${INSTALL_LIB_DIR}")
+ install(EXPORT ZLIBTargets
+ NAMESPACE ZLIB::
+ DESTINATION lib/cmake/ZLIB)
+ include(CMakePackageConfigHelpers)
+ write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake"
+ VERSION ${PROJECT_VERSION}
+ COMPATIBILITY SameMajorVersion)
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake"
+ "include(\"\${CMAKE_CURRENT_LIST_DIR}/ZLIBTargets.cmake\")"
+ )
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfig.cmake"
+ "${CMAKE_CURRENT_BINARY_DIR}/ZLIBConfigVersion.cmake"
+ DESTINATION lib/cmake/ZLIB)
+ endif()
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
endif()
@@ -229,21 +261,22 @@ endif()
#============================================================================
# Example binaries
#============================================================================
-
-add_executable(example test/example.c)
-target_link_libraries(example zlib)
-add_test(example example)
-
-add_executable(minigzip test/minigzip.c)
-target_link_libraries(minigzip zlib)
-
-if(HAVE_OFF64_T)
- add_executable(example64 test/example.c)
- target_link_libraries(example64 zlib)
- set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
- add_test(example64 example64)
-
- add_executable(minigzip64 test/minigzip.c)
- target_link_libraries(minigzip64 zlib)
- set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
+if(BUILD_TESTING)
+ add_executable(example test/example.c)
+ target_link_libraries(example zlib)
+ add_test(example example)
+
+ add_executable(minigzip test/minigzip.c)
+ target_link_libraries(minigzip zlib)
+
+ if(HAVE_OFF64_T)
+ add_executable(example64 test/example.c)
+ target_link_libraries(example64 zlib)
+ set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
+ add_test(example64 example64)
+
+ add_executable(minigzip64 test/minigzip.c)
+ target_link_libraries(minigzip64 zlib)
+ set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
+ endif()
endif()