https://github.com/meteor/minisat
A minimalistic and high-performance SAT solver
https://github.com/meteor/minisat
Last synced: 5 months ago
JSON representation
A minimalistic and high-performance SAT solver
- Host: GitHub
- URL: https://github.com/meteor/minisat
- Owner: meteor
- License: other
- Fork: true (niklasso/minisat)
- Created: 2014-11-08T14:10:00.000Z (over 10 years ago)
- Default Branch: emscripten
- Last Pushed: 2015-03-06T01:55:11.000Z (over 10 years ago)
- Last Synced: 2024-09-25T13:04:50.097Z (9 months ago)
- Language: C++
- Homepage: minisat.se
- Size: 494 KB
- Stars: 2
- Watchers: 16
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
### Building MiniSat with Emscripten for the Meteor logic-solver
1. Install Emscripten. On a Mac with Brew, `brew install emscripten` will do it.
(Last tested with emscripten 1.28.0.)
2. Check that you have `emmake`, `emcc`, and `node` in your path. If you don't
have `node` in your path, you can locally modify the script in the next step
where it says `NODE=node`. (Node is only used to run a quick sanity check
after compiling.)
2. In the repo directory, run `meteor/make-emscripten.sh`.
3. That's it. If everything worked, the build product is `build/minisat.js`.Notes:
* The "native" part of logic-solver is in `meteor/logic-solver.cc`. If you add
functions to it, you need to also list them in `make-emscripten.sh`.* We wrap the entire Emscripten output in a closure, so that we can create
multiple instances of the entire C environment (including the heap).
MiniSat's C++ classes are slightly leaky, and it doesn't seem wise to have
multiple solver instances sharing a heap on the "native" side. Better to
fully isolate instances, and not rely on (or even call) the destructor.* There's heap allocation instrumentation, hackily implemented, that doesn't
actually run unless you put the compiler in debug mode (see comment in the
make script about the -g flag). You also need to uncomment the lines
starting with `/////` in `meteor/midamble.js` (which have been disabled
so that they don't interfere with asm.js optimization).* You want to leave minification on (no -g flag), because unlike
client-side code served by Meteor (which is minified anyway), Node
runs this code directly. Minification actually helps the JS compile
time quite a bit!