Skip to content

Commit 6685d71

Browse files
committed
Add CMake-based build system
1 parent 7ab026c commit 6685d71

File tree

8 files changed

+598
-0
lines changed

8 files changed

+598
-0
lines changed

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
*.swp
2+
.vs/
3+
build/
4+
cache/

CMakeLists.txt

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

CoinUtils/config.h.cmake.in

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
/*config.h. Generated by configure_file.*/
2+
3+
/* VERSION */
4+
#define VERSION "${VERSION}"
5+
/* ${NAME}_VERSION */
6+
#define ${NAME}_VERSION "${VERSION}"
7+
/* ${NAME}_VERSION_MAJOR */
8+
#define ${NAME}_VERSION_MAJOR ${MAJOR}
9+
/* ${NAME}_VERSION_MINOR */
10+
#define ${NAME}_VERSION_MINOR ${MINOR}
11+
/* ${NAME}_VERSION_RELEASE */
12+
#define ${NAME}_VERSION_RELEASE ${PATCH}
13+
14+
/* HAVE_MATH_H */
15+
#cmakedefine HAVE_MATH_H ${HAVE_MATH_H}
16+
/* HAVE_CTYPE_H */
17+
#cmakedefine HAVE_CTYPE_H ${HAVE_CTYPE_H}
18+
/* HAVE_INTTYPES_H */
19+
#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H}
20+
/* HAVE_FLOAT_H */
21+
#cmakedefine HAVE_FLOAT_H ${HAVE_FLOAT_H}
22+
/* HAVE_IEEEFP_H */
23+
#cmakedefine HAVE_IEEEFP_H ${HAVE_IEEEFP_H}
24+
/* HAVE_STDARG_H */
25+
#cmakedefine HAVE_STDARG_H ${HAVE_STDARG_H}
26+
/* HAVE_STDDEF_H */
27+
#cmakedefine HAVE_STDDEF_H ${HAVE_STDDEF_H}
28+
/* HAVE_STDINT_H */
29+
#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}
30+
/* HAVE_STDIO_H */
31+
#cmakedefine HAVE_STDIO_H ${HAVE_STDIO_H}
32+
/* HAVE_STDLIB_H */
33+
#cmakedefine HAVE_STDLIB_H ${HAVE_STDLIB_H}
34+
/* HAVE_ASSERT_H */
35+
#cmakedefine HAVE_ASSERT_H ${HAVE_ASSERT_H}
36+
/* HAVE_DLFCN_H */
37+
#cmakedefine HAVE_DLFCN_H ${HAVE_DLFCN_H}
38+
/* HAVE_ENDIAN_H */
39+
#cmakedefine HAVE_ENDIAN_H ${HAVE_ENDIAN_H}
40+
/* HAVE_MEMORY_H */
41+
#cmakedefine HAVE_MEMORY_H ${HAVE_MEMORY_H}
42+
/* HAVE_STRINGS_H */
43+
#cmakedefine HAVE_STRINGS_H ${HAVE_STRINGS_H}
44+
/* HAVE_STRING_H */
45+
#cmakedefine HAVE_STRING_H ${HAVE_STRING_H}
46+
/* HAVE_TIME_H */
47+
#cmakedefine HAVE_TIME_H ${HAVE_TIME_H}
48+
/* HAVE_UNISTD_H */
49+
#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
50+
/* HAVE_SYS_STAT_H */
51+
#cmakedefine HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H}
52+
/* HAVE_SYS_TYPES_H */
53+
#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H}
54+
55+
/* HAVE_CMATH */
56+
#cmakedefine HAVE_CMATH ${HAVE_CMATH}
57+
/* HAVE_CCTYPE */
58+
#cmakedefine HAVE_CCTYPE ${HAVE_CCTYPE}
59+
/* HAVE_CINTTYPES */
60+
#cmakedefine HAVE_CINTTYPES ${HAVE_CINTTYPES}
61+
/* HAVE_CFLOAT */
62+
#cmakedefine HAVE_CFLOAT ${HAVE_CFLOAT}
63+
/* HAVE_CIEEEFP */
64+
#cmakedefine HAVE_CIEEEFP ${HAVE_CIEEEFP}
65+
/* HAVE_CSTDARG */
66+
#cmakedefine HAVE_CSTDARG ${HAVE_CSTDARG}
67+
/* HAVE_CSTDDEF */
68+
#cmakedefine HAVE_CSTDDEF ${HAVE_CSTDDEF}
69+
/* HAVE_CSTDINT */
70+
#cmakedefine HAVE_CSTDINT ${HAVE_CSTDINT}
71+
/* HAVE_CSTDIO */
72+
#cmakedefine HAVE_CSTDIO ${HAVE_CSTDIO}
73+
/* HAVE_CSTDLIB */
74+
#cmakedefine HAVE_CSTDLIB ${HAVE_CSTDLIB}
75+
/* HAVE_CASSERT */
76+
#cmakedefine HAVE_CASSERT ${HAVE_CASSERT}
77+
/* HAVE_CSTRING */
78+
#cmakedefine HAVE_CSTRING ${HAVE_CSTRING}
79+
/* HAVE_CTIME */
80+
#cmakedefine HAVE_CTIME ${HAVE_CTIME}
81+
82+
/* STDC_HEADERS */
83+
#cmakedefine STDC_HEADERS ${STDC_HEADERS}
84+
/* COIN_C_FINITE */
85+
#cmakedefine COIN_C_FINITE ${COIN_C_FINITE}
86+
/* COIN_C_ISNAN */
87+
#cmakedefine COIN_C_ISNAN ${COIN_C_ISNAN}
88+
/* COIN_INT64_T */
89+
#cmakedefine COIN_INT64_T ${COIN_INT64_T}
90+
/* COIN_UINT64_T */
91+
#cmakedefine COIN_UINT64_T ${COIN_UINT64_T}
92+
/* COIN_INTPTR_T */
93+
#cmakedefine COIN_INTPTR_T ${COIN_INTPTR_T}
94+
95+
/* COIN_${NAME}_CHECKLEVEL */
96+
#define COIN_${NAME}_CHECKLEVEL ${COIN_${NAME}_CHECKLEVEL}
97+
/* COIN_${NAME}_VERBOSITY */
98+
#define COIN_${NAME}_VERBOSITY ${COIN_${NAME}_VERBOSITY}
99+
100+
/* ${NAME}_HAS_CSTDINT */
101+
#ifdef HAVE_CSTDINT
102+
#define ${NAME}_HAS_CSTDINT 1
103+
#endif
104+
105+
/* ${NAME}_PTHREADS */
106+
#cmakedefine COINUTILS_PTHREADS ${COINUTILS_PTHREADS}
107+
/* ${NAME}_MEMPOOL_MAXPOOLED */
108+
#define ${NAME}_MEMPOOL_MAXPOOLED -1
109+
110+
/* HAVE_ZLIB_H */
111+
#cmakedefine HAVE_ZLIB_H ${HAVE_ZLIB_H}
112+
/* COIN_HAS_ZLIB */
113+
#cmakedefine COIN_HAS_ZLIB ${COIN_HAS_ZLIB}
114+
115+
/* PACKAGE */
116+
#cmakedefine PACKAGE
117+
/* PACKAGE_NAME */
118+
#cmakedefine PACKAGE_NAME
119+
/* PACKAGE_VERSION */
120+
#cmakedefine PACKAGE_VERSION
121+
/* PACKAGE_STRING */
122+
#cmakedefine PACKAGE_STRING
123+
/* PACKAGE_TARNAME */
124+
#cmakedefine PACKAGE_TARNAME
125+
/* PACKAGE_BUGREPORT */
126+
#cmakedefine PACKAGE_BUGREPORT
127+

0 commit comments

Comments
 (0)