Skip to content

Commit e9c9cf7

Browse files
committed
Add CMake-based build system
- Fix ZLIB usage - Fix super build (e.g. FetchContent) integration - cmake: option() honors normal variables (CMP0077)
1 parent 25f4fca commit e9c9cf7

File tree

8 files changed

+612
-0
lines changed

8 files changed

+612
-0
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
*.swp
2+
.vs/
3+
build/
4+
cache/
5+
16
aclocal.m4*
27
aclocal.m4.orig*
38
autom4te*

CMakeLists.txt

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
cmake_minimum_required(VERSION 3.15)
2+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
3+
4+
# option() honors normal variables.
5+
if(POLICY CMP0077)
6+
cmake_policy(SET CMP0077 NEW)
7+
endif()
8+
9+
# MSVC runtime library flags are selected by an abstraction.
10+
if(POLICY CMP0091)
11+
cmake_policy(SET CMP0091 NEW)
12+
endif()
13+
14+
include(ParseAc)
15+
parse_ac(VERSION MAJOR MINOR PATCH)
16+
17+
project(CoinUtils VERSION ${VERSION})
18+
19+
# config options
20+
if(NOT CMAKE_BUILD_TYPE)
21+
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
22+
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
23+
FORCE)
24+
endif(NOT CMAKE_BUILD_TYPE)
25+
26+
option(BUILD_SHARED_LIBS "" ON)
27+
if(BUILD_SHARED_LIBS AND MSVC)
28+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
29+
endif(BUILD_SHARED_LIBS AND MSVC)
30+
31+
# config options
32+
if(MSVC)
33+
# Build with multiple processes
34+
add_definitions(/MP)
35+
add_definitions(/D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_DEPRECATE)
36+
# MSVC warning suppressions
37+
add_definitions(
38+
/wd4018 # 'expression' : signed/unsigned mismatch
39+
/wd4065 # switch statement contains 'default' but no 'case' labels
40+
/wd4101 # 'identifier' : unreferenced local variable
41+
/wd4102 # 'label' : unreferenced label
42+
/wd4244 # 'conversion' conversion from 'type1' to 'type2', possible loss of data
43+
/wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data
44+
/wd4309 # 'conversion' : truncation of constant value
45+
/wd4805 # 'operation' : unsafe mix of type 'type1' and type 'type2' in operation.
46+
/wd4996 # The compiler encountered a deprecated declaration.
47+
)
48+
endif()
49+
if(APPLE)
50+
set(
51+
CMAKE_CXX_FLAGS
52+
"${CMAKE_CXX_FLAGS} -Wno-inconsistent-missing-override -Wno-unused-command-line-argument -Wno-unused-result -Wno-exceptions"
53+
)
54+
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
55+
endif(APPLE)
56+
57+
# ZLIB
58+
if(NOT TARGET ZLIB::ZLIB)
59+
find_package(ZLIB)
60+
endif()
61+
if(ZLIB_FOUND OR TARGET ZLIB::ZLIB)
62+
message(STATUS "Use zlib")
63+
set(HAVE_ZLIB_H "1" CACHE INTERNAL "Use zlib")
64+
set(COIN_HAS_ZLIB "1" CACHE INTERNAL "Use zlib")
65+
endif()
66+
67+
# PThread
68+
set(THREADS_PREFER_PTHREAD_FLAG ON)
69+
find_package(Threads)
70+
if(CMAKE_USE_PTHREADS_INIT)
71+
set(PTHREADS_FOUND TRUE)
72+
else()
73+
set(PTHREADS_FOUND FALSE)
74+
endif()
75+
76+
include(CheckEnv)
77+
include(CTest)
78+
79+
add_subdirectory(CoinUtils)
80+
81+
include(GNUInstallDirs)
82+
install(EXPORT ${PROJECT_NAME}Targets
83+
NAMESPACE Coin::
84+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
85+
include(CMakePackageConfigHelpers)
86+
configure_package_config_file(cmake/Config.cmake.in
87+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
88+
INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
89+
write_basic_package_version_file(
90+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
91+
COMPATIBILITY SameMajorVersion)
92+
install(
93+
FILES
94+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
95+
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
96+
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
97+
COMPONENT Devel)

CoinUtils/CMakeLists.txt

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
set(NAME "COINUTILS")
2+
3+
# PTHREAD
4+
if(PTHREADS_FOUND)
5+
set(${NAME}_PTHREADS "1" CACHE INTERNAL "Use pthread")
6+
endif()
7+
8+
set(COIN_${NAME}_CHECKLEVEL "0" CACHE INTERNAL
9+
"${NAME} check level")
10+
set(COIN_${NAME}_VERBOSITY "0" CACHE INTERNAL
11+
"${NAME} verbosity level")
12+
configure_file(config.h.cmake.in config.h)
13+
configure_file(config_coinutils.h.cmake.in config_coinutils.h)
14+
15+
set(_SRCS
16+
src/CoinAlloc.cpp
17+
src/CoinBuild.cpp
18+
src/CoinDenseVector.cpp
19+
src/CoinError.cpp
20+
src/CoinFactorization1.cpp
21+
src/CoinFactorization2.cpp
22+
src/CoinFactorization3.cpp
23+
src/CoinFactorization4.cpp
24+
src/CoinSimpFactorization.cpp
25+
src/CoinDenseFactorization.cpp
26+
src/CoinOslFactorization.cpp
27+
src/CoinOslFactorization2.cpp
28+
src/CoinOslFactorization3.cpp
29+
src/CoinFileIO.cpp
30+
src/CoinFinite.cpp
31+
src/CoinIndexedVector.cpp
32+
src/CoinLpIO.cpp
33+
src/CoinMessage.cpp
34+
src/CoinMessageHandler.cpp
35+
src/CoinModel.cpp
36+
src/CoinStructuredModel.cpp
37+
src/CoinModelUseful.cpp
38+
src/CoinModelUseful2.cpp
39+
src/CoinMpsIO.cpp
40+
src/CoinPackedMatrix.cpp
41+
src/CoinPackedVector.cpp
42+
src/CoinPackedVectorBase.cpp
43+
src/CoinParam.cpp
44+
src/CoinParamUtils.cpp
45+
src/CoinPostsolveMatrix.cpp
46+
src/CoinPrePostsolveMatrix.cpp
47+
src/CoinPresolveDoubleton.cpp
48+
src/CoinPresolveDual.cpp
49+
src/CoinPresolveDupcol.cpp
50+
src/CoinPresolveEmpty.cpp
51+
src/CoinPresolveFixed.cpp
52+
src/CoinPresolveForcing.cpp
53+
src/CoinPresolveHelperFunctions.cpp
54+
src/CoinPresolveImpliedFree.cpp
55+
src/CoinPresolveIsolated.cpp
56+
src/CoinPresolveMatrix.cpp
57+
src/CoinPresolvePsdebug.cpp
58+
src/CoinPresolveMonitor.cpp
59+
src/CoinPresolveSingleton.cpp
60+
src/CoinPresolveSubst.cpp
61+
src/CoinPresolveTighten.cpp
62+
src/CoinPresolveTripleton.cpp
63+
src/CoinPresolveUseless.cpp
64+
src/CoinPresolveZeros.cpp
65+
src/CoinSearchTree.cpp
66+
src/CoinShallowPackedVector.cpp
67+
src/CoinSnapshot.cpp
68+
src/CoinWarmStartBasis.cpp
69+
src/CoinWarmStartVector.cpp
70+
src/CoinWarmStartDual.cpp
71+
src/CoinWarmStartPrimalDual.cpp
72+
src/CoinRational.cpp)
73+
74+
set(_HDRS
75+
src/Coin_C_defines.h
76+
src/CoinUtilsConfig.h
77+
src/CoinAlloc.hpp
78+
src/CoinBuild.hpp
79+
src/CoinDenseVector.hpp
80+
src/CoinDistance.hpp
81+
src/CoinError.hpp
82+
src/CoinFactorization.hpp
83+
src/CoinSimpFactorization.hpp
84+
src/CoinDenseFactorization.hpp
85+
src/CoinOslFactorization.hpp
86+
src/CoinFileIO.hpp
87+
src/CoinFinite.hpp
88+
src/CoinFloatEqual.hpp
89+
src/CoinHelperFunctions.hpp
90+
src/CoinIndexedVector.hpp
91+
src/CoinLpIO.hpp
92+
src/CoinMessage.hpp
93+
src/CoinMessageHandler.hpp
94+
src/CoinModel.hpp
95+
src/CoinStructuredModel.hpp
96+
src/CoinModelUseful.hpp
97+
src/CoinMpsIO.hpp
98+
src/CoinPackedMatrix.hpp
99+
src/CoinPackedVector.hpp
100+
src/CoinPackedVectorBase.hpp
101+
src/CoinParam.hpp
102+
src/CoinPragma.hpp
103+
src/CoinPresolveDoubleton.hpp
104+
src/CoinPresolveDual.hpp
105+
src/CoinPresolveDupcol.hpp
106+
src/CoinPresolveEmpty.hpp
107+
src/CoinPresolveFixed.hpp
108+
src/CoinPresolveForcing.hpp
109+
src/CoinPresolveImpliedFree.hpp
110+
src/CoinPresolveIsolated.hpp
111+
src/CoinPresolveMatrix.hpp
112+
src/CoinPresolveMonitor.hpp
113+
src/CoinPresolvePsdebug.hpp
114+
src/CoinPresolveSingleton.hpp
115+
src/CoinPresolveSubst.hpp
116+
src/CoinPresolveTighten.hpp
117+
src/CoinPresolveTripleton.hpp
118+
src/CoinPresolveUseless.hpp
119+
src/CoinPresolveZeros.hpp
120+
src/CoinSearchTree.hpp
121+
src/CoinShallowPackedVector.hpp
122+
src/CoinSignal.hpp
123+
src/CoinSmartPtr.hpp
124+
src/CoinSnapshot.hpp
125+
src/CoinSort.hpp
126+
src/CoinTime.hpp
127+
src/CoinTypes.hpp
128+
src/CoinUtility.hpp
129+
src/CoinWarmStart.hpp
130+
src/CoinWarmStartBasis.hpp
131+
src/CoinWarmStartVector.hpp
132+
src/CoinWarmStartDual.hpp
133+
src/CoinWarmStartPrimalDual.hpp
134+
src/CoinRational.hpp)
135+
136+
add_library(CoinUtils ${_SRCS} ${_HDRS})
137+
target_include_directories(CoinUtils PUBLIC
138+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
139+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
140+
$<INSTALL_INTERFACE:include/coin>)
141+
target_compile_definitions(CoinUtils
142+
PUBLIC HAVE_CONFIG_H
143+
PRIVATE COINUTILS_BUILD)
144+
if(CMAKE_VERSION VERSION_LESS "3.8.2")
145+
set_property(TARGET CoinUtils PROPERTY CXX_STANDARD 11)
146+
set_property(TARGET CoinUtils PROPERTY CXX_STANDARD_REQUIRED ON)
147+
else()
148+
target_compile_features(CoinUtils PUBLIC cxx_std_11)
149+
endif()
150+
if(TARGET ZLIB::ZLIB)
151+
target_link_libraries(CoinUtils PRIVATE ZLIB::ZLIB)
152+
endif()
153+
if(CMAKE_USE_PTHREADS_INIT)
154+
target_link_libraries(CoinUtils PRIVATE Threads::Threads)
155+
endif()
156+
set_target_properties(CoinUtils PROPERTIES
157+
PUBLIC_HEADER "${_HDRS};${CMAKE_CURRENT_BINARY_DIR}/config_coinutils.h"
158+
VERSION ${PROJECT_VERSION}
159+
SOVERSION ${PROJECT_VERSION_MAJOR})
160+
add_library(Coin::CoinUtils ALIAS CoinUtils)
161+
162+
# Install
163+
include(GNUInstallDirs)
164+
install(TARGETS CoinUtils
165+
EXPORT ${PROJECT_NAME}Targets
166+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/coin
167+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
168+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
169+
)

0 commit comments

Comments
 (0)