nixpkgs/pkgs/by-name/sy/symcc/package.nix
2025-01-07 12:55:12 +00:00

70 lines
1.4 KiB
Nix

{
stdenv,
lib,
fetchFromGitHub,
cmake,
ninja,
llvm,
clang,
z3,
makeWrapper,
}:
stdenv.mkDerivation {
pname = "symcc";
version = "1.0-unstable-2024-07-16";
src = fetchFromGitHub {
owner = "eurecom-s3";
repo = "symcc";
rev = "65a3633992318ded8939629eda54022932fd582d";
hash = "sha256-WzZLeq+if7FyQKkSMDiqxnjtbb7eg8EVuNkCwxyEryM=";
fetchSubmodules = true;
};
cmakeFlags = [
"-DZ3_TRUST_SYSTEM_VERSION=on"
"-DSYMCC_RT_BACKEND=qsym"
];
postPatch = ''
echo 'install(TARGETS SymCC LIBRARY DESTINATION '\$'{CMAKE_INSTALL_LIBDIR})' >> CMakeLists.txt
'';
postInstall = ''
cp SymCCRuntime-prefix/src/SymCCRuntime-build/libsymcc-rt.{a,so} $out/lib/
install -Dm755 symcc sym++ -t $out/bin
wrapProgram $out/bin/symcc \
--set SYMCC_RUNTIME_DIR $out/lib \
--set SYMCC_PASS_DIR $out/lib
wrapProgram $out/bin/sym++ \
--set SYMCC_RUNTIME_DIR $out/lib \
--set SYMCC_PASS_DIR $out/lib
'';
nativeBuildInputs = [
cmake
ninja
llvm
clang
makeWrapper
];
buildInputs = [
llvm
z3
];
meta = {
description = "Efficient compiler-based symbolic execution";
homepage = "https://www.s3.eurecom.fr/tools/symbolic_execution/symcc.html";
license = lib.licenses.gpl3Plus;
maintainers = [ lib.maintainers.dump_stack ];
platforms = lib.platforms.linux;
mainProgram = "symcc";
};
}