this repo has no description
1cmake_minimum_required(VERSION 3.1.0)
2
3project(chuffed CXX C)
4# The version number.
5set(chuffed_VERSION_MAJOR 0)
6set(chuffed_VERSION_MINOR 10)
7set(chuffed_VERSION_PATCH 4)
8
9### Additional Definitions:
10option(STATIC "compile with the -static linker flag" OFF)
11
12# ------------- Compiler Configuration -------------
13
14if(STATIC)
15 set(CMAKE_EXE_LINKER_FLAGS "-static")
16endif()
17
18set(DEFAULT_BUILD_TYPE "Release")
19if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
20 message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.")
21 set(CMAKE_BUILD_TYPE "${DEFAULT_BUILD_TYPE}" CACHE STRING "Choose the type of build." FORCE)
22 # Set the possible values of build type for cmake-gui
23 set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
24 "Debug"
25 "Release"
26 "MinSizeRel"
27 "RelWithDebInfo"
28 )
29endif()
30
31if(APPLE)
32 execute_process(COMMAND xcrun --show-sdk-path OUTPUT_VARIABLE OSX_SYSROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
33 set(CMAKE_OSX_SYSROOT ${OSX_SYSROOT})
34 set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9" CACHE STRING "Minimum OS X deployment version")
35endif(APPLE)
36
37set(CMAKE_CXX_STANDARD 11)
38
39find_package(Threads)
40
41include_directories(${CMAKE_BINARY_DIR})
42include_directories(${CMAKE_SOURCE_DIR})
43if(WIN32)
44 add_definitions(-DYY_NO_UNISTD_H)
45endif()
46
47# ------------- CP Profiler Integration -------------
48
49if(EXISTS "${CMAKE_SOURCE_DIR}/submodules/cp-profiler-integration/connector.hpp")
50 set(CHUFFED_PROFILER_SOURCES
51 ${CMAKE_SOURCE_DIR}/submodules/cp-profiler-integration/connector.hpp
52 ${CMAKE_SOURCE_DIR}/submodules/cp-profiler-integration/message.hpp
53 )
54else()
55 message("Configuring without CP Profiler support.")
56endif()
57
58# ------------- Main Chuffed Definition -------------
59
60add_library(chuffed
61 chuffed/vars/int-var.cpp
62 chuffed/vars/int-var-el.cpp
63 chuffed/vars/modelling.cpp
64 chuffed/vars/int-var-sl.cpp
65 chuffed/vars/bool-view.cpp
66 chuffed/vars/int-var-ll.cpp
67 chuffed/parallel/master.cpp
68 chuffed/parallel/slave.cpp
69 chuffed/ldsb/ldsb.cpp
70 chuffed/globals/subcircuit.cpp
71 chuffed/globals/mddglobals.cpp
72 chuffed/globals/sym-break.cpp
73 chuffed/globals/linear-bool.cpp
74 chuffed/globals/linear-bool-decomp.cpp
75 chuffed/globals/well-founded.cpp
76 chuffed/globals/circuit.cpp
77 chuffed/globals/minimum.cpp
78 chuffed/globals/bool_arg_max.cpp
79 chuffed/globals/alldiff.cpp
80 chuffed/globals/template.cpp
81 chuffed/globals/directives.cpp
82 chuffed/globals/cumulative.cpp
83 chuffed/globals/cumulativeCalendar.cpp
84 chuffed/globals/disjunctive.cpp
85 chuffed/globals/regular.cpp
86 chuffed/globals/lex.cpp
87 chuffed/globals/table.cpp
88 chuffed/globals/edit_distance.cpp
89 chuffed/globals/EdExplFinder.cpp
90 chuffed/globals/EdExplFinder.h
91 chuffed/mdd/MDD.cpp
92 chuffed/mdd/mdd_prop.cpp
93 chuffed/mdd/mdd_to_lgraph.cpp
94 chuffed/mdd/MurmurHash3.cpp
95 chuffed/mdd/opcache.cpp
96 chuffed/mdd/weighted_dfa.cpp
97 chuffed/mdd/wmdd_prop.cpp
98 chuffed/mip/mip.cpp
99 chuffed/mip/recalc.cpp
100 chuffed/mip/simplex.cpp
101 chuffed/primitives/element.cpp
102 chuffed/primitives/bool.cpp
103 chuffed/primitives/linear.cpp
104 chuffed/primitives/arithmetic.cpp
105 chuffed/primitives/domain.cpp
106 chuffed/primitives/binary.cpp
107 chuffed/branching/branching.cpp
108 chuffed/core/init.cpp
109 chuffed/core/stats.cpp
110 chuffed/core/engine.cpp
111 chuffed/core/options.cpp
112 chuffed/core/sat.cpp
113 chuffed/core/conflict.cpp
114 chuffed/vars/int-var.h
115 chuffed/vars/vars.h
116 chuffed/vars/int-var-sl.h
117 chuffed/vars/int-var-ll.h
118 chuffed/vars/int-view.h
119 chuffed/vars/int-var-el.h
120 chuffed/vars/modelling.h
121 chuffed/vars/bool-view.h
122 chuffed/parallel/parallel.h
123 chuffed/support/BVec.h
124 chuffed/support/ParseUtils.h
125 chuffed/support/vec.h
126 chuffed/support/misc.h
127 chuffed/support/heap.h
128 chuffed/support/sparse_set.h
129 chuffed/ldsb/ldsb.h
130 chuffed/globals/globals.h
131 chuffed/globals/mddglobals.h
132 chuffed/mdd/CFG.h
133 chuffed/mdd/circ_fns.h
134 chuffed/mdd/circutil.h
135 chuffed/mdd/CYK.h
136 chuffed/mdd/MDD.h
137 chuffed/mdd/mdd_prop.h
138 chuffed/mdd/mdd_to_lgraph.h
139 chuffed/mdd/MurmurHash3.h
140 chuffed/mdd/opcache.h
141 chuffed/mdd/opts.h
142 chuffed/mdd/sorters.h
143 chuffed/mdd/weighted_dfa.h
144 chuffed/mdd/wmdd_prop.h
145 chuffed/mip/mip.h
146 chuffed/mip/simplex.h
147 chuffed/primitives/primitives.h
148 chuffed/branching/branching.h
149 chuffed/core/sat.h
150 chuffed/core/engine.h
151 chuffed/core/sat-types.h
152 chuffed/core/options.h
153 chuffed/core/propagator.h
154 ${CHUFFED_PROFILER_SOURCES}
155)
156
157if(CHUFFED_PROFILER_SOURCES)
158 target_compile_definitions(chuffed PRIVATE HAS_PROFILER)
159endif()
160
161# ------------- FZN Chuffed -------------
162
163find_package(BISON 3.4)
164if(BISON_FOUND)
165 file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/chuffed/flatzinc)
166 bison_target(FZNParser
167 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.yxx
168 ${PROJECT_BINARY_DIR}/parser.tab.cpp
169 DEFINES_FILE ${PROJECT_BINARY_DIR}/chuffed/flatzinc/parser.tab.h
170 COMPILE_FLAGS "-l"
171 )
172else()
173 message(WARNING "Bison cannot be run. Using cached file, which may be out of date.")
174 set(BISON_FZNParser_OUTPUTS
175 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.tab.cpp
176 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.tab.h
177 )
178endif()
179
180find_package(FLEX)
181if(FLEX_FOUND AND BISON_FOUND)
182 flex_target(FZNLexer
183 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/lexer.lxx
184 ${PROJECT_BINARY_DIR}/lexer.yy.cpp
185 COMPILE_FLAGS "-L"
186 )
187 add_flex_bison_dependency(FZNLexer FZNParser)
188else()
189 message(WARNING "Flex cannot be run. Using cached file, which may be out of date.")
190 set(FLEX_FZNLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/lexer.yy.cpp)
191endif()
192
193add_library(chuffed_fzn
194 chuffed/flatzinc/registry.cpp
195 chuffed/flatzinc/flatzinc.cpp
196 ${FLEX_FZNLexer_OUTPUTS}
197 ${BISON_FZNParser_OUTPUTS}
198 chuffed/flatzinc/flatzinc.h
199 chuffed/flatzinc/ast.h
200)
201
202add_executable(fzn-chuffed chuffed/flatzinc/fzn-chuffed.cpp)
203target_link_libraries(fzn-chuffed chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
204
205# ------------- Chuffed Examples -------------
206
207add_executable(bibd EXCLUDE_FROM_ALL chuffed/examples/bibd.cpp)
208target_link_libraries(bibd chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
209
210add_executable(blackhole EXCLUDE_FROM_ALL chuffed/examples/blackhole.cpp)
211target_link_libraries(blackhole chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
212
213add_executable(concert_hall EXCLUDE_FROM_ALL chuffed/examples/concert_hall.cpp)
214target_link_libraries(concert_hall chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
215
216add_executable(concert_hall_sym EXCLUDE_FROM_ALL chuffed/examples/concert_hall_sym.cpp)
217target_link_libraries(concert_hall_sym chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
218
219add_executable(golomb EXCLUDE_FROM_ALL chuffed/examples/golomb.cpp)
220target_link_libraries(golomb chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
221
222add_executable(graceful_graph EXCLUDE_FROM_ALL chuffed/examples/graceful_graph.cpp)
223target_link_libraries(graceful_graph chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
224
225add_executable(graph_colouring EXCLUDE_FROM_ALL chuffed/examples/graph_colouring.cpp)
226target_link_libraries(graph_colouring chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
227
228add_executable(graph_colouring_sym EXCLUDE_FROM_ALL chuffed/examples/graph_colouring_sym.cpp)
229target_link_libraries(graph_colouring_sym chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
230
231add_executable(graph_colouring_sym2 EXCLUDE_FROM_ALL chuffed/examples/graph_colouring_sym2.cpp)
232target_link_libraries(graph_colouring_sym2 chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
233
234add_executable(grid_colouring EXCLUDE_FROM_ALL chuffed/examples/grid_colouring.cpp)
235target_link_libraries(grid_colouring chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
236
237add_executable(latin_square EXCLUDE_FROM_ALL chuffed/examples/latin_square.cpp)
238target_link_libraries(latin_square chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
239
240add_executable(magic_square EXCLUDE_FROM_ALL chuffed/examples/magic_square.cpp)
241target_link_libraries(magic_square chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
242
243add_executable(mosp EXCLUDE_FROM_ALL chuffed/examples/mosp.cpp)
244target_link_libraries(mosp chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
245
246add_executable(nn_queens EXCLUDE_FROM_ALL chuffed/examples/nn_queens.cpp)
247target_link_libraries(nn_queens chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
248
249add_executable(non EXCLUDE_FROM_ALL chuffed/examples/non.cpp)
250target_link_libraries(non chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
251
252add_executable(photo EXCLUDE_FROM_ALL chuffed/examples/photo.cpp)
253target_link_libraries(photo chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
254
255add_executable(queens EXCLUDE_FROM_ALL chuffed/examples/queens.cpp)
256target_link_libraries(queens chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
257
258add_executable(rcpsp EXCLUDE_FROM_ALL chuffed/examples/rcpsp.cpp)
259target_link_libraries(rcpsp chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
260
261add_executable(shift EXCLUDE_FROM_ALL chuffed/examples/shift.cpp)
262target_link_libraries(shift chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
263
264add_executable(steel_mill EXCLUDE_FROM_ALL chuffed/examples/steel_mill.cpp)
265target_link_libraries(steel_mill chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
266
267add_executable(wreg_shift EXCLUDE_FROM_ALL chuffed/examples/wreg_shift.cpp)
268target_link_libraries(wreg_shift chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
269
270find_package(ZLIB)
271if(ZLIB_FOUND)
272 include_directories(${ZLIB_INCLUDE_DIRS})
273
274 add_executable(cross EXCLUDE_FROM_ALL chuffed/examples/cross.cpp)
275 target_link_libraries(cross chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
276
277 add_executable(fdpent EXCLUDE_FROM_ALL chuffed/examples/fdpent.cpp)
278 target_link_libraries(fdpent chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
279
280 add_executable(nurse EXCLUDE_FROM_ALL chuffed/examples/nurse.cpp)
281 target_link_libraries(nurse chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
282
283 set(ZLIB_EXAMPLES
284 cross
285 fdpent
286 nurse
287 )
288endif()
289
290add_custom_target(examples)
291add_dependencies(examples
292 bibd
293 blackhole
294 concert_hall
295 concert_hall_sym
296 golomb
297 graceful_graph
298 graph_colouring
299 graph_colouring_sym
300 graph_colouring_sym2
301 grid_colouring
302 latin_square
303 magic_square
304 mosp
305 nn_queens
306 non
307 photo
308 queens
309 rcpsp
310 shift
311 steel_mill
312 wreg_shift
313 ${ZLIB_EXAMPLES}
314)
315
316# ------------- TARGET install -------------
317include(GNUInstallDirs)
318
319file(RELATIVE_PATH REL_INSTALL_BINARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/minizinc/solvers ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/fzn-chuffed)
320configure_file(chuffed.msc.in chuffed.msc)
321
322install(TARGETS fzn-chuffed RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
323install(DIRECTORY chuffed/flatzinc/mznlib/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/minizinc/chuffed PATTERN "chuffed/flatzinc/mznlib/*")
324install(FILES ${CMAKE_BINARY_DIR}/chuffed.msc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/minizinc/solvers)