The models, scripts, and results of the benchmarks performed for a Half Reification Journal paper
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/mdd/MDD.cpp
89 chuffed/mdd/mdd_prop.cpp
90 chuffed/mdd/mdd_to_lgraph.cpp
91 chuffed/mdd/MurmurHash3.cpp
92 chuffed/mdd/opcache.cpp
93 chuffed/mdd/weighted_dfa.cpp
94 chuffed/mdd/wmdd_prop.cpp
95 chuffed/mip/mip.cpp
96 chuffed/mip/recalc.cpp
97 chuffed/mip/simplex.cpp
98 chuffed/primitives/element.cpp
99 chuffed/primitives/bool.cpp
100 chuffed/primitives/linear.cpp
101 chuffed/primitives/arithmetic.cpp
102 chuffed/primitives/domain.cpp
103 chuffed/primitives/binary.cpp
104 chuffed/branching/branching.cpp
105 chuffed/core/init.cpp
106 chuffed/core/stats.cpp
107 chuffed/core/engine.cpp
108 chuffed/core/options.cpp
109 chuffed/core/sat.cpp
110 chuffed/core/conflict.cpp
111 chuffed/vars/int-var.h
112 chuffed/vars/vars.h
113 chuffed/vars/int-var-sl.h
114 chuffed/vars/int-var-ll.h
115 chuffed/vars/int-view.h
116 chuffed/vars/int-var-el.h
117 chuffed/vars/modelling.h
118 chuffed/vars/bool-view.h
119 chuffed/parallel/parallel.h
120 chuffed/support/BVec.h
121 chuffed/support/ParseUtils.h
122 chuffed/support/vec.h
123 chuffed/support/misc.h
124 chuffed/support/heap.h
125 chuffed/support/sparse_set.h
126 chuffed/ldsb/ldsb.h
127 chuffed/globals/globals.h
128 chuffed/globals/mddglobals.h
129 chuffed/mdd/CFG.h
130 chuffed/mdd/circ_fns.h
131 chuffed/mdd/circutil.h
132 chuffed/mdd/CYK.h
133 chuffed/mdd/MDD.h
134 chuffed/mdd/mdd_prop.h
135 chuffed/mdd/mdd_to_lgraph.h
136 chuffed/mdd/MurmurHash3.h
137 chuffed/mdd/opcache.h
138 chuffed/mdd/opts.h
139 chuffed/mdd/sorters.h
140 chuffed/mdd/weighted_dfa.h
141 chuffed/mdd/wmdd_prop.h
142 chuffed/mip/mip.h
143 chuffed/mip/simplex.h
144 chuffed/primitives/primitives.h
145 chuffed/branching/branching.h
146 chuffed/core/sat.h
147 chuffed/core/engine.h
148 chuffed/core/sat-types.h
149 chuffed/core/options.h
150 chuffed/core/propagator.h
151 ${CHUFFED_PROFILER_SOURCES}
152)
153
154if(CHUFFED_PROFILER_SOURCES)
155 target_compile_definitions(chuffed PRIVATE HAS_PROFILER)
156endif()
157
158# ------------- FZN Chuffed -------------
159
160find_package(BISON 3.4)
161if(BISON_FOUND)
162 file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/chuffed/flatzinc)
163 bison_target(FZNParser
164 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.yxx
165 ${PROJECT_BINARY_DIR}/parser.tab.cpp
166 DEFINES_FILE ${PROJECT_BINARY_DIR}/chuffed/flatzinc/parser.tab.h
167 COMPILE_FLAGS "-l"
168 )
169else()
170 message(WARNING "Bison cannot be run. Using cached file, which may be out of date.")
171 set(BISON_FZNParser_OUTPUTS
172 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.tab.cpp
173 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/parser.tab.h
174 )
175endif()
176
177find_package(FLEX)
178if(FLEX_FOUND AND BISON_FOUND)
179 flex_target(FZNLexer
180 ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/lexer.lxx
181 ${PROJECT_BINARY_DIR}/lexer.yy.cpp
182 COMPILE_FLAGS "-L"
183 )
184 add_flex_bison_dependency(FZNLexer FZNParser)
185else()
186 message(WARNING "Flex cannot be run. Using cached file, which may be out of date.")
187 set(FLEX_FZNLexer_OUTPUTS ${PROJECT_SOURCE_DIR}/chuffed/flatzinc/lexer.yy.cpp)
188endif()
189
190add_library(chuffed_fzn
191 chuffed/flatzinc/registry.cpp
192 chuffed/flatzinc/flatzinc.cpp
193 ${FLEX_FZNLexer_OUTPUTS}
194 ${BISON_FZNParser_OUTPUTS}
195 chuffed/flatzinc/flatzinc.h
196 chuffed/flatzinc/ast.h
197)
198
199add_executable(fzn-chuffed chuffed/flatzinc/fzn-chuffed.cpp)
200target_link_libraries(fzn-chuffed chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
201
202# ------------- Chuffed Examples -------------
203
204add_executable(bibd EXCLUDE_FROM_ALL chuffed/examples/bibd.cpp)
205target_link_libraries(bibd chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
206
207add_executable(blackhole EXCLUDE_FROM_ALL chuffed/examples/blackhole.cpp)
208target_link_libraries(blackhole chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
209
210add_executable(concert_hall EXCLUDE_FROM_ALL chuffed/examples/concert_hall.cpp)
211target_link_libraries(concert_hall chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
212
213add_executable(concert_hall_sym EXCLUDE_FROM_ALL chuffed/examples/concert_hall_sym.cpp)
214target_link_libraries(concert_hall_sym chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
215
216add_executable(golomb EXCLUDE_FROM_ALL chuffed/examples/golomb.cpp)
217target_link_libraries(golomb chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
218
219add_executable(graceful_graph EXCLUDE_FROM_ALL chuffed/examples/graceful_graph.cpp)
220target_link_libraries(graceful_graph chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
221
222add_executable(graph_colouring EXCLUDE_FROM_ALL chuffed/examples/graph_colouring.cpp)
223target_link_libraries(graph_colouring chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
224
225add_executable(graph_colouring_sym EXCLUDE_FROM_ALL chuffed/examples/graph_colouring_sym.cpp)
226target_link_libraries(graph_colouring_sym chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
227
228add_executable(graph_colouring_sym2 EXCLUDE_FROM_ALL chuffed/examples/graph_colouring_sym2.cpp)
229target_link_libraries(graph_colouring_sym2 chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
230
231add_executable(grid_colouring EXCLUDE_FROM_ALL chuffed/examples/grid_colouring.cpp)
232target_link_libraries(grid_colouring chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
233
234add_executable(latin_square EXCLUDE_FROM_ALL chuffed/examples/latin_square.cpp)
235target_link_libraries(latin_square chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
236
237add_executable(magic_square EXCLUDE_FROM_ALL chuffed/examples/magic_square.cpp)
238target_link_libraries(magic_square chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
239
240add_executable(mosp EXCLUDE_FROM_ALL chuffed/examples/mosp.cpp)
241target_link_libraries(mosp chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
242
243add_executable(nn_queens EXCLUDE_FROM_ALL chuffed/examples/nn_queens.cpp)
244target_link_libraries(nn_queens chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
245
246add_executable(non EXCLUDE_FROM_ALL chuffed/examples/non.cpp)
247target_link_libraries(non chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
248
249add_executable(photo EXCLUDE_FROM_ALL chuffed/examples/photo.cpp)
250target_link_libraries(photo chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
251
252add_executable(queens EXCLUDE_FROM_ALL chuffed/examples/queens.cpp)
253target_link_libraries(queens chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
254
255add_executable(rcpsp EXCLUDE_FROM_ALL chuffed/examples/rcpsp.cpp)
256target_link_libraries(rcpsp chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
257
258add_executable(shift EXCLUDE_FROM_ALL chuffed/examples/shift.cpp)
259target_link_libraries(shift chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
260
261add_executable(steel_mill EXCLUDE_FROM_ALL chuffed/examples/steel_mill.cpp)
262target_link_libraries(steel_mill chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
263
264add_executable(wreg_shift EXCLUDE_FROM_ALL chuffed/examples/wreg_shift.cpp)
265target_link_libraries(wreg_shift chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT})
266
267find_package(ZLIB)
268if(ZLIB_FOUND)
269 include_directories(${ZLIB_INCLUDE_DIRS})
270
271 add_executable(cross EXCLUDE_FROM_ALL chuffed/examples/cross.cpp)
272 target_link_libraries(cross chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
273
274 add_executable(fdpent EXCLUDE_FROM_ALL chuffed/examples/fdpent.cpp)
275 target_link_libraries(fdpent chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
276
277 add_executable(nurse EXCLUDE_FROM_ALL chuffed/examples/nurse.cpp)
278 target_link_libraries(nurse chuffed_fzn chuffed ${CMAKE_THREAD_LIBS_INIT} ${ZLIB_LIBRARIES})
279
280 set(ZLIB_EXAMPLES
281 cross
282 fdpent
283 nurse
284 )
285endif()
286
287add_custom_target(examples)
288add_dependencies(examples
289 bibd
290 blackhole
291 concert_hall
292 concert_hall_sym
293 golomb
294 graceful_graph
295 graph_colouring
296 graph_colouring_sym
297 graph_colouring_sym2
298 grid_colouring
299 latin_square
300 magic_square
301 mosp
302 nn_queens
303 non
304 photo
305 queens
306 rcpsp
307 shift
308 steel_mill
309 wreg_shift
310 ${ZLIB_EXAMPLES}
311)
312
313# ------------- TARGET install -------------
314include(GNUInstallDirs)
315
316file(RELATIVE_PATH REL_INSTALL_BINARY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/minizinc/solvers ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/fzn-chuffed)
317configure_file(chuffed.msc.in chuffed.msc)
318
319install(TARGETS fzn-chuffed RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
320install(DIRECTORY chuffed/flatzinc/mznlib/ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/minizinc/chuffed PATTERN "chuffed/flatzinc/mznlib/*")
321install(FILES ${CMAKE_BINARY_DIR}/chuffed.msc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/minizinc/solvers)