mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-06-06 05:13:37 +00:00
Compare commits
6 Commits
26.05-beta
...
llvm-clean
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5975ba6be1 | ||
|
|
95191cd7a5 | ||
|
|
0fe5ab26b9 | ||
|
|
5b59dfc37a | ||
|
|
65e2d797a2 | ||
|
|
e8f0e65bf0 |
@@ -121,3 +121,6 @@ c759efa5e7f825913f9a69ef20f025f50f56dc4d
|
||||
|
||||
# python3Packages: format with nixfmt
|
||||
59b1aef59071cae6e87859dc65de973d2cc595c0
|
||||
|
||||
# pkgs/development/compilers/llvm/common: Reformat with nixfmt-rfc-style
|
||||
65e2d797a234feb71c787ad3ef0cafc52299bb37
|
||||
|
||||
1
.github/workflows/check-nix-format.yml
vendored
1
.github/workflows/check-nix-format.yml
vendored
@@ -43,6 +43,7 @@ jobs:
|
||||
nixos/modules/services/cluster/k3s
|
||||
nixos/tests/k3s
|
||||
pkgs/applications/networking/cluster/k3s
|
||||
NIX_FMT_PATHS_LLVM_COMMON: pkgs/development/compilers/llvm/common
|
||||
NIX_FMT_PATHS_VSCODE_EXTS: pkgs/applications/editors/vscode/extensions
|
||||
NIX_FMT_PATHS_PHP_PACKAGES: pkgs/development/php-packages
|
||||
NIX_FMT_PATHS_BUILD_SUPPORT_PHP: pkgs/build-support/php
|
||||
|
||||
@@ -1,49 +1,62 @@
|
||||
{ lib, runCommand, stdenv, llvm, lld, version, release_version }:
|
||||
{
|
||||
lib,
|
||||
runCommand,
|
||||
stdenv,
|
||||
llvm,
|
||||
lld,
|
||||
version,
|
||||
release_version,
|
||||
}:
|
||||
|
||||
let
|
||||
targetPrefix = lib.optionalString (stdenv.hostPlatform != stdenv.targetPlatform) "${stdenv.targetPlatform.config}-";
|
||||
targetPrefix = lib.optionalString (
|
||||
stdenv.hostPlatform != stdenv.targetPlatform
|
||||
) "${stdenv.targetPlatform.config}-";
|
||||
in
|
||||
runCommand "llvm-binutils-${version}"
|
||||
{
|
||||
preferLocalBuild = true;
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
inherit targetPrefix;
|
||||
};
|
||||
}
|
||||
(''
|
||||
mkdir -p $out/bin
|
||||
for prog in ${lld}/bin/*; do
|
||||
ln -s $prog $out/bin/${targetPrefix}$(basename $prog)
|
||||
done
|
||||
for prog in ${llvm}/bin/*; do
|
||||
ln -sf $prog $out/bin/${targetPrefix}$(basename $prog)
|
||||
done
|
||||
{
|
||||
preferLocalBuild = true;
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
inherit targetPrefix;
|
||||
};
|
||||
}
|
||||
(
|
||||
''
|
||||
mkdir -p $out/bin
|
||||
for prog in ${lld}/bin/*; do
|
||||
ln -s $prog $out/bin/${targetPrefix}$(basename $prog)
|
||||
done
|
||||
for prog in ${llvm}/bin/*; do
|
||||
ln -sf $prog $out/bin/${targetPrefix}$(basename $prog)
|
||||
done
|
||||
|
||||
llvmBin="${llvm}/bin"
|
||||
llvmBin="${llvm}/bin"
|
||||
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ar
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}dlltool
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ranlib
|
||||
ln -s $llvmBin/llvm-cxxfilt $out/bin/${targetPrefix}c++filt
|
||||
ln -s $llvmBin/llvm-dwp $out/bin/${targetPrefix}dwp
|
||||
ln -s $llvmBin/llvm-nm $out/bin/${targetPrefix}nm
|
||||
ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}objcopy
|
||||
ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}strip
|
||||
ln -s $llvmBin/llvm-objdump $out/bin/${targetPrefix}objdump
|
||||
ln -s $llvmBin/llvm-readobj $out/bin/${targetPrefix}readelf
|
||||
ln -s $llvmBin/llvm-size $out/bin/${targetPrefix}size
|
||||
ln -s $llvmBin/llvm-strings $out/bin/${targetPrefix}strings
|
||||
ln -s $llvmBin/llvm-symbolizer $out/bin/${targetPrefix}addr2line
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ar
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}dlltool
|
||||
ln -s $llvmBin/llvm-ar $out/bin/${targetPrefix}ranlib
|
||||
ln -s $llvmBin/llvm-cxxfilt $out/bin/${targetPrefix}c++filt
|
||||
ln -s $llvmBin/llvm-dwp $out/bin/${targetPrefix}dwp
|
||||
ln -s $llvmBin/llvm-nm $out/bin/${targetPrefix}nm
|
||||
ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}objcopy
|
||||
ln -s $llvmBin/llvm-objcopy $out/bin/${targetPrefix}strip
|
||||
ln -s $llvmBin/llvm-objdump $out/bin/${targetPrefix}objdump
|
||||
ln -s $llvmBin/llvm-readobj $out/bin/${targetPrefix}readelf
|
||||
ln -s $llvmBin/llvm-size $out/bin/${targetPrefix}size
|
||||
ln -s $llvmBin/llvm-strings $out/bin/${targetPrefix}strings
|
||||
ln -s $llvmBin/llvm-symbolizer $out/bin/${targetPrefix}addr2line
|
||||
|
||||
if [ -e "$llvmBin/llvm-debuginfod" ]; then
|
||||
ln -s $llvmBin/llvm-debuginfod $out/bin/${targetPrefix}debuginfod
|
||||
ln -s $llvmBin/llvm-debuginfod-find $out/bin/${targetPrefix}debuginfod-find
|
||||
fi
|
||||
if [ -e "$llvmBin/llvm-debuginfod" ]; then
|
||||
ln -s $llvmBin/llvm-debuginfod $out/bin/${targetPrefix}debuginfod
|
||||
ln -s $llvmBin/llvm-debuginfod-find $out/bin/${targetPrefix}debuginfod-find
|
||||
fi
|
||||
|
||||
ln -s ${lld}/bin/lld $out/bin/${targetPrefix}ld
|
||||
ln -s ${lld}/bin/lld $out/bin/${targetPrefix}ld
|
||||
|
||||
# Only >=13 show GNU windres compatible in help
|
||||
'' + lib.optionalString (lib.versionAtLeast release_version "13") ''
|
||||
ln -s $llvmBin/llvm-rc $out/bin/${targetPrefix}windres
|
||||
'')
|
||||
# Only >=13 show GNU windres compatible in help
|
||||
''
|
||||
+ lib.optionalString (lib.versionAtLeast release_version "13") ''
|
||||
ln -s $llvmBin/llvm-rc $out/bin/${targetPrefix}windres
|
||||
''
|
||||
)
|
||||
|
||||
@@ -1,149 +1,209 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, patches ? []
|
||||
, src ? null
|
||||
, monorepoSrc ? null
|
||||
, runCommand
|
||||
, substituteAll
|
||||
, cmake
|
||||
, ninja
|
||||
, libxml2
|
||||
, libllvm
|
||||
, release_version
|
||||
, version
|
||||
, python3
|
||||
, buildLlvmTools
|
||||
, fixDarwinDylibNames
|
||||
, enableManpages ? false
|
||||
, clang-tools-extra_src ? null
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
patches ? [ ],
|
||||
src ? null,
|
||||
monorepoSrc ? null,
|
||||
runCommand,
|
||||
substituteAll,
|
||||
cmake,
|
||||
ninja,
|
||||
libxml2,
|
||||
libllvm,
|
||||
release_version,
|
||||
version,
|
||||
python3,
|
||||
buildLlvmTools,
|
||||
fixDarwinDylibNames,
|
||||
enableManpages ? false,
|
||||
clang-tools-extra_src ? null,
|
||||
}:
|
||||
|
||||
let
|
||||
pname = "clang";
|
||||
|
||||
src' = if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
cp -r ${monorepoSrc}/clang-tools-extra "$out"
|
||||
'' else src;
|
||||
|
||||
self = stdenv.mkDerivation (finalAttrs: rec {
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" { } ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
cp -r ${monorepoSrc}/clang-tools-extra "$out"
|
||||
''
|
||||
else
|
||||
src;
|
||||
in
|
||||
stdenv.mkDerivation (
|
||||
finalAttrs:
|
||||
rec {
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null
|
||||
else "${src.name}/${pname}";
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null else "${src.name}/${pname}";
|
||||
|
||||
nativeBuildInputs = [ cmake ]
|
||||
++ (lib.optional (lib.versionAtLeast release_version "15") ninja)
|
||||
++ [ python3 ]
|
||||
nativeBuildInputs =
|
||||
[
|
||||
cmake
|
||||
ninja
|
||||
python3
|
||||
]
|
||||
++ lib.optional (lib.versionAtLeast version "18" && enableManpages) python3.pkgs.myst-parser
|
||||
++ lib.optional enableManpages python3.pkgs.sphinx
|
||||
++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
|
||||
|
||||
buildInputs = [ libxml2 libllvm ];
|
||||
buildInputs = [
|
||||
libxml2
|
||||
libllvm
|
||||
];
|
||||
|
||||
cmakeFlags = (lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
"-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang"
|
||||
]) ++ [
|
||||
"-DCLANGD_BUILD_XPC=OFF"
|
||||
"-DLLVM_ENABLE_RTTI=ON"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "17") [
|
||||
"-DLLVM_INCLUDE_TESTS=OFF"
|
||||
] ++ lib.optionals enableManpages [
|
||||
"-DCLANG_INCLUDE_DOCS=ON"
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) ([
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
"-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# Added in LLVM15:
|
||||
# `clang-tidy-confusable-chars-gen`: https://github.com/llvm/llvm-project/commit/c3574ef739fbfcc59d405985a3a4fa6f4619ecdb
|
||||
# `clang-pseudo-gen`: https://github.com/llvm/llvm-project/commit/cd2292ef824591cc34cc299910a3098545c840c7
|
||||
"-DCLANG_TIDY_CONFUSABLE_CHARS_GEN=${buildLlvmTools.libclang.dev}/bin/clang-tidy-confusable-chars-gen"
|
||||
"-DCLANG_PSEUDO_GEN=${buildLlvmTools.libclang.dev}/bin/clang-pseudo-gen"
|
||||
]);
|
||||
cmakeFlags =
|
||||
[
|
||||
"-DCMAKE_INSTALL_PACKAGEDIR=${placeholder "dev"}/lib/"
|
||||
"-DCLANGD_BUILD_XPC=OFF"
|
||||
"-DLLVM_ENABLE_RTTI=ON"
|
||||
(lib.cmakeBool "LLVM_INCLUDE_TESTS" finalAttrs.doCheck)
|
||||
]
|
||||
++ lib.optionals enableManpages [
|
||||
"-DCLANG_INCLUDE_DOCS=ON"
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
]
|
||||
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) (
|
||||
[
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
"-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen"
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# Added in LLVM15:
|
||||
# `clang-tidy-confusable-chars-gen`: https://github.com/llvm/llvm-project/commit/c3574ef739fbfcc59d405985a3a4fa6f4619ecdb
|
||||
# `clang-pseudo-gen`: https://github.com/llvm/llvm-project/commit/cd2292ef824591cc34cc299910a3098545c840c7
|
||||
"-DCLANG_TIDY_CONFUSABLE_CHARS_GEN=${buildLlvmTools.libclang.dev}/bin/clang-tidy-confusable-chars-gen"
|
||||
"-DCLANG_PSEUDO_GEN=${buildLlvmTools.libclang.dev}/bin/clang-pseudo-gen"
|
||||
]
|
||||
);
|
||||
|
||||
postPatch = ''
|
||||
# Make sure clang passes the correct location of libLTO to ld64
|
||||
substituteInPlace lib/Driver/ToolChains/Darwin.cpp \
|
||||
--replace-fail 'StringRef P = llvm::sys::path::parent_path(D.Dir);' 'StringRef P = "${lib.getLib libllvm}";'
|
||||
'' + (if lib.versionOlder release_version "13" then ''
|
||||
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
-e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
lib/Driver/ToolChains/*.cpp
|
||||
'' else ''
|
||||
(cd tools && ln -s ../../clang-tools-extra extra)
|
||||
'') + lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
|
||||
'';
|
||||
postPatch =
|
||||
''
|
||||
# Make sure clang passes the correct location of libLTO to ld64
|
||||
substituteInPlace lib/Driver/ToolChains/Darwin.cpp \
|
||||
--replace-fail 'StringRef P = llvm::sys::path::parent_path(D.Dir);' 'StringRef P = "${lib.getLib libllvm}";'
|
||||
''
|
||||
+ (
|
||||
if lib.versionOlder release_version "13" then
|
||||
''
|
||||
sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
-e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
|
||||
lib/Driver/ToolChains/*.cpp
|
||||
''
|
||||
else
|
||||
''
|
||||
(cd tools && ln -s ../../clang-tools-extra extra)
|
||||
''
|
||||
)
|
||||
+ lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
|
||||
'';
|
||||
|
||||
outputs = [ "out" "lib" "dev" "python" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"lib"
|
||||
"dev"
|
||||
"python"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
ln -sv $out/bin/clang $out/bin/cpp
|
||||
'' + (lib.optionalString (lib.versions.major release_version == "17") ''
|
||||
postInstall =
|
||||
''
|
||||
ln -sv $out/bin/clang $out/bin/cpp
|
||||
''
|
||||
+ (lib.optionalString (lib.versions.major release_version == "17") ''
|
||||
|
||||
mkdir -p $lib/lib/clang
|
||||
mv $lib/lib/17 $lib/lib/clang/17
|
||||
'') + ''
|
||||
mkdir -p $lib/lib/clang
|
||||
mv $lib/lib/17 $lib/lib/clang/17
|
||||
'')
|
||||
+ ''
|
||||
|
||||
# Move libclang to 'lib' output
|
||||
moveToOutput "lib/libclang.*" "$lib"
|
||||
moveToOutput "lib/libclang-cpp.*" "$lib"
|
||||
'' + (if lib.versionOlder release_version "15" then ''
|
||||
substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
|
||||
'' else ''
|
||||
substituteInPlace $dev/lib/cmake/clang/ClangTargets-release.cmake \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
|
||||
'') + ''
|
||||
# Move libclang to 'lib' output
|
||||
moveToOutput "lib/libclang.*" "$lib"
|
||||
moveToOutput "lib/libclang-cpp.*" "$lib"
|
||||
''
|
||||
+ (
|
||||
if lib.versionOlder release_version "15" then
|
||||
''
|
||||
substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
|
||||
''
|
||||
else
|
||||
''
|
||||
substituteInPlace $dev/lib/cmake/clang/ClangTargets-release.cmake \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \
|
||||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp."
|
||||
''
|
||||
)
|
||||
+ ''
|
||||
|
||||
'' + (if lib.versionOlder release_version "15" then ''
|
||||
mkdir -p $python/bin $python/share/{clang,scan-view}
|
||||
'' else ''
|
||||
mkdir -p $python/bin $python/share/clang/
|
||||
'') + ''
|
||||
mv $out/bin/{git-clang-format,scan-view} $python/bin
|
||||
if [ -e $out/bin/set-xcode-analyzer ]; then
|
||||
mv $out/bin/set-xcode-analyzer $python/bin
|
||||
fi
|
||||
mv $out/share/clang/*.py $python/share/clang
|
||||
'' + (lib.optionalString (lib.versionOlder release_version "15") ''
|
||||
mv $out/share/scan-view/*.py $python/share/scan-view
|
||||
'') + ''
|
||||
rm $out/bin/c-index-test
|
||||
patchShebangs $python/bin
|
||||
''
|
||||
+ (
|
||||
if lib.versionOlder release_version "15" then
|
||||
''
|
||||
mkdir -p $python/bin $python/share/{clang,scan-view}
|
||||
''
|
||||
else
|
||||
''
|
||||
mkdir -p $python/bin $python/share/clang/
|
||||
''
|
||||
)
|
||||
+ ''
|
||||
mv $out/bin/{git-clang-format,scan-view} $python/bin
|
||||
if [ -e $out/bin/set-xcode-analyzer ]; then
|
||||
mv $out/bin/set-xcode-analyzer $python/bin
|
||||
fi
|
||||
mv $out/share/clang/*.py $python/share/clang
|
||||
''
|
||||
+ (lib.optionalString (lib.versionOlder release_version "15") ''
|
||||
mv $out/share/scan-view/*.py $python/share/scan-view
|
||||
'')
|
||||
+ ''
|
||||
rm $out/bin/c-index-test
|
||||
patchShebangs $python/bin
|
||||
|
||||
mkdir -p $dev/bin
|
||||
'' + (if lib.versionOlder release_version "15" then ''
|
||||
cp bin/clang-tblgen $dev/bin
|
||||
'' else ''
|
||||
cp bin/{clang-tblgen,clang-tidy-confusable-chars-gen,clang-pseudo-gen} $dev/bin
|
||||
'');
|
||||
mkdir -p $dev/bin
|
||||
''
|
||||
+ (
|
||||
if lib.versionOlder release_version "15" then
|
||||
''
|
||||
cp bin/clang-tblgen $dev/bin
|
||||
''
|
||||
else
|
||||
''
|
||||
cp bin/{clang-tblgen,clang-tidy-confusable-chars-gen,clang-pseudo-gen} $dev/bin
|
||||
''
|
||||
);
|
||||
|
||||
passthru = {
|
||||
inherit libllvm;
|
||||
isClang = true;
|
||||
} // (lib.optionalAttrs (lib.versionAtLeast release_version "15") {
|
||||
hardeningUnsupportedFlags = [
|
||||
"fortify3"
|
||||
];
|
||||
hardeningUnsupportedFlagsByTargetPlatform = targetPlatform:
|
||||
lib.optional (!(targetPlatform.isx86_64 || targetPlatform.isAarch64)) "zerocallusedregs"
|
||||
++ (finalAttrs.passthru.hardeningUnsupportedFlags or []);
|
||||
}) // (lib.optionalAttrs (lib.versionOlder release_version "15") {
|
||||
hardeningUnsupportedFlags = [ "fortify3" "zerocallusedregs" ];
|
||||
});
|
||||
doCheck = false;
|
||||
|
||||
passthru =
|
||||
{
|
||||
inherit libllvm;
|
||||
isClang = true;
|
||||
}
|
||||
// (lib.optionalAttrs (lib.versionAtLeast release_version "15") {
|
||||
hardeningUnsupportedFlags = [ "fortify3" ];
|
||||
hardeningUnsupportedFlagsByTargetPlatform =
|
||||
targetPlatform:
|
||||
lib.optional (!(targetPlatform.isx86_64 || targetPlatform.isAarch64)) "zerocallusedregs"
|
||||
++ (finalAttrs.passthru.hardeningUnsupportedFlags or [ ]);
|
||||
})
|
||||
// (lib.optionalAttrs (lib.versionOlder release_version "15") {
|
||||
hardeningUnsupportedFlags = [
|
||||
"fortify3"
|
||||
"zerocallusedregs"
|
||||
];
|
||||
});
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://clang.llvm.org/";
|
||||
@@ -161,7 +221,8 @@ let
|
||||
'';
|
||||
mainProgram = "clang";
|
||||
};
|
||||
} // lib.optionalAttrs enableManpages ({
|
||||
}
|
||||
// lib.optionalAttrs enableManpages {
|
||||
pname = "clang-manpages";
|
||||
|
||||
installPhase = ''
|
||||
@@ -177,29 +238,26 @@ let
|
||||
meta = llvm_meta // {
|
||||
description = "man page for Clang ${version}";
|
||||
};
|
||||
} // (if lib.versionOlder release_version "15" then {
|
||||
buildPhase = ''
|
||||
make docs-clang-man
|
||||
'';
|
||||
} else {
|
||||
|
||||
ninjaFlags = [ "docs-clang-man" ];
|
||||
})) // (lib.optionalAttrs (clang-tools-extra_src != null) { inherit clang-tools-extra_src; })
|
||||
// (lib.optionalAttrs (lib.versionOlder release_version "13") {
|
||||
unpackPhase = ''
|
||||
unpackFile $src
|
||||
mv clang-* clang
|
||||
sourceRoot=$PWD/clang
|
||||
unpackFile ${clang-tools-extra_src}
|
||||
mv clang-tools-extra-* $sourceRoot/tools/extra
|
||||
substituteInPlace $sourceRoot/tools/extra/clangd/quality/CompletionModel.cmake \
|
||||
--replace ' ''${CMAKE_SOURCE_DIR}/../clang-tools-extra' ' ''${CMAKE_SOURCE_DIR}/tools/extra'
|
||||
'';
|
||||
})
|
||||
}
|
||||
// (lib.optionalAttrs (clang-tools-extra_src != null) { inherit clang-tools-extra_src; })
|
||||
// (lib.optionalAttrs (lib.versionOlder release_version "13") {
|
||||
unpackPhase = ''
|
||||
unpackFile $src
|
||||
mv clang-* clang
|
||||
sourceRoot=$PWD/clang
|
||||
unpackFile ${clang-tools-extra_src}
|
||||
mv clang-tools-extra-* $sourceRoot/tools/extra
|
||||
substituteInPlace $sourceRoot/tools/extra/clangd/quality/CompletionModel.cmake \
|
||||
--replace ' ''${CMAKE_SOURCE_DIR}/../clang-tools-extra' ' ''${CMAKE_SOURCE_DIR}/tools/extra'
|
||||
'';
|
||||
})
|
||||
// (lib.optionalAttrs (lib.versionAtLeast release_version "15") {
|
||||
env = lib.optionalAttrs (stdenv.buildPlatform != stdenv.hostPlatform) {
|
||||
# The following warning is triggered with (at least) gcc >=
|
||||
# 12, but appears to occur only for cross compiles.
|
||||
NIX_CFLAGS_COMPILE = "-Wno-maybe-uninitialized";
|
||||
};
|
||||
}));
|
||||
in self
|
||||
})
|
||||
)
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
{ lib
|
||||
, fetchFromGitHub ? null
|
||||
, release_version ? null
|
||||
, gitRelease ? null
|
||||
, officialRelease ? null
|
||||
, monorepoSrc' ? null
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub ? null,
|
||||
release_version ? null,
|
||||
gitRelease ? null,
|
||||
officialRelease ? null,
|
||||
monorepoSrc' ? null,
|
||||
}:
|
||||
|
||||
rec {
|
||||
@@ -13,31 +14,31 @@ rec {
|
||||
|
||||
# See llvm/cmake/config-ix.cmake.
|
||||
platforms =
|
||||
lib.platforms.aarch64 ++
|
||||
lib.platforms.arm ++
|
||||
lib.platforms.mips ++
|
||||
lib.platforms.power ++
|
||||
lib.platforms.s390x ++
|
||||
lib.platforms.wasi ++
|
||||
lib.platforms.x86 ++
|
||||
lib.optionals (lib.versionAtLeast release_version "7") lib.platforms.riscv ++
|
||||
lib.optionals (lib.versionAtLeast release_version "14") lib.platforms.m68k;
|
||||
lib.platforms.aarch64
|
||||
++ lib.platforms.arm
|
||||
++ lib.platforms.mips
|
||||
++ lib.platforms.power
|
||||
++ lib.platforms.s390x
|
||||
++ lib.platforms.wasi
|
||||
++ lib.platforms.x86
|
||||
++ lib.optionals (lib.versionAtLeast release_version "7") lib.platforms.riscv
|
||||
++ lib.optionals (lib.versionAtLeast release_version "14") lib.platforms.m68k;
|
||||
};
|
||||
|
||||
releaseInfo =
|
||||
if gitRelease != null then rec {
|
||||
original = gitRelease;
|
||||
release_version = original.version;
|
||||
version = gitRelease.rev-version;
|
||||
} else rec {
|
||||
original = officialRelease;
|
||||
release_version = original.version;
|
||||
version =
|
||||
if original ? candidate then
|
||||
"${release_version}-${original.candidate}"
|
||||
else
|
||||
release_version;
|
||||
};
|
||||
if gitRelease != null then
|
||||
rec {
|
||||
original = gitRelease;
|
||||
release_version = original.version;
|
||||
version = gitRelease.rev-version;
|
||||
}
|
||||
else
|
||||
rec {
|
||||
original = officialRelease;
|
||||
release_version = original.version;
|
||||
version =
|
||||
if original ? candidate then "${release_version}-${original.candidate}" else release_version;
|
||||
};
|
||||
|
||||
monorepoSrc =
|
||||
if monorepoSrc' != null then
|
||||
@@ -45,16 +46,11 @@ rec {
|
||||
else
|
||||
let
|
||||
sha256 = releaseInfo.original.sha256;
|
||||
rev =
|
||||
if gitRelease != null then
|
||||
gitRelease.rev
|
||||
else
|
||||
"llvmorg-${releaseInfo.version}";
|
||||
rev = if gitRelease != null then gitRelease.rev else "llvmorg-${releaseInfo.version}";
|
||||
in
|
||||
fetchFromGitHub {
|
||||
owner = "llvm";
|
||||
repo = "llvm-project";
|
||||
inherit rev sha256;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, release_version
|
||||
, version
|
||||
, patches ? []
|
||||
, src ? null
|
||||
, monorepoSrc ? null
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, python3
|
||||
, xcbuild
|
||||
, libllvm
|
||||
, linuxHeaders
|
||||
, libxcrypt
|
||||
, doFakeLibgcc ? stdenv.hostPlatform.isFreeBSD
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
release_version,
|
||||
version,
|
||||
patches ? [ ],
|
||||
src ? null,
|
||||
monorepoSrc ? null,
|
||||
runCommand,
|
||||
cmake,
|
||||
ninja,
|
||||
python3,
|
||||
xcbuild,
|
||||
libllvm,
|
||||
linuxHeaders,
|
||||
libxcrypt,
|
||||
doFakeLibgcc ? stdenv.hostPlatform.isFreeBSD,
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -22,158 +23,204 @@ let
|
||||
useLLVM = stdenv.hostPlatform.useLLVM or false;
|
||||
bareMetal = stdenv.hostPlatform.parsed.kernel.name == "none";
|
||||
haveLibc = stdenv.cc.libc != null;
|
||||
isDarwinStatic = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isStatic && lib.versionAtLeast release_version "16";
|
||||
isDarwinStatic =
|
||||
stdenv.hostPlatform.isDarwin
|
||||
&& stdenv.hostPlatform.isStatic
|
||||
&& lib.versionAtLeast release_version "16";
|
||||
inherit (stdenv.hostPlatform) isMusl isAarch64;
|
||||
|
||||
baseName = "compiler-rt";
|
||||
pname = baseName + lib.optionalString (haveLibc) "-libc";
|
||||
|
||||
src' = if monorepoSrc != null then
|
||||
runCommand "${baseName}-src-${version}" {} ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${baseName} "$out"
|
||||
'' else src;
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "${baseName}-src-${version}" { } ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${baseName} "$out"
|
||||
''
|
||||
else
|
||||
src;
|
||||
|
||||
preConfigure = lib.optionalString (useLLVM && !haveLibc) ''
|
||||
cmakeFlagsArray+=(-DCMAKE_C_FLAGS="-nodefaultlibs -ffreestanding")
|
||||
'';
|
||||
in
|
||||
|
||||
stdenv.mkDerivation ({
|
||||
inherit pname version patches;
|
||||
stdenv.mkDerivation (
|
||||
{
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null
|
||||
else "${src'.name}/${baseName}";
|
||||
src = src';
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null else "${src'.name}/${baseName}";
|
||||
|
||||
nativeBuildInputs = [ cmake ]
|
||||
++ (lib.optional (lib.versionAtLeast release_version "15") ninja)
|
||||
++ [ python3 libllvm.dev ]
|
||||
++ lib.optional stdenv.isDarwin xcbuild.xcrun;
|
||||
buildInputs =
|
||||
lib.optional (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isRiscV) linuxHeaders;
|
||||
nativeBuildInputs =
|
||||
[ cmake ]
|
||||
++ (lib.optional (lib.versionAtLeast release_version "15") ninja)
|
||||
++ [
|
||||
python3
|
||||
libllvm.dev
|
||||
]
|
||||
++ lib.optional stdenv.isDarwin xcbuild.xcrun;
|
||||
buildInputs = lib.optional (
|
||||
stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isRiscV
|
||||
) linuxHeaders;
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString ([
|
||||
"-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0"
|
||||
] ++ lib.optionals (!haveLibc) [
|
||||
# The compiler got stricter about this, and there is a usellvm patch below
|
||||
# which patches out the assert include causing an implicit definition of
|
||||
# assert. It would be nicer to understand why compiler-rt thinks it should
|
||||
# be able to #include <assert.h> in the first place; perhaps it's in the
|
||||
# wrong, or perhaps there is a way to provide an assert.h.
|
||||
"-Wno-error=implicit-function-declaration"
|
||||
]);
|
||||
env.NIX_CFLAGS_COMPILE = toString (
|
||||
[ "-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0" ]
|
||||
++ lib.optionals (!haveLibc) [
|
||||
# The compiler got stricter about this, and there is a usellvm patch below
|
||||
# which patches out the assert include causing an implicit definition of
|
||||
# assert. It would be nicer to understand why compiler-rt thinks it should
|
||||
# be able to #include <assert.h> in the first place; perhaps it's in the
|
||||
# wrong, or perhaps there is a way to provide an assert.h.
|
||||
"-Wno-error=implicit-function-declaration"
|
||||
]
|
||||
);
|
||||
|
||||
cmakeFlags = [
|
||||
"-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON"
|
||||
"-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
"-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
] ++ lib.optionals (haveLibc && stdenv.hostPlatform.libc == "glibc") [
|
||||
"-DSANITIZER_COMMON_CFLAGS=-I${libxcrypt}/include"
|
||||
] ++ lib.optionals ((useLLVM || bareMetal || isMusl || isAarch64) && (lib.versions.major release_version == "13")) [
|
||||
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
|
||||
] ++ lib.optionals (useLLVM || bareMetal || isMusl || isDarwinStatic) [
|
||||
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
|
||||
"-DCOMPILER_RT_BUILD_XRAY=OFF"
|
||||
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
|
||||
"-DCOMPILER_RT_BUILD_MEMPROF=OFF"
|
||||
"-DCOMPILER_RT_BUILD_ORC=OFF" # may be possible to build with musl if necessary
|
||||
] ++ lib.optionals (useLLVM || bareMetal) [
|
||||
"-DCOMPILER_RT_BUILD_PROFILE=OFF"
|
||||
] ++ lib.optionals ((useLLVM && !haveLibc) || bareMetal || isDarwinStatic) [
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
] ++ lib.optionals ((useLLVM && !haveLibc) || bareMetal) [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCOMPILER_RT_BAREMETAL_BUILD=ON"
|
||||
"-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}"
|
||||
] ++ lib.optionals (useLLVM && !haveLibc) [
|
||||
"-DCMAKE_C_FLAGS=-nodefaultlibs"
|
||||
] ++ lib.optionals (useLLVM) [
|
||||
"-DCOMPILER_RT_BUILD_BUILTINS=ON"
|
||||
#https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
] ++ lib.optionals (bareMetal) [
|
||||
"-DCOMPILER_RT_OS_DIR=baremetal"
|
||||
] ++ lib.optionals (stdenv.hostPlatform.isDarwin) (lib.optionals (lib.versionAtLeast release_version "16") [
|
||||
"-DCMAKE_LIPO=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}lipo"
|
||||
] ++ [
|
||||
"-DDARWIN_macosx_OVERRIDE_SDK_VERSION=ON"
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
"-DDARWIN_osx_BUILTIN_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# `COMPILER_RT_DEFAULT_TARGET_ONLY` does not apply to Darwin:
|
||||
# https://github.com/llvm/llvm-project/blob/27ef42bec80b6c010b7b3729ed0528619521a690/compiler-rt/cmake/base-config-ix.cmake#L153
|
||||
"-DCOMPILER_RT_ENABLE_IOS=OFF"
|
||||
]) ++ lib.optionals (lib.versionAtLeast version "19" && stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "10.13") [
|
||||
"-DSANITIZER_MIN_OSX_VERSION=10.10"
|
||||
];
|
||||
cmakeFlags =
|
||||
[
|
||||
"-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON"
|
||||
"-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
"-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}"
|
||||
]
|
||||
++ lib.optionals (haveLibc && stdenv.hostPlatform.libc == "glibc") [
|
||||
"-DSANITIZER_COMMON_CFLAGS=-I${libxcrypt}/include"
|
||||
]
|
||||
++ lib.optionals (
|
||||
(useLLVM || bareMetal || isMusl || isAarch64) && (lib.versions.major release_version == "13")
|
||||
) [ "-DCOMPILER_RT_BUILD_LIBFUZZER=OFF" ]
|
||||
++ lib.optionals (useLLVM || bareMetal || isMusl || isDarwinStatic) [
|
||||
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
|
||||
"-DCOMPILER_RT_BUILD_XRAY=OFF"
|
||||
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
|
||||
"-DCOMPILER_RT_BUILD_MEMPROF=OFF"
|
||||
"-DCOMPILER_RT_BUILD_ORC=OFF" # may be possible to build with musl if necessary
|
||||
]
|
||||
++ lib.optionals (useLLVM || bareMetal) [ "-DCOMPILER_RT_BUILD_PROFILE=OFF" ]
|
||||
++ lib.optionals ((useLLVM && !haveLibc) || bareMetal || isDarwinStatic) [
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
]
|
||||
++ lib.optionals ((useLLVM && !haveLibc) || bareMetal) [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCOMPILER_RT_BAREMETAL_BUILD=ON"
|
||||
"-DCMAKE_SIZEOF_VOID_P=${toString (stdenv.hostPlatform.parsed.cpu.bits / 8)}"
|
||||
]
|
||||
++ lib.optionals (useLLVM && !haveLibc) [ "-DCMAKE_C_FLAGS=-nodefaultlibs" ]
|
||||
++ lib.optionals (useLLVM) [
|
||||
"-DCOMPILER_RT_BUILD_BUILTINS=ON"
|
||||
#https://stackoverflow.com/questions/53633705/cmake-the-c-compiler-is-not-able-to-compile-a-simple-test-program
|
||||
"-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY"
|
||||
]
|
||||
++ lib.optionals (bareMetal) [ "-DCOMPILER_RT_OS_DIR=baremetal" ]
|
||||
++ lib.optionals (stdenv.hostPlatform.isDarwin) (
|
||||
lib.optionals (lib.versionAtLeast release_version "16") [
|
||||
"-DCMAKE_LIPO=${lib.getBin stdenv.cc.bintools.bintools}/bin/${stdenv.cc.targetPrefix}lipo"
|
||||
]
|
||||
++ [
|
||||
"-DDARWIN_macosx_OVERRIDE_SDK_VERSION=ON"
|
||||
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
"-DDARWIN_osx_BUILTIN_ARCHS=${stdenv.hostPlatform.darwinArch}"
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# `COMPILER_RT_DEFAULT_TARGET_ONLY` does not apply to Darwin:
|
||||
# https://github.com/llvm/llvm-project/blob/27ef42bec80b6c010b7b3729ed0528619521a690/compiler-rt/cmake/base-config-ix.cmake#L153
|
||||
"-DCOMPILER_RT_ENABLE_IOS=OFF"
|
||||
]
|
||||
)
|
||||
++ lib.optionals (
|
||||
lib.versionAtLeast version "19"
|
||||
&& stdenv.isDarwin
|
||||
&& lib.versionOlder stdenv.hostPlatform.darwinMinVersion "10.13"
|
||||
) [ "-DSANITIZER_MIN_OSX_VERSION=10.10" ];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
];
|
||||
|
||||
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks
|
||||
# to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra
|
||||
# can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd
|
||||
# get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by
|
||||
# a flag and turn the flag off during the stdenv build.
|
||||
postPatch = lib.optionalString (!stdenv.isDarwin) ''
|
||||
substituteInPlace cmake/builtin-config-ix.cmake \
|
||||
--replace 'set(X86 i386)' 'set(X86 i386 i486 i586 i686)'
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
substituteInPlace cmake/config-ix.cmake \
|
||||
--replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)'
|
||||
'' + lib.optionalString (useLLVM && !haveLibc) ((lib.optionalString (lib.versionAtLeast release_version "18") ''
|
||||
substituteInPlace lib/builtins/aarch64/sme-libc-routines.c \
|
||||
--replace "<stdlib.h>" "<stddef.h>"
|
||||
'') + ''
|
||||
substituteInPlace lib/builtins/int_util.c \
|
||||
--replace "#include <stdlib.h>" ""
|
||||
'' + (if stdenv.hostPlatform.isFreeBSD then
|
||||
# As per above, but in FreeBSD assert is a macro and simply allowing it to be implicitly declared causes Issues!!!!!
|
||||
''
|
||||
substituteInPlace lib/builtins/clear_cache.c lib/builtins/cpu_model.c \
|
||||
--replace "#include <assert.h>" "#define assert(e) ((e)?(void)0:__assert(__FUNCTION__,__FILE__,__LINE__,#e))"
|
||||
'' else ''
|
||||
substituteInPlace lib/builtins/clear_cache.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
substituteInPlace lib/builtins/cpu_model${lib.optionalString (lib.versionAtLeast version "18") "/x86"}.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
''));
|
||||
# TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks
|
||||
# to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra
|
||||
# can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd
|
||||
# get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by
|
||||
# a flag and turn the flag off during the stdenv build.
|
||||
postPatch =
|
||||
lib.optionalString (!stdenv.isDarwin) ''
|
||||
substituteInPlace cmake/builtin-config-ix.cmake \
|
||||
--replace 'set(X86 i386)' 'set(X86 i386 i486 i586 i686)'
|
||||
''
|
||||
+ lib.optionalString stdenv.isDarwin ''
|
||||
substituteInPlace cmake/config-ix.cmake \
|
||||
--replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)'
|
||||
''
|
||||
+ lib.optionalString (useLLVM && !haveLibc) (
|
||||
(lib.optionalString (lib.versionAtLeast release_version "18") ''
|
||||
substituteInPlace lib/builtins/aarch64/sme-libc-routines.c \
|
||||
--replace "<stdlib.h>" "<stddef.h>"
|
||||
'')
|
||||
+ ''
|
||||
substituteInPlace lib/builtins/int_util.c \
|
||||
--replace "#include <stdlib.h>" ""
|
||||
''
|
||||
+ (
|
||||
if stdenv.hostPlatform.isFreeBSD then
|
||||
# As per above, but in FreeBSD assert is a macro and simply allowing it to be implicitly declared causes Issues!!!!!
|
||||
''
|
||||
substituteInPlace lib/builtins/clear_cache.c lib/builtins/cpu_model.c \
|
||||
--replace "#include <assert.h>" "#define assert(e) ((e)?(void)0:__assert(__FUNCTION__,__FILE__,__LINE__,#e))"
|
||||
''
|
||||
else
|
||||
''
|
||||
substituteInPlace lib/builtins/clear_cache.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
substituteInPlace lib/builtins/cpu_model${lib.optionalString (lib.versionAtLeast version "18") "/x86"}.c \
|
||||
--replace "#include <assert.h>" ""
|
||||
''
|
||||
)
|
||||
);
|
||||
|
||||
# Hack around weird upsream RPATH bug
|
||||
postInstall = lib.optionalString (stdenv.hostPlatform.isDarwin) ''
|
||||
ln -s "$out/lib"/*/* "$out/lib"
|
||||
'' + lib.optionalString (useLLVM && stdenv.hostPlatform.isLinux) ''
|
||||
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o
|
||||
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o
|
||||
# Note the history of crt{begin,end}S in previous versions of llvm in nixpkg:
|
||||
# The presence of crtbegin_shared has been added and removed; it's possible
|
||||
# people have added/removed it to get it working on their platforms.
|
||||
# Try each in turn for now.
|
||||
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbeginS.o
|
||||
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtendS.o
|
||||
ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o
|
||||
ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o
|
||||
'' + lib.optionalString doFakeLibgcc ''
|
||||
ln -s $out/lib/freebsd/libclang_rt.builtins-*.a $out/lib/libgcc.a
|
||||
'';
|
||||
# Hack around weird upsream RPATH bug
|
||||
postInstall =
|
||||
lib.optionalString (stdenv.hostPlatform.isDarwin) ''
|
||||
ln -s "$out/lib"/*/* "$out/lib"
|
||||
''
|
||||
+ lib.optionalString (useLLVM && stdenv.hostPlatform.isLinux) ''
|
||||
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o
|
||||
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.o
|
||||
# Note the history of crt{begin,end}S in previous versions of llvm in nixpkg:
|
||||
# The presence of crtbegin_shared has been added and removed; it's possible
|
||||
# people have added/removed it to get it working on their platforms.
|
||||
# Try each in turn for now.
|
||||
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbeginS.o
|
||||
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtendS.o
|
||||
ln -s $out/lib/*/clang_rt.crtbegin_shared-*.o $out/lib/crtbeginS.o
|
||||
ln -s $out/lib/*/clang_rt.crtend_shared-*.o $out/lib/crtendS.o
|
||||
''
|
||||
+ lib.optionalString doFakeLibgcc ''
|
||||
ln -s $out/lib/freebsd/libclang_rt.builtins-*.a $out/lib/libgcc.a
|
||||
'';
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://compiler-rt.llvm.org/";
|
||||
description = "Compiler runtime libraries";
|
||||
longDescription = ''
|
||||
The compiler-rt project provides highly tuned implementations of the
|
||||
low-level code generator support routines like "__fixunsdfdi" and other
|
||||
calls generated when a target doesn't have a short sequence of native
|
||||
instructions to implement a core IR operation. It also provides
|
||||
implementations of run-time libraries for dynamic testing tools such as
|
||||
AddressSanitizer, ThreadSanitizer, MemorySanitizer, and DataFlowSanitizer.
|
||||
'';
|
||||
# "All of the code in the compiler-rt project is dual licensed under the MIT
|
||||
# license and the UIUC License (a BSD-like license)":
|
||||
license = with lib.licenses; [ mit ncsa ];
|
||||
# compiler-rt requires a Clang stdenv on 32-bit RISC-V:
|
||||
# https://reviews.llvm.org/D43106#1019077
|
||||
broken = stdenv.hostPlatform.isRiscV32 && !stdenv.cc.isClang;
|
||||
};
|
||||
} // (if lib.versionOlder release_version "16" then { inherit preConfigure; } else {}))
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://compiler-rt.llvm.org/";
|
||||
description = "Compiler runtime libraries";
|
||||
longDescription = ''
|
||||
The compiler-rt project provides highly tuned implementations of the
|
||||
low-level code generator support routines like "__fixunsdfdi" and other
|
||||
calls generated when a target doesn't have a short sequence of native
|
||||
instructions to implement a core IR operation. It also provides
|
||||
implementations of run-time libraries for dynamic testing tools such as
|
||||
AddressSanitizer, ThreadSanitizer, MemorySanitizer, and DataFlowSanitizer.
|
||||
'';
|
||||
# "All of the code in the compiler-rt project is dual licensed under the MIT
|
||||
# license and the UIUC License (a BSD-like license)":
|
||||
license = with lib.licenses; [
|
||||
mit
|
||||
ncsa
|
||||
];
|
||||
# compiler-rt requires a Clang stdenv on 32-bit RISC-V:
|
||||
# https://reviews.llvm.org/D43106#1019077
|
||||
broken = stdenv.hostPlatform.isRiscV32 && !stdenv.cc.isClang;
|
||||
};
|
||||
}
|
||||
// (if lib.versionOlder release_version "16" then { inherit preConfigure; } else { })
|
||||
)
|
||||
|
||||
@@ -1,10 +1,22 @@
|
||||
{ lib, stdenv, version, runCommand, monorepoSrc, llvm, buildPackages, buildLlvmTools, ninja, cmake, python3 }:
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
version,
|
||||
runCommand,
|
||||
monorepoSrc,
|
||||
llvm,
|
||||
buildPackages,
|
||||
buildLlvmTools,
|
||||
ninja,
|
||||
cmake,
|
||||
python3,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libclc";
|
||||
inherit version;
|
||||
|
||||
src = runCommand "${pname}-src-${version}" {} ''
|
||||
src = runCommand "${pname}-src-${version}" { } ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
@@ -12,31 +24,40 @@ stdenv.mkDerivation rec {
|
||||
|
||||
sourceRoot = "${src.name}/${pname}";
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
patches = [
|
||||
./libclc/libclc-gnu-install-dirs.patch
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
];
|
||||
|
||||
# cmake expects all required binaries to be in the same place, so it will not be able to find clang without the patch
|
||||
postPatch = ''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace 'find_program( LLVM_CLANG clang PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_CLANG clang PATHS "${buildLlvmTools.clang.cc}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_AS llvm-as PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_AS llvm-as PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_LINK llvm-link PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_LINK llvm-link PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_OPT opt PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_OPT opt PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_SPIRV llvm-spirv PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_SPIRV llvm-spirv PATHS "${buildPackages.spirv-llvm-translator.override { inherit (buildLlvmTools) llvm; }}/bin" NO_DEFAULT_PATH )'
|
||||
'' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace 'COMMAND prepare_builtins' 'COMMAND ${buildLlvmTools.libclc.dev}/bin/prepare_builtins'
|
||||
'';
|
||||
patches = [ ./libclc/libclc-gnu-install-dirs.patch ];
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ];
|
||||
# cmake expects all required binaries to be in the same place, so it will not be able to find clang without the patch
|
||||
postPatch =
|
||||
''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace 'find_program( LLVM_CLANG clang PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_CLANG clang PATHS "${buildLlvmTools.clang.cc}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_AS llvm-as PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_AS llvm-as PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_LINK llvm-link PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_LINK llvm-link PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_OPT opt PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_OPT opt PATHS "${buildLlvmTools.llvm}/bin" NO_DEFAULT_PATH )' \
|
||||
--replace 'find_program( LLVM_SPIRV llvm-spirv PATHS ''${LLVM_TOOLS_BINARY_DIR} NO_DEFAULT_PATH )' \
|
||||
'find_program( LLVM_SPIRV llvm-spirv PATHS "${
|
||||
buildPackages.spirv-llvm-translator.override { inherit (buildLlvmTools) llvm; }
|
||||
}/bin" NO_DEFAULT_PATH )'
|
||||
''
|
||||
+ lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
|
||||
substituteInPlace CMakeLists.txt \
|
||||
--replace 'COMMAND prepare_builtins' 'COMMAND ${buildLlvmTools.libclc.dev}/bin/prepare_builtins'
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ninja
|
||||
python3
|
||||
];
|
||||
buildInputs = [ llvm ];
|
||||
strictDeps = true;
|
||||
|
||||
|
||||
@@ -1,22 +1,23 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, release_version
|
||||
, monorepoSrc ? null
|
||||
, src ? null
|
||||
, patches ? []
|
||||
, runCommand
|
||||
, substitute
|
||||
, cmake
|
||||
, lndir
|
||||
, ninja
|
||||
, python3
|
||||
, fixDarwinDylibNames
|
||||
, version
|
||||
, cxxabi ? null
|
||||
, libcxxrt
|
||||
, libunwind
|
||||
, enableShared ? !stdenv.hostPlatform.isStatic
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
release_version,
|
||||
monorepoSrc ? null,
|
||||
src ? null,
|
||||
patches ? [ ],
|
||||
runCommand,
|
||||
substitute,
|
||||
cmake,
|
||||
lndir,
|
||||
ninja,
|
||||
python3,
|
||||
fixDarwinDylibNames,
|
||||
version,
|
||||
cxxabi ? null,
|
||||
libcxxrt,
|
||||
libunwind,
|
||||
enableShared ? !stdenv.hostPlatform.isStatic,
|
||||
}:
|
||||
|
||||
# note: our setup using libcxxabi instead of libcxxrt on FreeBSD diverges from
|
||||
@@ -37,156 +38,200 @@ let
|
||||
# Note: useLLVM is likely false for Darwin but true under pkgsLLVM
|
||||
useLLVM = stdenv.hostPlatform.useLLVM or false;
|
||||
|
||||
src' = if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" {} (''
|
||||
mkdir -p "$out/llvm"
|
||||
'' + (lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
'') + ''
|
||||
cp -r ${monorepoSrc}/libcxx "$out"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
'' + (lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
cp -r ${monorepoSrc}/third-party "$out"
|
||||
'') + ''
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
'' + (lib.optionalString (cxxabi == null) ''
|
||||
cp -r ${monorepoSrc}/libcxxabi "$out"
|
||||
'')) else src;
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" { } (
|
||||
''
|
||||
mkdir -p "$out/llvm"
|
||||
''
|
||||
+ (lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
'')
|
||||
+ ''
|
||||
cp -r ${monorepoSrc}/libcxx "$out"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
''
|
||||
+ (lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
cp -r ${monorepoSrc}/third-party "$out"
|
||||
'')
|
||||
+ ''
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
''
|
||||
+ (lib.optionalString (cxxabi == null) ''
|
||||
cp -r ${monorepoSrc}/libcxxabi "$out"
|
||||
'')
|
||||
)
|
||||
else
|
||||
src;
|
||||
|
||||
cxxabiCMakeFlags = lib.optionals (lib.versionAtLeast release_version "18") [
|
||||
"-DLIBCXXABI_USE_LLVM_UNWINDER=OFF"
|
||||
] ++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) (if lib.versionAtLeast release_version "18" then [
|
||||
"-DLIBCXXABI_ADDITIONAL_LIBRARIES=unwind"
|
||||
"-DLIBCXXABI_USE_COMPILER_RT=ON"
|
||||
] else [
|
||||
"-DLIBCXXABI_USE_COMPILER_RT=ON"
|
||||
"-DLIBCXXABI_USE_LLVM_UNWINDER=ON"
|
||||
]) ++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXXABI_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF"
|
||||
] ++ lib.optionals (!enableShared) [
|
||||
"-DLIBCXXABI_ENABLE_SHARED=OFF"
|
||||
];
|
||||
cxxabiCMakeFlags =
|
||||
lib.optionals (lib.versionAtLeast release_version "18") [ "-DLIBCXXABI_USE_LLVM_UNWINDER=OFF" ]
|
||||
++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) (
|
||||
if lib.versionAtLeast release_version "18" then
|
||||
[
|
||||
"-DLIBCXXABI_ADDITIONAL_LIBRARIES=unwind"
|
||||
"-DLIBCXXABI_USE_COMPILER_RT=ON"
|
||||
]
|
||||
else
|
||||
[
|
||||
"-DLIBCXXABI_USE_COMPILER_RT=ON"
|
||||
"-DLIBCXXABI_USE_LLVM_UNWINDER=ON"
|
||||
]
|
||||
)
|
||||
++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXXABI_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXXABI_ENABLE_EXCEPTIONS=OFF"
|
||||
]
|
||||
++ lib.optionals (!enableShared) [ "-DLIBCXXABI_ENABLE_SHARED=OFF" ];
|
||||
|
||||
cxxCMakeFlags = [
|
||||
"-DLIBCXX_CXX_ABI=${cxxabiName}"
|
||||
] ++ lib.optionals (cxxabi == null && lib.versionAtLeast release_version "16") [
|
||||
# Note: llvm < 16 doesn't support this flag (or it's broken); handled in postInstall instead.
|
||||
# Include libc++abi symbols within libc++.a for static linking libc++;
|
||||
# dynamic linking includes them through libc++.so being a linker script
|
||||
# which includes both shared objects.
|
||||
"-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON"
|
||||
] ++ lib.optionals (cxxabi != null) [
|
||||
"-DLIBCXX_CXX_ABI_INCLUDE_PATHS=${lib.getDev cxxabi}/include"
|
||||
] ++ lib.optionals (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) [
|
||||
"-DLIBCXX_HAS_MUSL_LIBC=1"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "18" && !useLLVM && stdenv.hostPlatform.libc == "glibc" && !stdenv.hostPlatform.isStatic) [
|
||||
"-DLIBCXX_ADDITIONAL_LIBRARIES=gcc_s"
|
||||
] ++ lib.optionals useLLVM [
|
||||
"-DLIBCXX_USE_COMPILER_RT=ON"
|
||||
] ++ lib.optionals (useLLVM && lib.versionAtLeast release_version "16") [
|
||||
"-DLIBCXX_ADDITIONAL_LIBRARIES=unwind"
|
||||
] ++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXX_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXX_ENABLE_FILESYSTEM=OFF"
|
||||
"-DLIBCXX_ENABLE_EXCEPTIONS=OFF"
|
||||
] ++ lib.optionals (!enableShared) [
|
||||
"-DLIBCXX_ENABLE_SHARED=OFF"
|
||||
];
|
||||
cxxCMakeFlags =
|
||||
[ "-DLIBCXX_CXX_ABI=${cxxabiName}" ]
|
||||
++ lib.optionals (cxxabi == null && lib.versionAtLeast release_version "16") [
|
||||
# Note: llvm < 16 doesn't support this flag (or it's broken); handled in postInstall instead.
|
||||
# Include libc++abi symbols within libc++.a for static linking libc++;
|
||||
# dynamic linking includes them through libc++.so being a linker script
|
||||
# which includes both shared objects.
|
||||
"-DLIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON"
|
||||
]
|
||||
++ lib.optionals (cxxabi != null) [ "-DLIBCXX_CXX_ABI_INCLUDE_PATHS=${lib.getDev cxxabi}/include" ]
|
||||
++ lib.optionals (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) [
|
||||
"-DLIBCXX_HAS_MUSL_LIBC=1"
|
||||
]
|
||||
++ lib.optionals (
|
||||
lib.versionAtLeast release_version "18"
|
||||
&& !useLLVM
|
||||
&& stdenv.hostPlatform.libc == "glibc"
|
||||
&& !stdenv.hostPlatform.isStatic
|
||||
) [ "-DLIBCXX_ADDITIONAL_LIBRARIES=gcc_s" ]
|
||||
++ lib.optionals useLLVM [ "-DLIBCXX_USE_COMPILER_RT=ON" ]
|
||||
++ lib.optionals (useLLVM && lib.versionAtLeast release_version "16") [
|
||||
"-DLIBCXX_ADDITIONAL_LIBRARIES=unwind"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DLIBCXX_ENABLE_THREADS=OFF"
|
||||
"-DLIBCXX_ENABLE_FILESYSTEM=OFF"
|
||||
"-DLIBCXX_ENABLE_EXCEPTIONS=OFF"
|
||||
]
|
||||
++ lib.optionals (!enableShared) [ "-DLIBCXX_ENABLE_SHARED=OFF" ];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLVM_ENABLE_RUNTIMES=${lib.concatStringsSep ";" runtimes}"
|
||||
] ++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) [
|
||||
# libcxxabi's CMake looks as though it treats -nostdlib++ as implying -nostdlib,
|
||||
# but that does not appear to be the case for example when building
|
||||
# pkgsLLVM.libcxxabi (which uses clangNoCompilerRtWithLibc).
|
||||
"-DCMAKE_EXE_LINKER_FLAGS=-nostdlib"
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=-nostdlib"
|
||||
] ++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
"-DUNIX=ON" # Required otherwise libc++ fails to detect the correct linker
|
||||
] ++ cxxCMakeFlags
|
||||
cmakeFlags =
|
||||
[ "-DLLVM_ENABLE_RUNTIMES=${lib.concatStringsSep ";" runtimes}" ]
|
||||
++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) [
|
||||
# libcxxabi's CMake looks as though it treats -nostdlib++ as implying -nostdlib,
|
||||
# but that does not appear to be the case for example when building
|
||||
# pkgsLLVM.libcxxabi (which uses clangNoCompilerRtWithLibc).
|
||||
"-DCMAKE_EXE_LINKER_FLAGS=-nostdlib"
|
||||
"-DCMAKE_SHARED_LINKER_FLAGS=-nostdlib"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isWasm [
|
||||
"-DCMAKE_C_COMPILER_WORKS=ON"
|
||||
"-DCMAKE_CXX_COMPILER_WORKS=ON"
|
||||
"-DUNIX=ON" # Required otherwise libc++ fails to detect the correct linker
|
||||
]
|
||||
++ cxxCMakeFlags
|
||||
++ lib.optionals (cxxabi == null) cxxabiCMakeFlags;
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (rec {
|
||||
inherit pname version cmakeFlags patches;
|
||||
stdenv.mkDerivation (
|
||||
rec {
|
||||
inherit
|
||||
pname
|
||||
version
|
||||
cmakeFlags
|
||||
patches
|
||||
;
|
||||
|
||||
src = src';
|
||||
src = src';
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
];
|
||||
|
||||
preConfigure = lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patchShebangs utils/cat_files.py
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake ninja python3 ]
|
||||
++ lib.optional stdenv.isDarwin fixDarwinDylibNames
|
||||
++ lib.optional (cxxabi != null) lndir;
|
||||
|
||||
buildInputs = [ cxxabi ]
|
||||
++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) [ libunwind ];
|
||||
|
||||
# libc++.so is a linker script which expands to multiple libraries,
|
||||
# libc++.so.1 and libc++abi.so or the external cxxabi. ld-wrapper doesn't
|
||||
# support linker scripts so the external cxxabi needs to be symlinked in
|
||||
postInstall = lib.optionalString (cxxabi != null) ''
|
||||
lndir ${lib.getDev cxxabi}/include $dev/include/c++/v1
|
||||
lndir ${lib.getLib cxxabi}/lib $out/lib
|
||||
libcxxabi=$out/lib/lib${cxxabi.libName}.a
|
||||
''
|
||||
# LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON doesn't work for LLVM < 16 or
|
||||
# external cxxabi libraries so merge libc++abi.a into libc++.a ourselves.
|
||||
|
||||
# GNU binutils emits objects in LIFO order in MRI scripts so after the merge
|
||||
# the objects are in reversed order so a second MRI script is required so the
|
||||
# objects in the archive are listed in proper order (libc++.a, libc++abi.a)
|
||||
+ lib.optionalString (cxxabi != null || lib.versionOlder release_version "16") ''
|
||||
libcxxabi=''${libcxxabi-$out/lib/libc++abi.a}
|
||||
if [[ -f $out/lib/libc++.a && -e $libcxxabi ]]; then
|
||||
$AR -M <<MRI
|
||||
create $out/lib/libc++.a
|
||||
addlib $out/lib/libc++.a
|
||||
addlib $libcxxabi
|
||||
save
|
||||
end
|
||||
MRI
|
||||
$AR -M <<MRI
|
||||
create $out/lib/libc++.a
|
||||
addlib $out/lib/libc++.a
|
||||
save
|
||||
end
|
||||
MRI
|
||||
fi
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
};
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://libcxx.llvm.org/";
|
||||
description = "C++ standard library";
|
||||
longDescription = ''
|
||||
libc++ is an implementation of the C++ standard library, targeting C++11,
|
||||
C++14 and above.
|
||||
preConfigure = lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patchShebangs utils/cat_files.py
|
||||
'';
|
||||
# "All of the code in libc++ is dual licensed under the MIT license and the
|
||||
# UIUC License (a BSD-like license)":
|
||||
license = with lib.licenses; [ mit ncsa ];
|
||||
};
|
||||
} // (if (lib.versionOlder release_version "16" || lib.versionAtLeast release_version "17") then {
|
||||
postPatch = (lib.optionalString (lib.versionAtLeast release_version "14" && lib.versionOlder release_version "15") ''
|
||||
# fix CMake error when static and LIBCXXABI_USE_LLVM_UNWINDER=ON. aren't
|
||||
# building unwind so don't need to depend on it
|
||||
substituteInPlace libcxx/src/CMakeLists.txt \
|
||||
--replace-fail "add_dependencies(cxx_static unwind)" "# add_dependencies(cxx_static unwind)"
|
||||
'') + ''
|
||||
cd runtimes
|
||||
'';
|
||||
} else {
|
||||
sourceRoot = "${src'.name}/runtimes";
|
||||
}))
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
ninja
|
||||
python3
|
||||
] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames ++ lib.optional (cxxabi != null) lndir;
|
||||
|
||||
buildInputs = [ cxxabi ] ++ lib.optionals (useLLVM && !stdenv.hostPlatform.isWasm) [ libunwind ];
|
||||
|
||||
# libc++.so is a linker script which expands to multiple libraries,
|
||||
# libc++.so.1 and libc++abi.so or the external cxxabi. ld-wrapper doesn't
|
||||
# support linker scripts so the external cxxabi needs to be symlinked in
|
||||
postInstall =
|
||||
lib.optionalString (cxxabi != null) ''
|
||||
lndir ${lib.getDev cxxabi}/include $dev/include/c++/v1
|
||||
lndir ${lib.getLib cxxabi}/lib $out/lib
|
||||
libcxxabi=$out/lib/lib${cxxabi.libName}.a
|
||||
''
|
||||
# LIBCXX_STATICALLY_LINK_ABI_IN_STATIC_LIBRARY=ON doesn't work for LLVM < 16 or
|
||||
# external cxxabi libraries so merge libc++abi.a into libc++.a ourselves.
|
||||
|
||||
# GNU binutils emits objects in LIFO order in MRI scripts so after the merge
|
||||
# the objects are in reversed order so a second MRI script is required so the
|
||||
# objects in the archive are listed in proper order (libc++.a, libc++abi.a)
|
||||
+ lib.optionalString (cxxabi != null || lib.versionOlder release_version "16") ''
|
||||
libcxxabi=''${libcxxabi-$out/lib/libc++abi.a}
|
||||
if [[ -f $out/lib/libc++.a && -e $libcxxabi ]]; then
|
||||
$AR -M <<MRI
|
||||
create $out/lib/libc++.a
|
||||
addlib $out/lib/libc++.a
|
||||
addlib $libcxxabi
|
||||
save
|
||||
end
|
||||
MRI
|
||||
$AR -M <<MRI
|
||||
create $out/lib/libc++.a
|
||||
addlib $out/lib/libc++.a
|
||||
save
|
||||
end
|
||||
MRI
|
||||
fi
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
isLLVM = true;
|
||||
};
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://libcxx.llvm.org/";
|
||||
description = "C++ standard library";
|
||||
longDescription = ''
|
||||
libc++ is an implementation of the C++ standard library, targeting C++11,
|
||||
C++14 and above.
|
||||
'';
|
||||
# "All of the code in libc++ is dual licensed under the MIT license and the
|
||||
# UIUC License (a BSD-like license)":
|
||||
license = with lib.licenses; [
|
||||
mit
|
||||
ncsa
|
||||
];
|
||||
};
|
||||
}
|
||||
// (
|
||||
if (lib.versionOlder release_version "16" || lib.versionAtLeast release_version "17") then
|
||||
{
|
||||
postPatch =
|
||||
(lib.optionalString
|
||||
(lib.versionAtLeast release_version "14" && lib.versionOlder release_version "15")
|
||||
''
|
||||
# fix CMake error when static and LIBCXXABI_USE_LLVM_UNWINDER=ON. aren't
|
||||
# building unwind so don't need to depend on it
|
||||
substituteInPlace libcxx/src/CMakeLists.txt \
|
||||
--replace-fail "add_dependencies(cxx_static unwind)" "# add_dependencies(cxx_static unwind)"
|
||||
''
|
||||
)
|
||||
+ ''
|
||||
cd runtimes
|
||||
'';
|
||||
}
|
||||
else
|
||||
{ sourceRoot = "${src'.name}/runtimes"; }
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,34 +1,41 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, release_version
|
||||
, patches ? []
|
||||
, src ? null
|
||||
, llvm_meta
|
||||
, version
|
||||
, monorepoSrc ? null
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, python3
|
||||
, libcxx
|
||||
, enableShared ? !stdenv.hostPlatform.isStatic
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
release_version,
|
||||
patches ? [ ],
|
||||
src ? null,
|
||||
llvm_meta,
|
||||
version,
|
||||
monorepoSrc ? null,
|
||||
runCommand,
|
||||
cmake,
|
||||
ninja,
|
||||
python3,
|
||||
libcxx,
|
||||
enableShared ? !stdenv.hostPlatform.isStatic,
|
||||
}:
|
||||
let
|
||||
pname = "libunwind";
|
||||
src' = if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" {} (''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/cmake "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/utils "$out/libcxx"
|
||||
mkdir -p "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
'' + lib.optionalString (lib.versionAtLeast release_version "15") ''
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
'') else src;
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" { } (
|
||||
''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/cmake "$out/libcxx"
|
||||
cp -r ${monorepoSrc}/libcxx/utils "$out/libcxx"
|
||||
mkdir -p "$out/llvm"
|
||||
cp -r ${monorepoSrc}/llvm/cmake "$out/llvm"
|
||||
''
|
||||
+ lib.optionalString (lib.versionAtLeast release_version "15") ''
|
||||
cp -r ${monorepoSrc}/llvm/utils "$out/llvm"
|
||||
cp -r ${monorepoSrc}/runtimes "$out"
|
||||
''
|
||||
)
|
||||
else
|
||||
src;
|
||||
|
||||
hasPatches = builtins.length patches > 0;
|
||||
|
||||
@@ -37,51 +44,70 @@ let
|
||||
ln -s ${libcxx.src}/llvm .
|
||||
'';
|
||||
|
||||
prePatch = lib.optionalString (lib.versionAtLeast release_version "15" && (hasPatches || lib.versionOlder release_version "18")) ''
|
||||
cd ../${pname}
|
||||
chmod -R u+w .
|
||||
'';
|
||||
prePatch =
|
||||
lib.optionalString
|
||||
(lib.versionAtLeast release_version "15" && (hasPatches || lib.versionOlder release_version "18"))
|
||||
''
|
||||
cd ../${pname}
|
||||
chmod -R u+w .
|
||||
'';
|
||||
|
||||
postPatch = lib.optionalString (lib.versionAtLeast release_version "15" && (hasPatches || lib.versionOlder release_version "18")) ''
|
||||
cd ../runtimes
|
||||
'';
|
||||
postPatch =
|
||||
lib.optionalString
|
||||
(lib.versionAtLeast release_version "15" && (hasPatches || lib.versionOlder release_version "18"))
|
||||
''
|
||||
cd ../runtimes
|
||||
'';
|
||||
|
||||
postInstall = lib.optionalString (enableShared && !stdenv.hostPlatform.isDarwin) ''
|
||||
# libcxxabi wants to link to libunwind_shared.so (?).
|
||||
ln -s $out/lib/libunwind.so $out/lib/libunwind_shared.so
|
||||
'';
|
||||
in
|
||||
stdenv.mkDerivation (rec {
|
||||
inherit pname version patches;
|
||||
stdenv.mkDerivation (
|
||||
rec {
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
src = src';
|
||||
|
||||
sourceRoot =
|
||||
if lib.versionOlder release_version "13" then null
|
||||
else if lib.versionAtLeast release_version "15" then "${src.name}/runtimes"
|
||||
else "${src.name}/${pname}";
|
||||
sourceRoot =
|
||||
if lib.versionOlder release_version "13" then
|
||||
null
|
||||
else if lib.versionAtLeast release_version "15" then
|
||||
"${src.name}/runtimes"
|
||||
else
|
||||
"${src.name}/${pname}";
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake ] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
ninja python3
|
||||
];
|
||||
nativeBuildInputs =
|
||||
[ cmake ]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
ninja
|
||||
python3
|
||||
];
|
||||
|
||||
cmakeFlags = lib.optional (lib.versionAtLeast release_version "15") "-DLLVM_ENABLE_RUNTIMES=libunwind"
|
||||
++ lib.optional (!enableShared) "-DLIBUNWIND_ENABLE_SHARED=OFF";
|
||||
cmakeFlags =
|
||||
lib.optional (lib.versionAtLeast release_version "15") "-DLLVM_ENABLE_RUNTIMES=libunwind"
|
||||
++ lib.optional (!enableShared) "-DLIBUNWIND_ENABLE_SHARED=OFF";
|
||||
|
||||
meta = llvm_meta // {
|
||||
# Details: https://github.com/llvm/llvm-project/blob/main/libunwind/docs/index.rst
|
||||
homepage = "https://clang.llvm.org/docs/Toolchain.html#unwind-library";
|
||||
description = "LLVM's unwinder library";
|
||||
longDescription = ''
|
||||
The unwind library provides a family of _Unwind_* functions implementing
|
||||
the language-neutral stack unwinding portion of the Itanium C++ ABI (Level
|
||||
I). It is a dependency of the C++ ABI library, and sometimes is a
|
||||
dependency of other runtimes.
|
||||
'';
|
||||
};
|
||||
} // (if postUnpack != "" then { inherit postUnpack; } else {})
|
||||
// (if (lib.versionAtLeast release_version "15") then { inherit postInstall; } else {})
|
||||
// (if prePatch != "" then { inherit prePatch; } else {})
|
||||
// (if postPatch != "" then { inherit postPatch; } else {}))
|
||||
meta = llvm_meta // {
|
||||
# Details: https://github.com/llvm/llvm-project/blob/main/libunwind/docs/index.rst
|
||||
homepage = "https://clang.llvm.org/docs/Toolchain.html#unwind-library";
|
||||
description = "LLVM's unwinder library";
|
||||
longDescription = ''
|
||||
The unwind library provides a family of _Unwind_* functions implementing
|
||||
the language-neutral stack unwinding portion of the Itanium C++ ABI (Level
|
||||
I). It is a dependency of the C++ ABI library, and sometimes is a
|
||||
dependency of other runtimes.
|
||||
'';
|
||||
};
|
||||
}
|
||||
// (if postUnpack != "" then { inherit postUnpack; } else { })
|
||||
// (if (lib.versionAtLeast release_version "15") then { inherit postInstall; } else { })
|
||||
// (if prePatch != "" then { inherit prePatch; } else { })
|
||||
// (if postPatch != "" then { inherit postPatch; } else { })
|
||||
)
|
||||
|
||||
@@ -1,77 +1,100 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, release_version
|
||||
, patches ? []
|
||||
, buildLlvmTools
|
||||
, monorepoSrc ? null
|
||||
, src ? null
|
||||
, libunwind ? null
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, libxml2
|
||||
, libllvm
|
||||
, version
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
release_version,
|
||||
patches ? [ ],
|
||||
buildLlvmTools,
|
||||
monorepoSrc ? null,
|
||||
src ? null,
|
||||
libunwind ? null,
|
||||
runCommand,
|
||||
cmake,
|
||||
ninja,
|
||||
libxml2,
|
||||
libllvm,
|
||||
version,
|
||||
}:
|
||||
let
|
||||
pname = "lld";
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "lld-src-${version}" {} ''
|
||||
runCommand "lld-src-${version}" { } ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
mkdir -p "$out/libunwind"
|
||||
cp -r ${monorepoSrc}/libunwind/include "$out/libunwind"
|
||||
mkdir -p "$out/llvm"
|
||||
'' else src;
|
||||
''
|
||||
else
|
||||
src;
|
||||
|
||||
postPatch = lib.optionalString (lib.versions.major release_version == "12") ''
|
||||
substituteInPlace MachO/CMakeLists.txt --replace \
|
||||
'(''${LLVM_MAIN_SRC_DIR}/' '('
|
||||
mkdir -p libunwind/include
|
||||
tar -xf "${libunwind.src}" --wildcards -C libunwind/include --strip-components=2 "libunwind-*/include/"
|
||||
'' + lib.optionalString (lib.versions.major release_version == "13" && stdenv.isDarwin) ''
|
||||
substituteInPlace MachO/CMakeLists.txt --replace \
|
||||
'(''${LLVM_MAIN_SRC_DIR}/' '(../'
|
||||
'';
|
||||
in
|
||||
stdenv.mkDerivation (rec {
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
|
||||
sourceRoot =
|
||||
if lib.versionOlder release_version "13" then null
|
||||
else "${src.name}/${pname}";
|
||||
|
||||
nativeBuildInputs = [ cmake ] ++ lib.optional (lib.versionAtLeast release_version "15") ninja;
|
||||
buildInputs = [ libllvm libxml2 ];
|
||||
|
||||
cmakeFlags = lib.optionals (lib.versionOlder release_version "14") [
|
||||
"-DLLVM_CONFIG_PATH=${libllvm.dev}/bin/llvm-config${lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) "-native"}"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
"-DLLD_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/lld"
|
||||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
];
|
||||
|
||||
# Musl's default stack size is too small for lld to be able to link Firefox.
|
||||
LDFLAGS = lib.optionalString stdenv.hostPlatform.isMusl "-Wl,-z,stack-size=2097152";
|
||||
|
||||
outputs = [ "out" "lib" "dev" ];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lld.llvm.org/";
|
||||
description = "The LLVM linker (unwrapped)";
|
||||
longDescription = ''
|
||||
LLD is a linker from the LLVM project that is a drop-in replacement for
|
||||
system linkers and runs much faster than them. It also provides features
|
||||
that are useful for toolchain developers.
|
||||
The linker supports ELF (Unix), PE/COFF (Windows), Mach-O (macOS), and
|
||||
WebAssembly in descending order of completeness. Internally, LLD consists
|
||||
of several different linkers.
|
||||
postPatch =
|
||||
lib.optionalString (lib.versions.major release_version == "12") ''
|
||||
substituteInPlace MachO/CMakeLists.txt --replace \
|
||||
'(''${LLVM_MAIN_SRC_DIR}/' '('
|
||||
mkdir -p libunwind/include
|
||||
tar -xf "${libunwind.src}" --wildcards -C libunwind/include --strip-components=2 "libunwind-*/include/"
|
||||
''
|
||||
+ lib.optionalString (lib.versions.major release_version == "13" && stdenv.isDarwin) ''
|
||||
substituteInPlace MachO/CMakeLists.txt --replace \
|
||||
'(''${LLVM_MAIN_SRC_DIR}/' '(../'
|
||||
'';
|
||||
};
|
||||
} // (if (postPatch == "" && lib.versions.major release_version != "13") then {} else { inherit postPatch; }))
|
||||
in
|
||||
stdenv.mkDerivation (
|
||||
rec {
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null else "${src.name}/${pname}";
|
||||
|
||||
nativeBuildInputs = [ cmake ] ++ lib.optional (lib.versionAtLeast release_version "15") ninja;
|
||||
buildInputs = [
|
||||
libllvm
|
||||
libxml2
|
||||
];
|
||||
|
||||
cmakeFlags =
|
||||
lib.optionals (lib.versionOlder release_version "14") [
|
||||
"-DLLVM_CONFIG_PATH=${libllvm.dev}/bin/llvm-config${
|
||||
lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) "-native"
|
||||
}"
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
"-DLLD_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/lld"
|
||||
]
|
||||
++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
];
|
||||
|
||||
# Musl's default stack size is too small for lld to be able to link Firefox.
|
||||
LDFLAGS = lib.optionalString stdenv.hostPlatform.isMusl "-Wl,-z,stack-size=2097152";
|
||||
|
||||
outputs = [
|
||||
"out"
|
||||
"lib"
|
||||
"dev"
|
||||
];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lld.llvm.org/";
|
||||
description = "The LLVM linker (unwrapped)";
|
||||
longDescription = ''
|
||||
LLD is a linker from the LLVM project that is a drop-in replacement for
|
||||
system linkers and runs much faster than them. It also provides features
|
||||
that are useful for toolchain developers.
|
||||
The linker supports ELF (Unix), PE/COFF (Windows), Mach-O (macOS), and
|
||||
WebAssembly in descending order of completeness. Internally, LLD consists
|
||||
of several different linkers.
|
||||
'';
|
||||
};
|
||||
}
|
||||
// (
|
||||
if (postPatch == "" && lib.versions.major release_version != "13") then
|
||||
{ }
|
||||
else
|
||||
{ inherit postPatch; }
|
||||
)
|
||||
)
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, makeWrapper
|
||||
, lldb
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
makeWrapper,
|
||||
lldb,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
|
||||
@@ -1,30 +1,31 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, release_version
|
||||
, cmake
|
||||
, zlib
|
||||
, ncurses
|
||||
, swig3
|
||||
, swig4
|
||||
, which
|
||||
, libedit
|
||||
, libxml2
|
||||
, libllvm
|
||||
, libclang
|
||||
, python3
|
||||
, version
|
||||
, darwin
|
||||
, lit
|
||||
, makeWrapper
|
||||
, lua5_3
|
||||
, ninja
|
||||
, runCommand
|
||||
, src ? null
|
||||
, monorepoSrc ? null
|
||||
, patches ? [ ]
|
||||
, enableManpages ? false
|
||||
, ...
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
release_version,
|
||||
cmake,
|
||||
zlib,
|
||||
ncurses,
|
||||
swig3,
|
||||
swig4,
|
||||
which,
|
||||
libedit,
|
||||
libxml2,
|
||||
libllvm,
|
||||
libclang,
|
||||
python3,
|
||||
version,
|
||||
darwin,
|
||||
lit,
|
||||
makeWrapper,
|
||||
lua5_3,
|
||||
ninja,
|
||||
runCommand,
|
||||
src ? null,
|
||||
monorepoSrc ? null,
|
||||
patches ? [ ],
|
||||
enableManpages ? false,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -34,7 +35,9 @@ let
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/lldb "$out"
|
||||
'' else src;
|
||||
''
|
||||
else
|
||||
src;
|
||||
vscodeExt = {
|
||||
name = if lib.versionAtLeast release_version "18" then "lldb-dap" else "lldb-vscode";
|
||||
version = if lib.versionAtLeast release_version "18" then "0.2.0" else "0.1.0";
|
||||
@@ -42,177 +45,198 @@ let
|
||||
swig = if lib.versionAtLeast release_version "18" then swig4 else swig3;
|
||||
in
|
||||
|
||||
stdenv.mkDerivation (rec {
|
||||
passthru.monorepoSrc = monorepoSrc;
|
||||
pname = "lldb";
|
||||
inherit version;
|
||||
stdenv.mkDerivation (
|
||||
rec {
|
||||
passthru.monorepoSrc = monorepoSrc;
|
||||
pname = "lldb";
|
||||
inherit version;
|
||||
|
||||
src = src';
|
||||
inherit patches;
|
||||
src = src';
|
||||
inherit patches;
|
||||
|
||||
outputs = [ "out" "lib" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"lib"
|
||||
"dev"
|
||||
];
|
||||
|
||||
sourceRoot = lib.optional (lib.versionAtLeast release_version "13") "${src.name}/${pname}";
|
||||
sourceRoot = lib.optional (lib.versionAtLeast release_version "13") "${src.name}/${pname}";
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
python3
|
||||
which
|
||||
swig
|
||||
lit
|
||||
makeWrapper
|
||||
lua5_3
|
||||
] ++ lib.optionals enableManpages [
|
||||
python3.pkgs.sphinx
|
||||
] ++ lib.optionals (lib.versionOlder release_version "18" && enableManpages) [
|
||||
python3.pkgs.recommonmark
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "18" && enableManpages) [
|
||||
python3.pkgs.myst-parser
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "14") [
|
||||
ninja
|
||||
];
|
||||
nativeBuildInputs =
|
||||
[
|
||||
cmake
|
||||
python3
|
||||
which
|
||||
swig
|
||||
lit
|
||||
makeWrapper
|
||||
lua5_3
|
||||
]
|
||||
++ lib.optionals enableManpages [ python3.pkgs.sphinx ]
|
||||
++ lib.optionals (lib.versionOlder release_version "18" && enableManpages) [
|
||||
python3.pkgs.recommonmark
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "18" && enableManpages) [
|
||||
python3.pkgs.myst-parser
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "14") [ ninja ];
|
||||
|
||||
buildInputs = [
|
||||
ncurses
|
||||
zlib
|
||||
libedit
|
||||
libxml2
|
||||
libllvm
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "16") [
|
||||
# Starting with LLVM 16, the resource dir patch is no longer enough to get
|
||||
# libclang into the rpath of the lldb executables. By putting it into
|
||||
# buildInputs cc-wrapper will set up rpath correctly for us.
|
||||
(lib.getLib libclang)
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
darwin.libobjc
|
||||
darwin.apple_sdk.libs.xpc
|
||||
darwin.apple_sdk.frameworks.Foundation
|
||||
darwin.bootstrap_cmds
|
||||
darwin.apple_sdk.frameworks.Carbon
|
||||
darwin.apple_sdk.frameworks.Cocoa
|
||||
]
|
||||
# The older libSystem used on x86_64 macOS is missing the
|
||||
# `<bsm/audit_session.h>` header which `lldb` uses.
|
||||
#
|
||||
# We copy this header over from macOS 10.12 SDK.
|
||||
#
|
||||
# See here for context:
|
||||
# https://github.com/NixOS/nixpkgs/pull/194634#issuecomment-1272129132
|
||||
++ lib.optional
|
||||
(
|
||||
stdenv.targetPlatform.isDarwin
|
||||
&& !stdenv.targetPlatform.isAarch64
|
||||
&& (lib.versionAtLeast release_version "15")
|
||||
)
|
||||
(
|
||||
runCommand "bsm-audit-session-header" { } ''
|
||||
install -Dm444 \
|
||||
"${lib.getDev darwin.apple_sdk.sdk}/include/bsm/audit_session.h" \
|
||||
"$out/include/bsm/audit_session.h"
|
||||
buildInputs =
|
||||
[
|
||||
ncurses
|
||||
zlib
|
||||
libedit
|
||||
libxml2
|
||||
libllvm
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "16") [
|
||||
# Starting with LLVM 16, the resource dir patch is no longer enough to get
|
||||
# libclang into the rpath of the lldb executables. By putting it into
|
||||
# buildInputs cc-wrapper will set up rpath correctly for us.
|
||||
(lib.getLib libclang)
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
darwin.libobjc
|
||||
darwin.apple_sdk.libs.xpc
|
||||
darwin.apple_sdk.frameworks.Foundation
|
||||
darwin.bootstrap_cmds
|
||||
darwin.apple_sdk.frameworks.Carbon
|
||||
darwin.apple_sdk.frameworks.Cocoa
|
||||
]
|
||||
# The older libSystem used on x86_64 macOS is missing the
|
||||
# `<bsm/audit_session.h>` header which `lldb` uses.
|
||||
#
|
||||
# We copy this header over from macOS 10.12 SDK.
|
||||
#
|
||||
# See here for context:
|
||||
# https://github.com/NixOS/nixpkgs/pull/194634#issuecomment-1272129132
|
||||
++
|
||||
lib.optional
|
||||
(
|
||||
stdenv.targetPlatform.isDarwin
|
||||
&& !stdenv.targetPlatform.isAarch64
|
||||
&& (lib.versionAtLeast release_version "15")
|
||||
)
|
||||
(
|
||||
runCommand "bsm-audit-session-header" { } ''
|
||||
install -Dm444 \
|
||||
"${lib.getDev darwin.apple_sdk.sdk}/include/bsm/audit_session.h" \
|
||||
"$out/include/bsm/audit_session.h"
|
||||
''
|
||||
);
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
|
||||
cmakeFlags =
|
||||
[
|
||||
"-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
|
||||
"-DLLVM_ENABLE_RTTI=OFF"
|
||||
"-DClang_DIR=${lib.getDev libclang}/lib/cmake"
|
||||
"-DLLVM_EXTERNAL_LIT=${lit}/bin/lit"
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [ "-DLLDB_USE_SYSTEM_DEBUGSERVER=ON" ]
|
||||
++ lib.optionals (!stdenv.isDarwin) [
|
||||
"-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "17") [
|
||||
"-DCLANG_RESOURCE_DIR=../../../../${libclang.lib}"
|
||||
]
|
||||
++ lib.optionals enableManpages (
|
||||
[
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# docs reference `automodapi` but it's not added to the extensions list when
|
||||
# only building the manpages:
|
||||
# https://github.com/llvm/llvm-project/blob/af6ec9200b09039573d85e349496c4f5b17c3d7f/lldb/docs/conf.py#L54
|
||||
#
|
||||
# so, we just ignore the resulting errors
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
]
|
||||
)
|
||||
++ lib.optionals doCheck [
|
||||
"-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
|
||||
"-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
doInstallCheck = lib.versionOlder release_version "15";
|
||||
|
||||
# TODO: cleanup with mass-rebuild
|
||||
installCheckPhase =
|
||||
''
|
||||
);
|
||||
if [ ! -e $lib/${python3.sitePackages}/lldb/_lldb*.so ] ; then
|
||||
echo "ERROR: python files not installed where expected!";
|
||||
return 1;
|
||||
fi
|
||||
'' # Something lua is built on older versions but this file doesn't exist.
|
||||
+ lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
if [ ! -e "$lib/lib/lua/${lua5_3.luaversion}/lldb.so" ] ; then
|
||||
echo "ERROR: lua files not installed where expected!";
|
||||
return 1;
|
||||
fi
|
||||
'';
|
||||
|
||||
hardeningDisable = [ "format" ];
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
|
||||
"-DLLVM_ENABLE_RTTI=OFF"
|
||||
"-DClang_DIR=${lib.getDev libclang}/lib/cmake"
|
||||
"-DLLVM_EXTERNAL_LIT=${lit}/bin/lit"
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
"-DLLDB_USE_SYSTEM_DEBUGSERVER=ON"
|
||||
] ++ lib.optionals (!stdenv.isDarwin) [
|
||||
"-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "17") [
|
||||
"-DCLANG_RESOURCE_DIR=../../../../${libclang.lib}"
|
||||
] ++ lib.optionals enableManpages ([
|
||||
"-DLLVM_ENABLE_SPHINX=ON"
|
||||
"-DSPHINX_OUTPUT_MAN=ON"
|
||||
"-DSPHINX_OUTPUT_HTML=OFF"
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
# docs reference `automodapi` but it's not added to the extensions list when
|
||||
# only building the manpages:
|
||||
# https://github.com/llvm/llvm-project/blob/af6ec9200b09039573d85e349496c4f5b17c3d7f/lldb/docs/conf.py#L54
|
||||
#
|
||||
# so, we just ignore the resulting errors
|
||||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
|
||||
]) ++ lib.optionals doCheck [
|
||||
"-DLLDB_TEST_C_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}cc"
|
||||
"-DLLDB_TEST_CXX_COMPILER=${stdenv.cc}/bin/${stdenv.cc.targetPrefix}c++"
|
||||
];
|
||||
|
||||
doCheck = false;
|
||||
doInstallCheck = lib.versionOlder release_version "15";
|
||||
|
||||
# TODO: cleanup with mass-rebuild
|
||||
installCheckPhase = ''
|
||||
if [ ! -e $lib/${python3.sitePackages}/lldb/_lldb*.so ] ; then
|
||||
echo "ERROR: python files not installed where expected!";
|
||||
return 1;
|
||||
fi
|
||||
'' # Something lua is built on older versions but this file doesn't exist.
|
||||
+ lib.optionalString (lib.versionAtLeast release_version "14") ''
|
||||
if [ ! -e "$lib/lib/lua/${lua5_3.luaversion}/lldb.so" ] ; then
|
||||
echo "ERROR: lua files not installed where expected!";
|
||||
return 1;
|
||||
fi
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/lldb --prefix PYTHONPATH : $lib/${python3.sitePackages}/
|
||||
|
||||
# Editor support
|
||||
# vscode:
|
||||
install -D ../tools/${vscodeExt.name}/package.json $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/package.json
|
||||
mkdir -p $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/bin
|
||||
ln -s $out/bin/*${if lib.versionAtLeast release_version "18" then vscodeExt.name else "-vscode"} $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/bin
|
||||
'';
|
||||
|
||||
passthru.vscodeExtName = vscodeExt.name;
|
||||
passthru.vscodeExtPublisher = "llvm";
|
||||
passthru.vscodeExtUniqueId = "llvm-org.${vscodeExt.name}-${vscodeExt.version}";
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lldb.llvm.org/";
|
||||
description = "A next-generation high-performance debugger";
|
||||
longDescription = ''
|
||||
LLDB is a next generation, high-performance debugger. It is built as a set
|
||||
of reusable components which highly leverage existing libraries in the
|
||||
larger LLVM Project, such as the Clang expression parser and LLVM
|
||||
disassembler.
|
||||
# Editor support
|
||||
# vscode:
|
||||
install -D ../tools/${vscodeExt.name}/package.json $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/package.json
|
||||
mkdir -p $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/bin
|
||||
ln -s $out/bin/*${
|
||||
if lib.versionAtLeast release_version "18" then vscodeExt.name else "-vscode"
|
||||
} $out/share/vscode/extensions/llvm-org.${vscodeExt.name}-${vscodeExt.version}/bin
|
||||
'';
|
||||
# llvm <10 never built on aarch64-darwin since first introduction in nixpkgs
|
||||
broken =
|
||||
(lib.versionOlder release_version "11" && stdenv.isDarwin && stdenv.isAarch64)
|
||||
|
||||
passthru.vscodeExtName = vscodeExt.name;
|
||||
passthru.vscodeExtPublisher = "llvm";
|
||||
passthru.vscodeExtUniqueId = "llvm-org.${vscodeExt.name}-${vscodeExt.version}";
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://lldb.llvm.org/";
|
||||
description = "A next-generation high-performance debugger";
|
||||
longDescription = ''
|
||||
LLDB is a next generation, high-performance debugger. It is built as a set
|
||||
of reusable components which highly leverage existing libraries in the
|
||||
larger LLVM Project, such as the Clang expression parser and LLVM
|
||||
disassembler.
|
||||
'';
|
||||
# llvm <10 never built on aarch64-darwin since first introduction in nixpkgs
|
||||
broken =
|
||||
(lib.versionOlder release_version "11" && stdenv.isDarwin && stdenv.isAarch64)
|
||||
|| (((lib.versions.major release_version) == "13") && stdenv.isDarwin);
|
||||
mainProgram = "lldb";
|
||||
};
|
||||
} // lib.optionalAttrs enableManpages {
|
||||
pname = "lldb-manpages";
|
||||
mainProgram = "lldb";
|
||||
};
|
||||
}
|
||||
// lib.optionalAttrs enableManpages {
|
||||
pname = "lldb-manpages";
|
||||
|
||||
buildPhase = lib.optionalString (lib.versionOlder release_version "15") ''
|
||||
make ${if (lib.versionOlder release_version "12") then "docs-man" else "docs-lldb-man"}
|
||||
'';
|
||||
buildPhase = lib.optionalString (lib.versionOlder release_version "15") ''
|
||||
make ${if (lib.versionOlder release_version "12") then "docs-man" else "docs-lldb-man"}
|
||||
'';
|
||||
|
||||
ninjaFlags = lib.optionals (lib.versionAtLeast release_version "15") [ "docs-lldb-man" ];
|
||||
|
||||
ninjaFlags = lib.optionals (lib.versionAtLeast release_version "15") [ "docs-lldb-man" ];
|
||||
propagatedBuildInputs = [ ];
|
||||
|
||||
propagatedBuildInputs = [ ];
|
||||
# manually install lldb man page
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
install docs/man/lldb.1 -t $out/share/man/man1/
|
||||
'';
|
||||
|
||||
# manually install lldb man page
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/man/man1
|
||||
install docs/man/lldb.1 -t $out/share/man/man1/
|
||||
'';
|
||||
postPatch = null;
|
||||
postInstall = null;
|
||||
|
||||
postPatch = null;
|
||||
postInstall = null;
|
||||
outputs = [ "out" ];
|
||||
|
||||
outputs = [ "out" ];
|
||||
doCheck = false;
|
||||
|
||||
doCheck = false;
|
||||
|
||||
meta = llvm_meta // {
|
||||
description = "man pages for LLDB ${version}";
|
||||
};
|
||||
})
|
||||
meta = llvm_meta // {
|
||||
description = "man pages for LLDB ${version}";
|
||||
};
|
||||
}
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,20 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, buildLlvmTools
|
||||
, monorepoSrc
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, libxml2
|
||||
, libllvm
|
||||
, version
|
||||
, doCheck ? (!stdenv.isx86_32 /* TODO: why */) && (!stdenv.hostPlatform.isMusl)
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
buildLlvmTools,
|
||||
monorepoSrc,
|
||||
runCommand,
|
||||
cmake,
|
||||
ninja,
|
||||
libxml2,
|
||||
libllvm,
|
||||
version,
|
||||
doCheck ?
|
||||
(
|
||||
!stdenv.isx86_32 # TODO: why
|
||||
)
|
||||
&& (!stdenv.hostPlatform.isMusl),
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@@ -28,9 +33,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
sourceRoot = "${src.name}/mlir";
|
||||
|
||||
patches = [
|
||||
./gnu-install-dirs.patch
|
||||
];
|
||||
patches = [ ./gnu-install-dirs.patch ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
@@ -42,30 +45,42 @@ stdenv.mkDerivation rec {
|
||||
libxml2
|
||||
];
|
||||
|
||||
cmakeFlags = [
|
||||
"-DLLVM_BUILD_TOOLS=ON"
|
||||
# Install headers as well
|
||||
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF"
|
||||
"-DMLIR_TOOLS_INSTALL_DIR=${placeholder "out"}/bin/"
|
||||
"-DLLVM_ENABLE_IDE=OFF"
|
||||
"-DMLIR_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/mlir"
|
||||
"-DMLIR_INSTALL_CMAKE_DIR=${placeholder "dev"}/lib/cmake/mlir"
|
||||
"-DLLVM_BUILD_TESTS=${if doCheck then "ON" else "OFF"}"
|
||||
"-DLLVM_ENABLE_FFI=ON"
|
||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_ENABLE_DUMP=ON"
|
||||
] ++ lib.optionals stdenv.hostPlatform.isStatic [
|
||||
# Disables building of shared libs, -fPIC is still injected by cc-wrapper
|
||||
"-DLLVM_ENABLE_PIC=OFF"
|
||||
"-DLLVM_BUILD_STATIC=ON"
|
||||
"-DLLVM_LINK_LLVM_DYLIB=OFF"
|
||||
] ++ lib.optionals ((stdenv.hostPlatform != stdenv.buildPlatform) && !(stdenv.buildPlatform.canExecute stdenv.hostPlatform)) [
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
"-DMLIR_TABLEGEN_EXE=${buildLlvmTools.mlir}/bin/mlir-tblgen"
|
||||
];
|
||||
cmakeFlags =
|
||||
[
|
||||
"-DLLVM_BUILD_TOOLS=ON"
|
||||
# Install headers as well
|
||||
"-DLLVM_INSTALL_TOOLCHAIN_ONLY=OFF"
|
||||
"-DMLIR_TOOLS_INSTALL_DIR=${placeholder "out"}/bin/"
|
||||
"-DLLVM_ENABLE_IDE=OFF"
|
||||
"-DMLIR_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/mlir"
|
||||
"-DMLIR_INSTALL_CMAKE_DIR=${placeholder "dev"}/lib/cmake/mlir"
|
||||
"-DLLVM_BUILD_TESTS=${if doCheck then "ON" else "OFF"}"
|
||||
"-DLLVM_ENABLE_FFI=ON"
|
||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_ENABLE_DUMP=ON"
|
||||
]
|
||||
++ lib.optionals stdenv.hostPlatform.isStatic [
|
||||
# Disables building of shared libs, -fPIC is still injected by cc-wrapper
|
||||
"-DLLVM_ENABLE_PIC=OFF"
|
||||
"-DLLVM_BUILD_STATIC=ON"
|
||||
"-DLLVM_LINK_LLVM_DYLIB=OFF"
|
||||
]
|
||||
++
|
||||
lib.optionals
|
||||
(
|
||||
(stdenv.hostPlatform != stdenv.buildPlatform)
|
||||
&& !(stdenv.buildPlatform.canExecute stdenv.hostPlatform)
|
||||
)
|
||||
[
|
||||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
|
||||
"-DMLIR_TABLEGEN_EXE=${buildLlvmTools.mlir}/bin/mlir-tblgen"
|
||||
];
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
outputs = [
|
||||
"out"
|
||||
"dev"
|
||||
];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://mlir.llvm.org/";
|
||||
|
||||
@@ -1,86 +1,91 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, llvm_meta
|
||||
, release_version
|
||||
, patches ? []
|
||||
, monorepoSrc ? null
|
||||
, src ? null
|
||||
, runCommand
|
||||
, cmake
|
||||
, ninja
|
||||
, llvm
|
||||
, targetLlvm
|
||||
, lit
|
||||
, clang-unwrapped
|
||||
, perl
|
||||
, pkg-config
|
||||
, xcbuild
|
||||
, version
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
llvm_meta,
|
||||
release_version,
|
||||
patches ? [ ],
|
||||
monorepoSrc ? null,
|
||||
src ? null,
|
||||
runCommand,
|
||||
cmake,
|
||||
ninja,
|
||||
llvm,
|
||||
targetLlvm,
|
||||
lit,
|
||||
clang-unwrapped,
|
||||
perl,
|
||||
pkg-config,
|
||||
xcbuild,
|
||||
version,
|
||||
}:
|
||||
let
|
||||
pname = "openmp";
|
||||
src' =
|
||||
if monorepoSrc != null then
|
||||
runCommand "${pname}-src-${version}" {} ''
|
||||
runCommand "${pname}-src-${version}" { } ''
|
||||
mkdir -p "$out"
|
||||
cp -r ${monorepoSrc}/cmake "$out"
|
||||
cp -r ${monorepoSrc}/${pname} "$out"
|
||||
'' else src;
|
||||
''
|
||||
else
|
||||
src;
|
||||
in
|
||||
stdenv.mkDerivation (rec {
|
||||
inherit pname version patches;
|
||||
stdenv.mkDerivation (
|
||||
rec {
|
||||
inherit pname version patches;
|
||||
|
||||
src = src';
|
||||
src = src';
|
||||
|
||||
sourceRoot =
|
||||
if lib.versionOlder release_version "13" then null
|
||||
else "${src.name}/${pname}";
|
||||
sourceRoot = if lib.versionOlder release_version "13" then null else "${src.name}/${pname}";
|
||||
|
||||
outputs = [ "out" ]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "14") [ "dev" ];
|
||||
outputs = [ "out" ] ++ lib.optionals (lib.versionAtLeast release_version "14") [ "dev" ];
|
||||
|
||||
patchFlags =
|
||||
if lib.versionOlder release_version "14" then [ "-p2" ]
|
||||
else null;
|
||||
patchFlags = if lib.versionOlder release_version "14" then [ "-p2" ] else null;
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "15") [
|
||||
ninja
|
||||
] ++ [ perl ] ++ lib.optionals (lib.versionAtLeast release_version "14") [
|
||||
pkg-config lit
|
||||
];
|
||||
nativeBuildInputs =
|
||||
[ cmake ]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "15") [ ninja ]
|
||||
++ [ perl ]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "14") [
|
||||
pkg-config
|
||||
lit
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
(if stdenv.buildPlatform == stdenv.hostPlatform then llvm else targetLlvm)
|
||||
];
|
||||
buildInputs = [ (if stdenv.buildPlatform == stdenv.hostPlatform then llvm else targetLlvm) ];
|
||||
|
||||
cmakeFlags = lib.optionals (lib.versions.major release_version == "13") [
|
||||
"-DLIBOMPTARGET_BUILD_AMDGCN_BCLIB=OFF" # Building the AMDGCN device RTL fails
|
||||
] ++ lib.optionals (lib.versionAtLeast release_version "14") [
|
||||
"-DCLANG_TOOL=${clang-unwrapped}/bin/clang"
|
||||
"-DOPT_TOOL=${llvm}/bin/opt"
|
||||
"-DLINK_TOOL=${llvm}/bin/llvm-link"
|
||||
];
|
||||
cmakeFlags =
|
||||
lib.optionals (lib.versions.major release_version == "13") [
|
||||
"-DLIBOMPTARGET_BUILD_AMDGCN_BCLIB=OFF" # Building the AMDGCN device RTL fails
|
||||
]
|
||||
++ lib.optionals (lib.versionAtLeast release_version "14") [
|
||||
"-DCLANG_TOOL=${clang-unwrapped}/bin/clang"
|
||||
"-DOPT_TOOL=${llvm}/bin/opt"
|
||||
"-DLINK_TOOL=${llvm}/bin/llvm-link"
|
||||
];
|
||||
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://openmp.llvm.org/";
|
||||
description = "Support for the OpenMP language";
|
||||
longDescription = ''
|
||||
The OpenMP subproject of LLVM contains the components required to build an
|
||||
executable OpenMP program that are outside the compiler itself.
|
||||
Contains the code for the runtime library against which code compiled by
|
||||
"clang -fopenmp" must be linked before it can run and the library that
|
||||
supports offload to target devices.
|
||||
meta = llvm_meta // {
|
||||
homepage = "https://openmp.llvm.org/";
|
||||
description = "Support for the OpenMP language";
|
||||
longDescription = ''
|
||||
The OpenMP subproject of LLVM contains the components required to build an
|
||||
executable OpenMP program that are outside the compiler itself.
|
||||
Contains the code for the runtime library against which code compiled by
|
||||
"clang -fopenmp" must be linked before it can run and the library that
|
||||
supports offload to target devices.
|
||||
'';
|
||||
# "All of the code is dual licensed under the MIT license and the UIUC
|
||||
# License (a BSD-like license)":
|
||||
license = with lib.licenses; [
|
||||
mit
|
||||
ncsa
|
||||
];
|
||||
};
|
||||
}
|
||||
// (lib.optionalAttrs (lib.versionAtLeast release_version "14") {
|
||||
doCheck = false;
|
||||
checkTarget = "check-openmp";
|
||||
preCheck = ''
|
||||
patchShebangs ../tools/archer/tests/deflake.bash
|
||||
'';
|
||||
# "All of the code is dual licensed under the MIT license and the UIUC
|
||||
# License (a BSD-like license)":
|
||||
license = with lib.licenses; [ mit ncsa ];
|
||||
};
|
||||
} // (lib.optionalAttrs (lib.versionAtLeast release_version "14") {
|
||||
doCheck = false;
|
||||
checkTarget = "check-openmp";
|
||||
preCheck = ''
|
||||
patchShebangs ../tools/archer/tests/deflake.bash
|
||||
'';
|
||||
}))
|
||||
})
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user