Skip to content

Commit ad486f8

Browse files
committed
Set up glucose externalproject
1 parent 5afa929 commit ad486f8

File tree

7 files changed

+81
-17
lines changed

7 files changed

+81
-17
lines changed

.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ jobs:
163163
packages:
164164
- g++-5
165165
install:
166-
- cmake -H. -Bbuild '-DCMAKE_BUILD_TYPE=Release' '-DCMAKE_CXX_FLAGS_RELEASE=-O3' '-DCMAKE_CXX_FLAGS=-Wall -Wpedantic -Werror' '-DCMAKE_CXX_COMPILER=g++-5'
166+
- cmake -H. -Bbuild '-DCMAKE_BUILD_TYPE=Release' '-DCMAKE_CXX_FLAGS_RELEASE=-O3' '-DCMAKE_CXX_FLAGS=-Wall -Wpedantic -Werror' '-DCMAKE_CXX_COMPILER=g++-5' '-Dsat_impl=glucose'
167167
- cmake --build build -- -j4
168168
script: (cd build; ctest -V -L CORE)
169169

CMakeLists.txt

+4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ add_subdirectory(src)
1717

1818
set(enable_cbmc_tests on CACHE BOOL "Whether CBMC tests should be enabled")
1919

20+
set(sat_impl "minisat2" CACHE STRING
21+
"This setting controls the SAT library which is used. Valid values are 'minisat2' and 'glucose'"
22+
)
23+
2024
if(${enable_cbmc_tests})
2125
enable_testing()
2226
endif()

scripts/glucose_CMakeLists.txt

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
cmake_minimum_required(VERSION 3.2)
2+
3+
# CBMC only uses part of glucose.
4+
# This CMakeLists is designed to build just the parts that are needed.
5+
6+
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.9")
7+
set(CMAKE_OSX_ARCHITECTURES "i386;x86_64")
8+
set(CMAKE_BUILD_TYPE RelWithDebInfo)
9+
10+
add_library(glucose-condensed
11+
simp/SimpSolver.cc
12+
core/Solver.cc
13+
)
14+
15+
target_include_directories(glucose-condensed
16+
PUBLIC
17+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
18+
$<INSTALL_INTERFACE:include>
19+
)
20+
21+
install(TARGETS glucose-condensed EXPORT glucose-condensed-targets
22+
LIBRARY DESTINATION lib
23+
ARCHIVE DESTINATION lib
24+
RUNTIME DESTINATION bin
25+
INCLUDES DESTINATION include
26+
)
27+
28+
install(DIRECTORY . DESTINATION include FILES_MATCHING PATTERN "*.h")
29+
30+
install(EXPORT glucose-condensed-targets DESTINATION lib/cmake/glucose-condensed)

src/CMakeLists.txt

+33-5
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,20 @@ set(extern_location ${CMAKE_CURRENT_BINARY_DIR}/extern)
8989
set(extern_include_directory ${extern_location}/include)
9090
file(MAKE_DIRECTORY ${extern_include_directory})
9191

92+
################################################################################
93+
9294
set(minisat_lib ${extern_location}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}minisat2-condensed${CMAKE_STATIC_LIBRARY_SUFFIX})
9395

94-
# minisat download
95-
# This downloads minisat2, then patches it.
96-
# Then, it injects a minimal CMakeLists.txt so that we can build just the bits
97-
# we actually want, without having to update the provided makefile.
96+
# minisat download: This downloads minisat2, then patches it. Then, it
97+
# injects a minimal CMakeLists.txt so that we can build just the bits we
98+
# actually want, without having to update the provided makefile.
99+
98100
ExternalProject_Add(minisat2-extern
99101
PREFIX ${extern_location}
100102
URL http://ftp.debian.org/debian/pool/main/m/minisat2/minisat2_2.2.1.orig.tar.gz
101103
PATCH_COMMAND patch -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/minisat-2.2.1-patch
102104
COMMAND cmake -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/minisat2_CMakeLists.txt CMakeLists.txt
103-
CMAKE_ARGS -DCBMC_INCLUDE_DIR:path=${CMAKE_CURRENT_SOURCE_DIR} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
105+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCBMC_INCLUDE_DIR:path=${CMAKE_CURRENT_SOURCE_DIR}
104106
BUILD_BYPRODUCTS ${minisat_lib}
105107
)
106108

@@ -111,6 +113,32 @@ set_target_properties(minisat2-condensed PROPERTIES
111113
)
112114
add_dependencies(minisat2-condensed minisat2-extern)
113115

116+
################################################################################
117+
118+
set(glucose_lib ${extern_location}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glucose-condensed${CMAKE_STATIC_LIBRARY_SUFFIX})
119+
120+
# glucose download: This downloads glucose, then patches it. Then, it
121+
# injects a minimal CMakeLists.txt so that we can build just the bits we
122+
# actually want, without having to update the provided makefile.
123+
124+
ExternalProject_Add(glucose-extern
125+
PREFIX ${extern_location}
126+
URL http://www.labri.fr/perso/lsimon/downloads/softwares/glucose-syrup.tgz
127+
PATCH_COMMAND patch -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/glucose-syrup-patch
128+
COMMAND cmake -E copy ${CMAKE_CURRENT_SOURCE_DIR}/../scripts/glucose_CMakeLists.txt CMakeLists.txt
129+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
130+
BUILD_BYPRODUCTS ${glucose_lib}
131+
)
132+
133+
add_library(glucose-condensed STATIC IMPORTED)
134+
set_target_properties(glucose-condensed PROPERTIES
135+
IMPORTED_LOCATION ${glucose_lib}
136+
INTERFACE_INCLUDE_DIRECTORIES "${extern_include_directory}"
137+
)
138+
add_dependencies(glucose-condensed glucose-extern)
139+
140+
################################################################################
141+
114142
# Override add_executable to automatically sign the target on OSX.
115143
function(add_executable name)
116144
_add_executable(${name} ${ARGN})

src/solvers/CMakeLists.txt

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# TODO Specify which solver to use (minisat2 etc.)
2-
31
# We may use one of several different solver libraries.
42
# The following files wrap the chosen solver library.
53
# We remove them all from the solver-library sources list, and then add the
@@ -73,11 +71,16 @@ list(REMOVE_ITEM sources
7371

7472
add_library(solvers ${sources} ${headers})
7573

76-
if(TARGET minisat2-extern)
74+
if("${sat_impl}" STREQUAL "minisat2" AND TARGET minisat2-extern)
7775
target_sources(solvers PRIVATE ${minisat2_source})
7876
add_dependencies(solvers minisat2-extern)
79-
target_compile_definitions(solvers PUBLIC HAVE_MINISAT2 __STDC_FORMAT_MACROS __STDC_LIMIT_MACROS)
77+
target_compile_definitions(solvers PUBLIC SATCHECK_MINISAT2 HAVE_MINISAT2 __STDC_FORMAT_MACROS __STDC_LIMIT_MACROS)
8078
target_link_libraries(solvers minisat2-condensed)
79+
elseif("${sat_impl}" STREQUAL "glucose" AND TARGET glucose-extern)
80+
target_sources(solvers PRIVATE ${glucose_source})
81+
add_dependencies(solvers glucose-extern)
82+
target_compile_definitions(solvers PUBLIC SATCHECK_GLUCOSE HAVE_GLUCOSE __STDC_FORMAT_MACROS __STDC_LIMIT_MACROS)
83+
target_link_libraries(solvers glucose-condensed)
8184
endif()
8285

8386
target_link_libraries(solvers util)

src/solvers/sat/satcheck.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ Author: Daniel Kroening, [email protected]
1414

1515
// #define SATCHECK_ZCHAFF
1616
// #define SATCHECK_MINISAT1
17-
#define SATCHECK_MINISAT2
17+
// #define SATCHECK_MINISAT2
1818
// #define SATCHECK_GLUCOSE
1919
// #define SATCHECK_BOOLEFORCE
2020
// #define SATCHECK_PRECOSAT

src/solvers/sat/satcheck_glucose.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ void satcheck_glucose_baset<T>::lcnf(const bvt &bv)
114114
template<typename T>
115115
propt::resultt satcheck_glucose_baset<T>::prop_solve()
116116
{
117-
assert(status!=ERROR);
117+
assert(status!=statust::ERROR);
118118

119119
// We start counting at 1, thus there is one variable fewer.
120120
{
@@ -153,9 +153,8 @@ propt::resultt satcheck_glucose_baset<T>::prop_solve()
153153
{
154154
messaget::status() <<
155155
"SAT checker: instance is SATISFIABLE" << eom;
156-
assert(!solver->model.empty());
157-
status=SAT;
158-
return P_SATISFIABLE;
156+
status=statust::SAT;
157+
return resultt::P_SATISFIABLE;
159158
}
160159
else
161160
{
@@ -165,8 +164,8 @@ propt::resultt satcheck_glucose_baset<T>::prop_solve()
165164
}
166165
}
167166

168-
status=UNSAT;
169-
return P_UNSATISFIABLE;
167+
status=statust::UNSAT;
168+
return resultt::P_UNSATISFIABLE;
170169
}
171170

172171
template<typename T>

0 commit comments

Comments
 (0)