PicoSAT is a small, fast SAT solver written in C by Armin Biere. It's been around since 2007 and is still widely used, but it doesn't have a public repository or issue tracker, and there hasn't been a release since version 965 (January 2016). If you depend on PicoSAT and find a bug, there's nowhere to send a fix, so everyone ends up carrying their own private patches.
This repo is meant to be that place. It contains the full release history of PicoSAT as a git repo, plus fixes on top of the last release. If you use PicoSAT and have a fix, please open a pull request.
Each of the twelve releases available from the PicoSAT website is a single commit, in chronological order, tagged by version number: v535, v632, v846, v913, v936, v951, v953, v954, v957, v959, v960 and v965. These commits are imported verbatim from the release tarballs. They're authored by Armin Biere and dated with the release date, and each commit message includes the URL and SHA-256 hash of the tarball it came from, so you can check that the tree matches exactly.
The commits after v965 are fixes that aren't in any upstream release:
- musl:
picosat.cincludes<sys/unistd.h>, which isn't a standard header and doesn't exist on musl-based systems like Alpine Linux. It now includes<unistd.h>instead. - Windows x64: when
enlarge()reallocates its arrays, it rebases pointers by a delta stored in along, which is only 32 bits on Windows x64. If an array moves by more than 2GB, every rebased pointer is garbage and the next solve crashes. The delta is now aptrdiff_t.
These fixes were originally applied at build time by the libpicosat recipe that builds PicoSAT for Julia, which is used by Resolver.jl.
The build system is unchanged from upstream:
./configure.sh && makeRun ./configure.sh --help to see options; --shared builds a shared library. The API is documented in picosat.h. The original upstream README and NEWS files are included as they were released.
PicoSAT is MIT licensed; see LICENSE. Contributions to this repo are made under the same license.