nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 101 lines 2.1 kB view raw
1{ 2 stdenv, 3 fetchFromGitHub, 4 lib, 5 python3, 6 meson, 7 ninja, 8 git, 9 btor2tools, 10 symfpu, 11 gtest, 12 gmp, 13 cadical, 14 cryptominisat, 15 kissat, 16 zlib, 17 pkg-config, 18 cmake, 19 aiger, 20}: 21 22stdenv.mkDerivation (finalAttrs: { 23 pname = "bitwuzla"; 24 version = "0.8.1"; 25 26 src = fetchFromGitHub { 27 owner = "bitwuzla"; 28 repo = "bitwuzla"; 29 rev = finalAttrs.version; 30 hash = "sha256-4Gf06aZ3iBEu0bNZAGgWCXVgKA0ew37Zf6XArnlVAXw="; 31 }; 32 33 strictDeps = true; 34 35 nativeBuildInputs = [ 36 meson 37 pkg-config 38 git 39 ninja 40 cmake 41 ]; 42 43 buildInputs = [ 44 cadical 45 cryptominisat 46 btor2tools 47 symfpu 48 gmp 49 zlib 50 kissat 51 aiger 52 ]; 53 54 mesonFlags = [ 55 # note: the default value for default_library fails to link dynamic dependencies 56 # but setting it to shared works even in pkgsStatic 57 "-Ddefault_library=shared" 58 "-Dcryptominisat=true" 59 "-Dkissat=true" 60 "-Daiger=true" 61 62 (lib.strings.mesonEnable "testing" finalAttrs.finalPackage.doCheck) 63 ]; 64 65 nativeCheckInputs = [ python3 ]; 66 checkInputs = [ gtest ]; 67 # two tests fail on darwin 68 doCheck = stdenv.hostPlatform.isLinux; 69 doInstallCheck = true; 70 installCheckPhase = '' 71 runHook preInstallCheck 72 73 export needle=11011110101011011011111011101111 74 75 cat > file.smt2 <<EOF 76 (declare-fun a () (_ BitVec 32)) 77 (assert (= a #b$needle)) 78 (check-sat) 79 (get-model) 80 EOF 81 82 # check each backend 83 ( 84 set -euxo pipefail; 85 $out/bin/bitwuzla -S cms -j 3 -m file.smt2 | tee /dev/stderr | grep $needle; 86 $out/bin/bitwuzla -S cadical -m file.smt2 | tee /dev/stderr | grep $needle; 87 $out/bin/bitwuzla -S kissat -m file.smt2 | tee /dev/stderr | grep $needle; 88 ) 89 90 runHook postInstallCheck 91 ''; 92 93 meta = { 94 description = "SMT solver for fixed-size bit-vectors, floating-point arithmetic, arrays, and uninterpreted functions"; 95 mainProgram = "bitwuzla"; 96 homepage = "https://bitwuzla.github.io"; 97 license = lib.licenses.mit; 98 platforms = lib.platforms.unix; 99 maintainers = with lib.maintainers; [ symphorien ]; 100 }; 101})