|
1 |
| -{ stdenv |
2 |
| -, fetchzip |
3 |
| -, fetchurl |
| 1 | +{ lib |
| 2 | +, stdenv |
4 | 3 | , fetchFromGitHub
|
5 |
| -, symlinkJoin |
6 | 4 | , python3
|
7 |
| -, bash |
8 | 5 | , cmake
|
9 | 6 | , ninja
|
10 |
| -, git |
11 |
| -, |
| 7 | +, llvmPackages |
| 8 | +, xed |
| 9 | +, glog |
| 10 | +, gtest |
| 11 | +, sleigh |
| 12 | +, breakpointHook |
| 13 | +, git-am-shim |
| 14 | +, abseil-cpp |
12 | 15 | }:
|
13 |
| - |
| 16 | +with llvmPackages; |
14 | 17 | let
|
15 |
| - cxx-common = fetchzip { |
16 |
| - url = "https://github.com/lifting-bits/cxx-common/releases/download/v0.2.7/vcpkg_ubuntu-20.04_llvm-14_amd64.tar.xz"; |
17 |
| - hash = "sha256-FTw/GFLasAM5rKvgbltLNwJ8464x2O5I2TZMtuMSrVo="; |
18 |
| - }; |
| 18 | +clang = llvmPackages.libcxxClang; |
| 19 | + # cxx-all = fetchurl { |
| 20 | + # url = "https://github.com/lifting-bits/cxx-common/releases/download/v0.6.4/vcpkg_ubuntu-22.04_llvm-16_amd64.tar.xz"; |
| 21 | + # hash = "sha256-RiGiHgU4XfC9hZ/bVbBBEHTztSU6OOUAz6VZBXIVpxg="; |
| 22 | + # }; |
| 23 | + |
| 24 | + # cxx-common = runCommand "cxx-common-reduced" {} |
| 25 | + # '' |
| 26 | + # mkdir $out |
| 27 | + # cd $out |
| 28 | + # XZ_OPT='-T0' tar xf ${cxx-all} --strip-components=1 |
| 29 | + # rm -rf installed/*/{tools,share,include}/{llvm,clang,mlir} installed/*/lib/lib{clang,LLVM,MLIR,mlir,LTO}* |
| 30 | + # ''; |
| 31 | + |
| 32 | + cxx-common = fetchFromGitHub { |
| 33 | + owner = "lifting-bits"; |
| 34 | + repo = "cxx-common"; |
| 35 | + rev = "v0.6.4"; |
| 36 | + hash = ""; |
19 | 37 |
|
20 |
| - ghidra = fetchFromGitHub { |
21 |
| - owner = "NationalSecurityAgency"; |
22 |
| - repo = "ghidra"; |
23 |
| - rev = "Ghidra_10.1.4_build"; |
24 |
| - leaveDotGit = true; |
25 |
| - hash = "sha256-8W2uK7F/B8a2MALtGIq1/QiTJeynDod5xHpR4qU6p9g="; |
| 38 | + postFetch = '' |
| 39 | + substituteInPlace ports/xed/XEDConfig.cmake \ |
| 40 | + --replace "''${ROOT}" '${xed}' |
| 41 | + ''; |
26 | 42 | };
|
27 | 43 |
|
28 |
| - sleigh = fetchFromGitHub { |
| 44 | + remill-src = fetchFromGitHub { |
29 | 45 | owner = "lifting-bits";
|
30 |
| - repo = "sleigh"; |
31 |
| - rev = "5ee2f2c16250a6529108e6a6fff89e0f147502d2"; |
32 |
| - leaveDotGit = true; |
33 |
| - hash = "sha256-4p2G6kQxvkjRtWxYCaWytHhQ+UsOIeG55a4TAkEZsek="; |
| 46 | + repo = "remill"; |
| 47 | + rev = "391261923a036196ad9dd2c8213c0193ad727cd9"; |
| 48 | + hash = "sha256-DiskkPngmnq4adR5ew2h1vFvD7y3MWdoo0AcNv+OaAU="; |
34 | 49 | };
|
35 | 50 |
|
36 |
| - sleigh2 = symlinkJoin { |
37 |
| - name = "sleigh"; |
38 |
| - paths = [ sleigh ]; |
39 |
| - postBuild = '' |
40 |
| - CMAKE=$out/src/setup-ghidra-source.cmake |
41 |
| - cp --remove-destination -v $(readlink $CMAKE) $CMAKE |
42 |
| - # substituteInPlace $CMAKE \ |
43 |
| - # --replace 'GIT_REPOSITORY https://github.com/NationalSecurityAgency/ghidra' "SOURCE_DIR ${ghidra}" |
44 |
| - ''; |
| 51 | + sleigh' = sleigh.overrideAttrs { |
| 52 | + sleigh_ADDITIONAL_PATCHES = [ |
| 53 | + "${remill-src}/patches/sleigh/0001-AARCH64base.patch" |
| 54 | + "${remill-src}/patches/sleigh/0001-AARCH64instructions.patch" |
| 55 | + "${remill-src}/patches/sleigh/0001-ARM.patch" |
| 56 | + "${remill-src}/patches/sleigh/0001-ARMTHUMBinstructions.patch" |
| 57 | + "${remill-src}/patches/sleigh/0001-ppc_common.patch" |
| 58 | + "${remill-src}/patches/sleigh/0001-ppc_instructions.patch" |
| 59 | + "${remill-src}/patches/sleigh/0001-ppc_isa.patch" |
| 60 | + "${remill-src}/patches/sleigh/0001-ppc_vle.patch" |
| 61 | + "${remill-src}/patches/sleigh/0001-quicciii.patch" |
| 62 | + "${remill-src}/patches/sleigh/x86-ia.patch" |
| 63 | + ]; |
45 | 64 | };
|
46 | 65 |
|
| 66 | + ghidra-fork = fetchFromGitHub { |
| 67 | + owner = "trail-of-forks"; |
| 68 | + repo = "ghidra"; |
| 69 | + rev = "e7196d8b943519d3aa5eace6a988cda3aa6aca5c"; |
| 70 | + hash = "sha256-uOaTY9dYVAyu5eU2tLKNJWRwN98OQkCVynwQvjeBQB8="; |
| 71 | + }; |
47 | 72 | in
|
48 |
| -stdenv.mkDerivation rec { |
| 73 | +stdenv.mkDerivation (self: { |
49 | 74 | pname = "remill";
|
50 |
| - version = "v5.0.7"; |
| 75 | + version = "unstable"; |
51 | 76 |
|
52 |
| - src = fetchFromGitHub { |
53 |
| - owner = "lifting-bits"; |
54 |
| - repo = "remill"; |
55 |
| - rev = "v5.0.7"; |
56 |
| - hash = "sha256-oOEw+V5fmCoNhB9a1Y+US3Ff0M50jb9qhBKsXyUwqY4="; |
57 |
| - leaveDotGit = true; |
58 |
| - }; |
| 77 | + src = remill-src; |
| 78 | + |
| 79 | + nativeBuildInputs = [ python3 cmake clang breakpointHook ]; |
| 80 | + buildInputs = [ sleigh' llvm xed glog gtest abseil-cpp ]; |
| 81 | + |
| 82 | + # cmakeXED = '' |
| 83 | + # include(${cxx-common}/ports/xed/XEDConfig.cmake) |
| 84 | + # ''; |
| 85 | + |
| 86 | + # NIX_DEBUG = 1; |
| 87 | + |
| 88 | + preConfigure = '' |
| 89 | + ghidra=$(mktemp -d) |
| 90 | + cp -r --no-preserve=mode ${ghidra-fork}/. $ghidra |
| 91 | +
|
| 92 | + substituteInPlace CMakeLists.txt \ |
| 93 | + --replace 'FetchContent_Declare(sleigh' 'find_package(sleigh REQUIRED COMPONENTS Support) ${"\n"} message(STATUS "ignore FetchContent(Sleigh "' \ |
| 94 | + --replace 'FetchContent_MakeAvailable(sleigh)' "" |
59 | 95 |
|
60 |
| - nativeBuildInputs = [ python3 cmake ninja ]; |
| 96 | + substituteInPlace CMakeLists.txt \ |
| 97 | + --replace 'GIT_REPOSITORY https://github.com/trail-of-forks/ghidra.git' "SOURCE_DIR $ghidra" |
61 | 98 |
|
62 |
| - configurePhase = "true"; |
| 99 | + substituteInPlace CMakeLists.txt \ |
| 100 | + --replace 'XED::XED' xed \ |
| 101 | + --replace 'find_package(XED CONFIG REQUIRED)' "" \ |
| 102 | + --replace 'find_package(Z3 CONFIG REQUIRED)' "" \ |
| 103 | + --replace 'InstallExternalTarget(' 'message(STATUS ' \ |
63 | 104 |
|
64 |
| - buildPhase = '' |
65 |
| - which curl |
66 |
| - exit |
67 |
| - substituteInPlace scripts/build.sh \ |
68 |
| - --replace 'source /etc/os-release' 'ID=arch' \ |
69 |
| - --replace 'curl -LO "''${URL}"' 'true' \ |
70 |
| - --replace 'tar -xJf "''${GITHUB_LIBS}" ''${TAR_OPTIONS}' 'mkdir -p $LIBRARY_VERSION && cp -r ${cxx-common}/. $LIBRARY_VERSION' |
71 | 105 |
|
| 106 | + substituteInPlace CMakeLists.txt \ |
| 107 | + --replace "sleigh_compile(" "set(sleigh_BINARY_DIR $out) ${"\n"} sleigh_compile(" |
72 | 108 |
|
73 |
| - ghidra=$(mktemp -d) |
74 |
| - cp -r ${ghidra}/. $ghidra |
75 |
| - echo ghidra = $ghidra |
| 109 | + cp -v $(command -v clang++) . |
| 110 | + substituteInPlace ./clang++ --replace 'cInclude=1' cInclude=0 |
76 | 111 |
|
77 |
| - sleigh=$(mktemp -d) |
78 |
| - cp -r ${sleigh}/. $sleigh |
79 |
| - echo sleigh = $sleigh |
| 112 | + platform=${lib.replaceStrings ["-" "."] ["_" "_"] stdenv.targetPlatform.config} |
| 113 | + LIBCXX=$( |
| 114 | + source ${clang}/nix-support/utils.bash; |
| 115 | + source ${clang}/nix-support/add-flags.sh; |
| 116 | + eval 'echo $NIX_CFLAGS_COMPILE_'$platform ' $NIX_CXXSTDLIB_COMPILE_'$platform) |
80 | 117 |
|
81 |
| - cat $sleigh/src/setup-ghidra-source.cmake |
82 |
| - substituteInPlace $sleigh/src/setup-ghidra-source.cmake \ |
83 |
| - --replace 'GIT_REPOSITORY https://github.com/NationalSecurityAgency/ghidra' "SOURCE_DIR $ghidra" |
| 118 | + substituteInPlace cmake/BCCompiler.cmake \ |
| 119 | + --replace 'find_package(Clang CONFIG REQUIRED)' "" \ |
| 120 | + --replace 'get_target_property(CLANG_PATH clang LOCATION)' "" \ |
| 121 | + --replace 'get_target_property(LLVMLINK_PATH llvm-link LOCATION)' "" \ |
| 122 | + --replace '$'{CLANG_PATH} $(pwd)/clang++ \ |
| 123 | + --replace '$'{LLVMLINK_PATH} $(command -v llvm-link) \ |
| 124 | + --replace '$'{include_directory_list} '$'{include_directory_list}" -include cstdlib" |
84 | 125 |
|
85 |
| - substituteInPlace CMakeLists.txt \ |
86 |
| - --replace 'GIT_REPOSITORY https://github.com/lifting-bits/sleigh.git' "SOURCE_DIR $sleigh" |
| 126 | + # failing due to "no thread api" and incorrectly including glibc |
87 | 127 |
|
88 |
| - substituteInPlace |
| 128 | + export CXXFLAGS='-include cstdint -include cstdlib' |
89 | 129 |
|
90 |
| - bash scripts/build.sh \ |
91 |
| - --prefix $out \ |
92 |
| - --extra-cmake-args "-DCMAKE_BUILD_TYPE=Release" |
| 130 | + substituteInPlace lib/Arch/*/Runtime/CMakeLists.txt \ |
| 131 | + --replace 'c++17' 'c++20' |
93 | 132 | '';
|
94 | 133 |
|
95 |
| -} |
| 134 | + cmakeFlags = [ |
| 135 | + "-DCMAKE_VERBOSE_MAKEFILE=True" |
| 136 | + # "-DCMAKE_TOOLCHAIN_FILE=${cxx-common}/scripts/buildsystems/vcpkg.cmake" |
| 137 | + # "-DCMAKE_PREFIX_PATH=${cxx-common}/installed/x64-linux-rel" |
| 138 | + "-DDVCPKG_TARGET_TRIPLET=x64-linux-rel" |
| 139 | + "-DGIT_EXECUTABLE=${git-am-shim}" |
| 140 | + "-DCMAKE_VERBOSE_MAKEFILE=True" |
| 141 | + "-DFETCHCONTENT_QUIET=OFF" |
| 142 | + |
| 143 | + # "-DCMAKE_BC_COMPILER=${llvmPackages.libcxxClang}/bin/clang" |
| 144 | + # "-DCMAKE_BC_LINKER=${llvmPackages.llvm}/bin/llvm-link" |
| 145 | + # "-DCLANG_PATH=${llvmPackages.libcxxClang}/bin/clang" |
| 146 | + ]; |
| 147 | + |
| 148 | +}) |
0 commit comments