1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
{
lib,
stdenv,
boost,
cmake,
fetchFromGitHub,
fetchpatch,
graphviz,
igraph,
llvmPackages,
ninja,
nlohmann_json,
pkg-config,
python3Packages,
qtbase,
qtsvg,
quazip,
rapidjson,
spdlog,
verilator,
wrapQtAppsHook,
z3,
}:
stdenv.mkDerivation rec {
version = "4.4.1";
pname = "hal-hardware-analyzer";
src = fetchFromGitHub {
owner = "emsec";
repo = "hal";
rev = "v${version}";
sha256 = "sha256-8kmYeqsmqR7tY044rZb3KuEAVGv37IObX6k1qjXWG0A=";
};
patches = [
(fetchpatch {
name = "de-vendor-nlohmann-json.patch";
# https://github.com/emsec/hal/pull/596
url = "https://github.com/emsec/hal/commit/f8337d554d80cfa2588512696696fd4c878dd7a3.patch";
hash = "sha256-QjgvcduwbFccC807JFOevlTfO3KiL9T3HSqYmh3sXAQ=";
})
(fetchpatch {
name = "fix-vendored-igraph-regression.patch";
# https://github.com/emsec/hal/pull/596
url = "https://github.com/emsec/hal/commit/fe1fe74719ab4fef873a22e2b28cce0c57d570e0.patch";
hash = "sha256-bjbW4pr04pP0TCuSdzPcV8h6LbLWMvdGSf61RL9Ju6E=";
})
./4.4.1-newer-spdlog-fmt-compat.patch
./resynthesis-fix-narrowing-conversion.patch
];
# make sure bundled dependencies don't get in the way - install also otherwise
# copies them in full to the output, bloating the package
postPatch = ''
shopt -s extglob
rm -rf deps/!(abc|sanitizers-cmake|subprocess)/*
shopt -u extglob
# https://github.com/emsec/hal/issues/602
sed -i 1i'#include <algorithm>' include/hal_core/utilities/utils.h
'';
nativeBuildInputs = [
cmake
ninja
pkg-config
wrapQtAppsHook
];
buildInputs =
[
qtbase
qtsvg
boost
rapidjson
igraph
nlohmann_json
spdlog
graphviz
verilator
z3
quazip
]
++ (with python3Packages; [
python
pybind11
])
++ lib.optional stdenv.cc.isClang llvmPackages.openmp;
cmakeFlags = with lib.versions; [
"-DHAL_VERSION_RETURN=${version}"
"-DHAL_VERSION_MAJOR=${major version}"
"-DHAL_VERSION_MINOR=${minor version}"
"-DHAL_VERSION_PATCH=${patch version}"
"-DHAL_VERSION_TWEAK=0"
"-DHAL_VERSION_ADDITIONAL_COMMITS=0"
"-DHAL_VERSION_DIRTY=false"
"-DHAL_VERSION_BROKEN=false"
"-DENABLE_INSTALL_LDCONFIG=off"
"-DUSE_VENDORED_PYBIND11=off"
"-DUSE_VENDORED_SPDLOG=off"
"-DUSE_VENDORED_QUAZIP=off"
"-DUSE_VENDORED_IGRAPH=off"
"-DUSE_VENDORED_NLOHMANN_JSON=off"
"-DBUILD_ALL_PLUGINS=on"
];
# needed for macos build - this is why we use wrapQtAppsHook instead of
# the qt mkDerivation - the latter forcibly overrides this.
cmakeBuildType = "MinSizeRel";
# https://github.com/emsec/hal/issues/598
NIX_CFLAGS_COMPILE = lib.optional stdenv.hostPlatform.isAarch64 "-flax-vector-conversions";
# some plugins depend on other plugins and need to be able to load them
postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
find $out/lib/hal_plugins -name '*.so*' | while read -r f ; do
patchelf --set-rpath "$(patchelf --print-rpath "$f"):$out/lib/hal_plugins" "$f"
done
'';
meta = with lib; {
description = "Comprehensive reverse engineering and manipulation framework for gate-level netlists";
mainProgram = "hal";
homepage = "https://github.com/emsec/hal";
license = licenses.mit;
platforms = platforms.unix;
maintainers = with maintainers; [
ris
shamilton
];
};
}
|