nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 buildGhidraExtension,
6 z3,
7 gradle,
8}:
9let
10 ghidraPlatformName =
11 {
12 x86_64-linux = "linux_x86_64";
13 aarch64-linux = "linux_x86_64";
14 x86_64-darwin = "mac_x86_64";
15 aarch64-darwin = "mac_arm_64";
16 }
17 .${stdenv.hostPlatform.system}
18 or (throw "${stdenv.hostPlatform.system} is an unsupported platform");
19
20 z3_lib = (
21 z3.override {
22 javaBindings = true;
23 jdk = gradle.jdk;
24 }
25 );
26
27 self = buildGhidraExtension (finalAttrs: {
28 pname = "kaiju";
29 version = "250709";
30
31 src = fetchFromGitHub {
32 owner = "CERTCC";
33 repo = "kaiju";
34 rev = finalAttrs.version;
35 hash = "sha256-xt/h0HeFCk4s1GIr3wKegGCGIUxMPFfyKKJ9o/WId/E=";
36 };
37
38 buildInputs = [
39 z3_lib
40 ];
41
42 # used to copy java bindings from nixpkgs z3 package instead of having kaiju's build.gradle build gradle from source
43 # https://github.com/CERTCC/kaiju/blob/c9dbb55484b3d2a6abd9dfca2197cd00fb7ee3c1/build.gradle#L189
44 preBuild = ''
45 mkdir -p build/cmake/z3/java-bindings
46 ln -s ${lib.getOutput "java" z3_lib}/share/java/com.microsoft.z3.jar build/cmake/z3/java-bindings
47 mkdir -p os/${ghidraPlatformName}
48 cp ${lib.getOutput "java" z3_lib}/lib/* os/${ghidraPlatformName}
49 '';
50
51 gradleFlags = [ "-PKAIJU_SKIP_Z3_BUILD=true" ];
52
53 mitmCache = gradle.fetchDeps {
54 pkg = self;
55 data = ./deps.json;
56 };
57
58 meta = {
59 description = "Java implementation of some features of the CERT Pharos Binary Analysis Framework for Ghidra";
60 homepage = "https://github.com/CERTCC/kaiju";
61 downloadPage = "https://github.com/CERTCC/kaiju/releases/tag/${finalAttrs.version}";
62 license = lib.licenses.bsd3;
63 maintainers = [ lib.maintainers.ivyfanchiang ];
64 platforms = [
65 "x86_64-linux"
66 "aarch64-linux"
67 "x86_64-darwin"
68 "aarch64-darwin"
69 ];
70 };
71 });
72in
73self