mirror of https://github.com/pwndbg/pwndbg.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
3.6 KiB
Nix
137 lines
3.6 KiB
Nix
# Copied from: https://github.com/NixOS/nixpkgs/pull/377225
|
|
{
|
|
cmake,
|
|
devExtraCmakeFlags ? [ ],
|
|
lib,
|
|
monorepoSrc ? null,
|
|
ninja,
|
|
patches ? [ ],
|
|
python3,
|
|
release_version,
|
|
runCommand,
|
|
src ? null,
|
|
stdenv,
|
|
version,
|
|
clangPatches ? [ ],
|
|
}:
|
|
|
|
let
|
|
# This is a synthetic package which is not an official part of the llvm-project.
|
|
# See https://github.com/NixOS/nixpkgs/pull/362384 for discussion.
|
|
#
|
|
# LLVM has tools that run at build time. In native builds, these are
|
|
# built as a part of the usual build, but in cross builds they need to
|
|
# come from buildPackages.
|
|
#
|
|
# In many scenarios this is a small problem because LLVM from
|
|
# buildPackages is already available as a build; but if cross building a
|
|
# version of LLVM which is not available (e.g. a new git commit of LLVM)
|
|
# this results in two builds of LLVM and clang, one native and one for the
|
|
# cross.
|
|
#
|
|
# Full builds of LLVM are expensive; and unnecessary in this scenario. We
|
|
# don't need a native LLVM, only a native copy of the tools which run at
|
|
# build time. This is only tablegen and related tooling, which are cheap
|
|
# to build.
|
|
pname = "llvm-tblgen";
|
|
|
|
src' =
|
|
if monorepoSrc != null then
|
|
runCommand "${pname}-src-${version}" { } (
|
|
''
|
|
mkdir -p "$out"
|
|
''
|
|
+ lib.optionalString (lib.versionAtLeast release_version "14") ''
|
|
cp -r ${monorepoSrc}/cmake "$out"
|
|
cp -r ${monorepoSrc}/third-party "$out"
|
|
''
|
|
+ ''
|
|
cp -r ${monorepoSrc}/llvm "$out"
|
|
cp -r ${monorepoSrc}/clang "$out"
|
|
cp -r ${monorepoSrc}/clang-tools-extra "$out"
|
|
cp -r ${monorepoSrc}/mlir "$out"
|
|
cp -r ${monorepoSrc}/lldb "$out"
|
|
''
|
|
)
|
|
else
|
|
src;
|
|
|
|
self = stdenv.mkDerivation (finalAttrs: rec {
|
|
inherit pname version patches;
|
|
|
|
src = src';
|
|
sourceRoot = "${src.name}/llvm";
|
|
|
|
postPatch = ''
|
|
(
|
|
cd ../clang
|
|
chmod u+rwX -R .
|
|
for p in ${toString clangPatches}
|
|
do
|
|
patch -p1 < $p
|
|
done
|
|
)
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
ninja
|
|
python3
|
|
];
|
|
|
|
cmakeFlags =
|
|
[
|
|
# Projects with tablegen-like tools.
|
|
"-DLLVM_ENABLE_PROJECTS=${
|
|
lib.concatStringsSep ";" (
|
|
[
|
|
"llvm"
|
|
"clang"
|
|
"clang-tools-extra"
|
|
"lldb"
|
|
]
|
|
++ lib.optionals (lib.versionAtLeast release_version "16") [
|
|
"mlir"
|
|
]
|
|
)
|
|
}"
|
|
]
|
|
# LLDB test suite requires libc++ on darwin, but we need compile only lldb-tblgen
|
|
# These flags are needed only for evaluating the CMake file.
|
|
++ lib.optionals stdenv.hostPlatform.isDarwin [
|
|
"-DLLDB_INCLUDE_TESTS=OFF"
|
|
"-DLIBXML2_INCLUDE_DIR=/non-existent"
|
|
]
|
|
++ devExtraCmakeFlags;
|
|
|
|
# List of tablegen targets.
|
|
ninjaFlags =
|
|
[
|
|
"clang-tblgen"
|
|
"llvm-tblgen"
|
|
"lldb-tblgen"
|
|
]
|
|
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
|
"clang-tidy-confusable-chars-gen"
|
|
]
|
|
++ lib.optionals (lib.versionAtLeast release_version "16") [
|
|
"mlir-tblgen"
|
|
]
|
|
++
|
|
lib.optionals ((lib.versionAtLeast release_version "15") && (lib.versionOlder release_version "20"))
|
|
[
|
|
"clang-pseudo-gen" # Removed in LLVM 20 @ ed8f78827895050442f544edef2933a60d4a7935.
|
|
];
|
|
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
|
|
# Remove useless files
|
|
rm -f bin/{lldb-dotest,lldb-repro,llvm-lit,update_core_linalg_named_ops.sh}
|
|
|
|
cp -ar bin $out/bin
|
|
'';
|
|
});
|
|
in
|
|
self
|