nixpkgs/pkgs/development/compilers/llvm/rocm/llvm.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

170 lines
4.6 KiB
Nix
Raw Normal View History

2022-12-10 19:31:55 +00:00
{ lib
, stdenv
2020-07-10 17:28:08 +00:00
, fetchFromGitHub
2022-12-10 19:31:55 +00:00
, rocmUpdateScript
, pkg-config
2020-07-10 17:28:08 +00:00
, cmake
, ninja
2022-12-10 19:31:55 +00:00
, git
, doxygen
, sphinx
, lit
2020-07-10 17:28:08 +00:00
, libxml2
, libxcrypt
2022-12-10 19:31:55 +00:00
, libedit
, libffi
, mpfr
2020-07-10 17:28:08 +00:00
, zlib
2022-12-10 19:31:55 +00:00
, ncurses
, python3Packages
, buildDocs ? true
, buildMan ? true
, buildTests ? true
, targetName ? "llvm"
, targetDir ? "llvm"
, targetProjects ? [ ]
, targetRuntimes ? [ ]
# "NATIVE" resolves into x86 or aarch64 depending on stdenv
, llvmTargetsToBuild ? [ "NATIVE" ]
2022-12-10 19:31:55 +00:00
, extraPatches ? [ ]
, extraNativeBuildInputs ? [ ]
, extraBuildInputs ? [ ]
, extraCMakeFlags ? [ ]
, extraPostPatch ? ""
, checkTargets ? [(
lib.optionalString buildTests (
if targetDir == "runtimes"
then "check-runtimes"
else "check-all"
)
)]
, extraPostInstall ? ""
, extraLicenses ? [ ]
, isBroken ? false
2020-07-10 17:28:08 +00:00
}:
let
llvmNativeTarget =
if stdenv.isx86_64 then "X86"
else if stdenv.isAarch64 then "AArch64"
else throw "Unsupported ROCm LLVM platform";
inferNativeTarget = t: if t == "NATIVE" then llvmNativeTarget else t;
llvmTargetsToBuild' = [ "AMDGPU" ] ++ builtins.map inferNativeTarget llvmTargetsToBuild;
in stdenv.mkDerivation (finalAttrs: {
2022-12-10 19:31:55 +00:00
pname = "rocm-llvm-${targetName}";
2023-03-24 07:19:57 +00:00
version = "5.4.4";
2022-12-10 19:31:55 +00:00
outputs = [
"out"
] ++ lib.optionals buildDocs [
"doc"
] ++ lib.optionals buildMan [
"man"
"info" # Avoid `attribute 'info' missing` when using with wrapCC
];
2020-07-10 17:28:08 +00:00
2022-12-10 19:31:55 +00:00
patches = extraPatches;
2022-05-05 10:23:48 +00:00
2022-12-10 19:31:55 +00:00
src = fetchFromGitHub {
owner = "RadeonOpenCompute";
repo = "llvm-project";
rev = "rocm-${finalAttrs.version}";
2023-02-08 16:16:28 +00:00
hash = "sha256-BDvC6QFDFtahA9hmJDLiM6K4mrO3j9E9rEXm7KulcuA=";
2022-12-10 19:31:55 +00:00
};
2020-07-10 17:28:08 +00:00
2022-12-10 19:31:55 +00:00
nativeBuildInputs = [
pkg-config
cmake
ninja
git
python3Packages.python
] ++ lib.optionals (buildDocs || buildMan) [
doxygen
sphinx
python3Packages.recommonmark
] ++ lib.optionals (buildTests && !finalAttrs.passthru.isLLVM) [
lit
] ++ extraNativeBuildInputs;
buildInputs = [
libxml2
libxcrypt
libedit
libffi
mpfr
] ++ extraBuildInputs;
propagatedBuildInputs = lib.optionals finalAttrs.passthru.isLLVM [
zlib
ncurses
];
2020-07-10 17:28:08 +00:00
2022-12-10 19:31:55 +00:00
sourceRoot = "${finalAttrs.src.name}/${targetDir}";
2020-07-10 17:28:08 +00:00
2022-12-10 19:31:55 +00:00
cmakeFlags = [
"-DLLVM_TARGETS_TO_BUILD=${builtins.concatStringsSep ";" llvmTargetsToBuild'}"
2022-12-10 19:31:55 +00:00
] ++ lib.optionals (finalAttrs.passthru.isLLVM && targetProjects != [ ]) [
"-DLLVM_ENABLE_PROJECTS=${lib.concatStringsSep ";" targetProjects}"
] ++ lib.optionals ((finalAttrs.passthru.isLLVM || targetDir == "runtimes") && targetRuntimes != [ ]) [
"-DLLVM_ENABLE_RUNTIMES=${lib.concatStringsSep ";" targetRuntimes}"
] ++ lib.optionals (finalAttrs.passthru.isLLVM || finalAttrs.passthru.isClang) [
"-DLLVM_ENABLE_RTTI=ON"
"-DLLVM_ENABLE_EH=ON"
] ++ lib.optionals (buildDocs || buildMan) [
"-DLLVM_INCLUDE_DOCS=ON"
2020-07-10 17:28:08 +00:00
"-DLLVM_BUILD_DOCS=ON"
2022-12-10 19:31:55 +00:00
# "-DLLVM_ENABLE_DOXYGEN=ON" Way too slow, only uses one core
2020-07-10 17:28:08 +00:00
"-DLLVM_ENABLE_SPHINX=ON"
2022-12-10 19:31:55 +00:00
"-DLLVM_ENABLE_OCAMLDOC=OFF"
"-DSPHINX_OUTPUT_HTML=ON"
2020-07-10 17:28:08 +00:00
"-DSPHINX_OUTPUT_MAN=ON"
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
2022-12-10 19:31:55 +00:00
] ++ lib.optionals buildTests [
"-DLLVM_INCLUDE_TESTS=ON"
"-DLLVM_BUILD_TESTS=ON"
] ++ lib.optionals (buildTests && !finalAttrs.passthru.isLLVM) [
"-DLLVM_EXTERNAL_LIT=${lit}/bin/.lit-wrapped"
] ++ extraCMakeFlags;
postPatch = lib.optionalString finalAttrs.passthru.isLLVM ''
patchShebangs lib/OffloadArch/make_generated_offload_arch_h.sh
2022-12-10 19:31:55 +00:00
'' + lib.optionalString (buildTests && finalAttrs.passthru.isLLVM) ''
# FileSystem permissions tests fail with various special bits
rm test/tools/llvm-objcopy/ELF/mirror-permissions-unix.test
rm unittests/Support/Path.cpp
substituteInPlace unittests/Support/CMakeLists.txt \
--replace "Path.cpp" ""
'' + extraPostPatch;
doCheck = buildTests;
checkTarget = lib.concatStringsSep " " checkTargets;
postInstall = lib.optionalString finalAttrs.passthru.isLLVM ''
# `lit` expects these for some test suites
mv bin/{FileCheck,not,count,yaml2obj,obj2yaml} $out/bin
'' + lib.optionalString buildMan ''
mkdir -p $info
'' + extraPostInstall;
2020-07-10 17:28:08 +00:00
passthru = {
2022-12-10 19:31:55 +00:00
isLLVM = targetDir == "llvm";
isClang = targetDir == "clang" || builtins.elem "clang" targetProjects;
updateScript = rocmUpdateScript {
name = finalAttrs.pname;
owner = finalAttrs.src.owner;
repo = finalAttrs.src.repo;
};
2022-12-10 19:31:55 +00:00
};
meta = with lib; {
2020-07-10 17:28:08 +00:00
description = "ROCm fork of the LLVM compiler infrastructure";
homepage = "https://github.com/RadeonOpenCompute/llvm-project";
2022-12-10 19:31:55 +00:00
license = with licenses; [ ncsa ] ++ extraLicenses;
maintainers = with maintainers; [ acowley lovesegfault ] ++ teams.rocm.members;
2020-07-10 17:28:08 +00:00
platforms = platforms.linux;
2022-12-10 19:31:55 +00:00
broken = isBroken;
2020-07-10 17:28:08 +00:00
};
})