summaryrefslogtreecommitdiffstats
path: root/pkgs
diff options
context:
space:
mode:
authorWeijia Wang <9713184+wegank@users.noreply.github.com>2024-04-14 04:54:42 +0200
committerGitHub <noreply@github.com>2024-04-14 04:54:42 +0200
commit6da46d61baddebc5b8e6c6b17df1cd61c30859fc (patch)
tree48d71b2075100b468c8b5482d3b0c8ffcc35ba1e /pkgs
parent62b4744089f9b55b838bb1e5bd740a37144bb21e (diff)
parentdc4d5c21937ec81d41e0211d74d6e562955bf5be (diff)
Merge pull request #303948 from ExpidusOS/feat/llvm-git-commonify-clang
llvmPackages_{12,13,14,15,16,17,18,git}: use common clang
Diffstat (limited to 'pkgs')
-rw-r--r--pkgs/development/compilers/llvm/12/clang/default.nix132
-rw-r--r--pkgs/development/compilers/llvm/12/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/13/clang/default.nix126
-rw-r--r--pkgs/development/compilers/llvm/13/default.nix21
-rw-r--r--pkgs/development/compilers/llvm/14/clang/default.nix129
-rw-r--r--pkgs/development/compilers/llvm/14/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/15/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/16/clang/default.nix137
-rw-r--r--pkgs/development/compilers/llvm/16/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/17/clang/default.nix141
-rw-r--r--pkgs/development/compilers/llvm/17/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/18/default.nix16
-rw-r--r--pkgs/development/compilers/llvm/common/clang/default.nix (renamed from pkgs/development/compilers/llvm/15/clang/default.nix)136
-rw-r--r--pkgs/development/compilers/llvm/git/clang/default.nix139
-rw-r--r--pkgs/development/compilers/llvm/git/default.nix16
15 files changed, 206 insertions, 867 deletions
diff --git a/pkgs/development/compilers/llvm/12/clang/default.nix b/pkgs/development/compilers/llvm/12/clang/default.nix
deleted file mode 100644
index c482a8ee6875..000000000000
--- a/pkgs/development/compilers/llvm/12/clang/default.nix
+++ /dev/null
@@ -1,132 +0,0 @@
-{ lib, stdenv, llvm_meta, fetch, substituteAll, cmake, libxml2, libllvm, version, clang-tools-extra_src, python3
-, buildLlvmTools
-, fixDarwinDylibNames
-, enableManpages ? false
-}:
-
-let
- self = stdenv.mkDerivation ({
- pname = "clang";
- inherit version;
-
- src = fetch "clang" "0px4gl27az6cdz6adds89qzdwb1cqpjsfvrldbz9qvpmphrj34bf";
- inherit clang-tools-extra_src;
-
- 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'
- '';
-
- nativeBuildInputs = [ cmake python3 ]
- ++ lib.optional enableManpages python3.pkgs.sphinx
- ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = [ libxml2 libllvm ];
-
- cmakeFlags = [
- "-DCLANGD_BUILD_XPC=OFF"
- "-DLLVM_ENABLE_RTTI=ON"
- ] ++ 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"
- ];
-
- patches = [
- ./purity.patch
- # https://reviews.llvm.org/D51899
- ./gnu-install-dirs.patch
- (substituteAll {
- src = ../../common/clang/clang-11-15-LLVMgold-path.patch;
- libllvmLibdir = "${libllvm.lib}/lib";
- })
- ];
-
- postPatch = ''
- sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \
- -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \
- lib/Driver/ToolChains/*.cpp
- '' + lib.optionalString stdenv.hostPlatform.isMusl ''
- sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
- '';
-
- outputs = [ "out" "lib" "dev" "python" ];
-
- postInstall = ''
- ln -sv $out/bin/clang $out/bin/cpp
-
- # Move libclang to 'lib' output
- moveToOutput "lib/libclang.*" "$lib"
- moveToOutput "lib/libclang-cpp.*" "$lib"
- 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."
-
- mkdir -p $python/bin $python/share/{clang,scan-view}
- 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
- mv $out/share/scan-view/*.py $python/share/scan-view
- rm $out/bin/c-index-test
- patchShebangs $python/bin
-
- mkdir -p $dev/bin
- cp bin/clang-tblgen $dev/bin
- '';
-
- passthru = {
- inherit libllvm;
- isClang = true;
- hardeningUnsupportedFlags = [ "fortify3" "zerocallusedregs" ];
- };
-
- meta = llvm_meta // {
- homepage = "https://clang.llvm.org/";
- description = "A C language family frontend for LLVM";
- longDescription = ''
- The Clang project provides a language front-end and tooling
- infrastructure for languages in the C language family (C, C++, Objective
- C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project.
- It aims to deliver amazingly fast compiles, extremely useful error and
- warning messages and to provide a platform for building great source
- level tools. The Clang Static Analyzer and clang-tidy are tools that
- automatically find bugs in your code, and are great examples of the sort
- of tools that can be built using the Clang frontend as a library to
- parse C/C++ code.
- '';
- mainProgram = "clang";
- };
- } // lib.optionalAttrs enableManpages {
- pname = "clang-manpages";
-
- buildPhase = ''
- make docs-clang-man
- '';
-
- installPhase = ''
- mkdir -p $out/share/man/man1
- # Manually install clang manpage
- cp docs/man/*.1 $out/share/man/man1/
- '';
-
- outputs = [ "out" ];
-
- doCheck = false;
-
- meta = llvm_meta // {
- description = "man page for Clang ${version}";
- };
- });
-in self
diff --git a/pkgs/development/compilers/llvm/12/default.nix b/pkgs/development/compilers/llvm/12/default.nix
index 7bd82c071538..0d9202df8aee 100644
--- a/pkgs/development/compilers/llvm/12/default.nix
+++ b/pkgs/development/compilers/llvm/12/default.nix
@@ -1,6 +1,6 @@
{ lowPrio, newScope, pkgs, lib, stdenv, cmake
, preLibcCrossHeaders
-, substitute, fetchFromGitHub, fetchpatch
+, substitute, substituteAll, fetchFromGitHub, fetchpatch
, libxml2, python3, isl, fetchurl, overrideCC, wrapCCWith, wrapBintoolsWith
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
@@ -56,7 +56,7 @@ let
then tools.bintools
else bootBintools;
- in {
+ in rec {
libllvm = callPackage ./llvm {
inherit llvm_meta;
@@ -66,7 +66,17 @@ let
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
llvm = tools.libllvm;
- libclang = callPackage ./clang {
+ libclang = callPackage ../common/clang {
+ src = fetch "clang" "0px4gl27az6cdz6adds89qzdwb1cqpjsfvrldbz9qvpmphrj34bf";
+ patches = [
+ ./clang/purity.patch
+ # https://reviews.llvm.org/D51899
+ ./clang/gnu-install-dirs.patch
+ (substituteAll {
+ src = ../common/clang/clang-11-15-LLVMgold-path.patch;
+ libllvmLibdir = "${libllvm.lib}/lib";
+ })
+ ];
inherit clang-tools-extra_src llvm_meta;
};
diff --git a/pkgs/development/compilers/llvm/13/clang/default.nix b/pkgs/development/compilers/llvm/13/clang/default.nix
deleted file mode 100644
index 2d02ffb60b36..000000000000
--- a/pkgs/development/compilers/llvm/13/clang/default.nix
+++ /dev/null
@@ -1,126 +0,0 @@
-{ lib, stdenv, llvm_meta, src, substituteAll, cmake, libxml2, libllvm, version, python3
-, buildLlvmTools
-, fixDarwinDylibNames
-, enableManpages ? false
-}:
-
-let
- self = stdenv.mkDerivation ({
- pname = "clang";
- inherit version;
-
- inherit src;
- sourceRoot = "${src.name}/clang";
-
- nativeBuildInputs = [ cmake python3 ]
- ++ lib.optional enableManpages python3.pkgs.sphinx
- ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = [ libxml2 libllvm ];
-
- cmakeFlags = [
- "-DCLANGD_BUILD_XPC=OFF"
- "-DLLVM_ENABLE_RTTI=ON"
- ] ++ 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"
- ];
-
- patches = [
- ./purity.patch
- # https://reviews.llvm.org/D51899
- ./gnu-install-dirs.patch
- # Revert of https://reviews.llvm.org/D100879
- # The malloc alignment assumption is incorrect for jemalloc and causes
- # mis-compilation in firefox.
- # See: https://bugzilla.mozilla.org/show_bug.cgi?id=1741454
- ./revert-malloc-alignment-assumption.patch
- ../../common/clang/add-nostdlibinc-flag.patch
- (substituteAll {
- src = ../../common/clang/clang-11-15-LLVMgold-path.patch;
- libllvmLibdir = "${libllvm.lib}/lib";
- })
- ];
-
- postPatch = ''
- (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" ];
-
- postInstall = ''
- ln -sv $out/bin/clang $out/bin/cpp
-
- # Move libclang to 'lib' output
- moveToOutput "lib/libclang.*" "$lib"
- moveToOutput "lib/libclang-cpp.*" "$lib"
- 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."
-
- mkdir -p $python/bin $python/share/{clang,scan-view}
- 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
- mv $out/share/scan-view/*.py $python/share/scan-view
- rm $out/bin/c-index-test
- patchShebangs $python/bin
-
- mkdir -p $dev/bin
- cp bin/clang-tblgen $dev/bin
- '';
-
- passthru = {
- inherit libllvm;
- isClang = true;
- hardeningUnsupportedFlags = [ "fortify3" "zerocallusedregs" ];
- };
-
- meta = llvm_meta // {
- homepage = "https://clang.llvm.org/";
- description = "A C language family frontend for LLVM";
- longDescription = ''
- The Clang project provides a language front-end and tooling
- infrastructure for languages in the C language family (C, C++, Objective
- C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project.
- It aims to deliver amazingly fast compiles, extremely useful error and
- warning messages and to provide a platform for building great source
- level tools. The Clang Static Analyzer and clang-tidy are tools that
- automatically find bugs in your code, and are great examples of the sort
- of tools that can be built using the Clang frontend as a library to
- parse C/C++ code.
- '';
- mainProgram = "clang";
- };
- } // lib.optionalAttrs enableManpages {
- pname = "clang-manpages";
-
- buildPhase = ''
- make docs-clang-man
- '';
-
- installPhase = ''
- mkdir -p $out/share/man/man1
- # Manually install clang manpage
- cp docs/man/*.1 $out/share/man/man1/
- '';
-
- outputs = [ "out" ];
-
- doCheck = false;
-
- meta = llvm_meta // {
- description = "man page for Clang ${version}";
- };
- });
-in self
diff --git a/pkgs/development/compilers/llvm/13/default.nix b/pkgs/development/compilers/llvm/13/default.nix
index 712c6e160d1e..ecdbd14e98e7 100644
--- a/pkgs/development/compilers/llvm/13/default.nix
+++ b/pkgs/development/compilers/llvm/13/default.nix
@@ -1,7 +1,7 @@
{ lowPrio, newScope, pkgs, lib, stdenv, cmake
, preLibcCrossHeaders
, fetchpatch
-, libxml2, python3, isl, fetchFromGitHub, substitute, overrideCC, wrapCCWith, wrapBintoolsWith
+, libxml2, python3, isl, fetchFromGitHub, substitute, substituteAll, overrideCC, wrapCCWith, wrapBintoolsWith
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
, targetLlvm
@@ -82,7 +82,7 @@ in let
then tools.bintools
else bootBintools;
- in {
+ in rec {
libllvm = callPackage ./llvm {
inherit llvm_meta;
@@ -92,7 +92,22 @@ in let
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
llvm = tools.libllvm;
- libclang = callPackage ./clang {
+ libclang = callPackage ../common/clang {
+ patches = [
+ ./clang/purity.patch
+ # https://reviews.llvm.org/D51899
+ ./clang/gnu-install-dirs.patch
+ # Revert of https://reviews.llvm.org/D100879
+ # The malloc alignment assumption is incorrect for jemalloc and causes
+ # mis-compilation in firefox.
+ # See: https://bugzilla.mozilla.org/show_bug.cgi?id=1741454
+ ./clang/revert-malloc-alignment-assumption.patch
+ ../common/clang/add-nostdlibinc-flag.patch
+ (substituteAll {
+ src = ../common/clang/clang-11-15-LLVMgold-path.patch;
+ libllvmLibdir = "${libllvm.lib}/lib";
+ })
+ ];
inherit llvm_meta;
};
diff --git a/pkgs/development/compilers/llvm/14/clang/default.nix b/pkgs/development/compilers/llvm/14/clang/default.nix
deleted file mode 100644
index 829edb15d600..000000000000
--- a/pkgs/development/compilers/llvm/14/clang/default.nix
+++ /dev/null
@@ -1,129 +0,0 @@
-{ lib, stdenv, llvm_meta
-, monorepoSrc, runCommand
-, substituteAll, cmake, libxml2, libllvm, version, python3
-, buildLlvmTools
-, fixDarwinDylibNames
-, enableManpages ? false
-}:
-
-let
- self = stdenv.mkDerivation (rec {
- pname = "clang";
- inherit version;
-
- src = runCommand "${pname}-src-${version}" {} ''
- mkdir -p "$out"
- cp -r ${monorepoSrc}/cmake "$out"
- cp -r ${monorepoSrc}/${pname} "$out"
- cp -r ${monorepoSrc}/clang-tools-extra "$out"
- '';
-
- sourceRoot = "${src.name}/${pname}";
-
- nativeBuildInputs = [ cmake python3 ]
- ++ lib.optional enableManpages python3.pkgs.sphinx
- ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = [ libxml2 libllvm ];
-
- cmakeFlags = [
- "-DCLANGD_BUILD_XPC=OFF"
- "-DLLVM_ENABLE_RTTI=ON"
- ] ++ 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"
- ];
-
- patches = [
- ./purity.patch
- # https://reviews.llvm.org/D51899
- ./gnu-install-dirs.patch
- ../../common/clang/add-nostdlibinc-flag.patch
- (substituteAll {
- src = ../../common/clang/clang-11-15-LLVMgold-path.patch;
- libllvmLibdir = "${libllvm.lib}/lib";
- })
- ];
-
- postPatch = ''
- (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" ];
-
- postInstall = ''
- ln -sv $out/bin/clang $out/bin/cpp
-
- # Move libclang to 'lib' output
- moveToOutput "lib/libclang.*" "$lib"
- moveToOutput "lib/libclang-cpp.*" "$lib"
- 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."
-
- mkdir -p $python/bin $python/share/{clang,scan-view}
- 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
- mv $out/share/scan-view/*.py $python/share/scan-view
- rm $out/bin/c-index-test
- patchShebangs $python/bin
-
- mkdir -p $dev/bin
- cp bin/clang-tblgen $dev/bin
- '';
-
- passthru = {
- inherit libllvm;
- isClang = true;
- hardeningUnsupportedFlags = [ "fortify3" "zerocallusedregs" ];
- };
-
- meta = llvm_meta // {
- homepage = "https://clang.llvm.org/";
- description = "A C language family frontend for LLVM";
- longDescription = ''
- The Clang project provides a language front-end and tooling
- infrastructure for languages in the C language family (C, C++, Objective
- C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project.
- It aims to deliver amazingly fast compiles, extremely useful error and
- warning messages and to provide a platform for building great source
- level tools. The Clang Static Analyzer and clang-tidy are tools that
- automatically find bugs in your code, and are great examples of the sort
- of tools that can be built using the Clang frontend as a library to
- parse C/C++ code.
- '';
- mainProgram = "clang";
- };
- } // lib.optionalAttrs enableManpages {
- pname = "clang-manpages";
-
- buildPhase = ''
- make docs-clang-man
- '';
-
- installPhase = ''
- mkdir -p $out/share/man/man1
- # Manually install clang manpage
- cp docs/man/*.1 $out/share/man/man1/
- '';
-
- outputs = [ "out" ];
-
- doCheck = false;
-
- meta = llvm_meta // {
- description = "man page for Clang ${version}";
- };
- });
-in self
diff --git a/pkgs/development/compilers/llvm/14/default.nix b/pkgs/development/compilers/llvm/14/default.nix
index efab4ca73572..fb1b8743b6eb 100644
--- a/pkgs/development/compilers/llvm/14/default.nix
+++ b/pkgs/development/compilers/llvm/14/default.nix
@@ -1,6 +1,6 @@
{ lowPrio, newScope, pkgs, lib, stdenv, cmake
, preLibcCrossHeaders
-, libxml2, python3, fetchFromGitHub, substitute, overrideCC, wrapCCWith, wrapBintoolsWith
+, libxml2, python3, fetchFromGitHub, substitute, substituteAll, overrideCC, wrapCCWith, wrapBintoolsWith
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
, targetLlvm
@@ -78,7 +78,7 @@ in let
then tools.bintools
else bootBintools;
- in {
+ in rec {
libllvm = callPackage ./llvm {
inherit llvm_meta;
@@ -88,7 +88,17 @@ in let
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
llvm = tools.libllvm;
- libclang = callPackage ./clang {
+ libclang = callPackage ../common/clang {
+ patches = [
+ ./clang/purity.patch
+ # https://reviews.llvm.org/D51899
+ ./clang/gnu-install-dirs.patch
+ ../common/clang/add-nostdlibinc-flag.patch
+ (substituteAll {
+ src = ../common/clang/clang-11-15-LLVMgold-path.patch;
+ libllvmLibdir = "${libllvm.lib}/lib";
+ })
+ ];
inherit llvm_meta;
};
diff --git a/pkgs/development/compilers/llvm/15/default.nix b/pkgs/development/compilers/llvm/15/default.nix
index 01112e0165e4..ce8426857ebe 100644
--- a/pkgs/development/compilers/llvm/15/default.nix
+++ b/pkgs/development/compilers/llvm/15/default.nix
@@ -1,6 +1,6 @@
{ lowPrio, newScope, pkgs, lib, stdenv, cmake, ninja
, preLibcCrossHeaders
-, libxml2, python3, fetchFromGitHub, fetchpatch, substitute, overrideCC, wrapCCWith, wrapBintoolsWith
+, libxml2, python3, fetchFromGitHub, fetchpatch, substitute, substituteAll, overrideCC, wrapCCWith, wrapBintoolsWith
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
, targetLlvm
@@ -84,7 +84,7 @@ in let
then tools.bintools
else bootBintools;
- in {
+ in rec {
libllvm = callPackage ./llvm {
inherit llvm_meta;
@@ -94,7 +94,17 @@ in let
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
llvm = tools.libllvm;
- libclang = callPackage ./clang {
+ libclang = callPackage ../common/clang {
+ patches = [
+ ./clang/purity.patch
+ # https://reviews.llvm.org/D51899
+ ./clang/gnu-install-dirs.patch
+ ../common/clang/add-nostdlibinc-flag.patch
+ (substituteAll {
+ src = ../common/clang/clang-11-15-LLVMgold-path.patch;
+ libllvmLibdir = "${libllvm.lib}/lib";
+ })
+ ];
inherit llvm_meta;
};
diff --git a/pkgs/development/compilers/llvm/16/clang/default.nix b/pkgs/development/compilers/llvm/16/clang/default.nix
deleted file mode 100644
index c5d9af356d9e..000000000000
--- a/pkgs/development/compilers/llvm/16/clang/default.nix
+++ /dev/null
@@ -1,137 +0,0 @@
-{ lib, stdenv, llvm_meta
-, monorepoSrc, runCommand
-, substituteAll, cmake, ninja, libxml2, libllvm, version, python3
-, buildLlvmTools
-, fixDarwinDylibNames
-, enableManpages ? false
-}:
-
-let
- self = stdenv.mkDerivation (finalAttrs: rec {
- pname = "clang";
- inherit version;
-
- src = runCommand "${pname}-src-${version}" {} ''
- mkdir -p "$out"
- cp -r ${monorepoSrc}/cmake "$out"
- cp -r ${monorepoSrc}/${pname} "$out"
- cp -r ${monorepoSrc}/clang-tools-extra "$out"
- '';
-
- sourceRoot = "${src.name}/${pname}";
-
- nativeBuildInputs = [ cmake ninja python3 ]
- ++ lib.optional enableManpages python3.pkgs.sphinx
- ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = [ libxml2 libllvm ];
-
- cmakeFlags = [
- "-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang"
- "-DCLANGD_BUILD_XPC=OFF"
- "-DLLVM_ENABLE_RTTI=ON"
- ] ++ 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.buildPlatform.canExecute stdenv.hostPlatform) [
- "-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
- "-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen"
- # 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"
- ];
-
- patches = [
- ./purity.patch
- # https://reviews.llvm.org/D51899
- ./gnu-install-dirs.patch
- ../../common/clang/add-nostdlibinc-flag.patch
- (substituteAll {
- src = ../../common/clang/clang-at-least-16-LLVMgold-path.patch;
- libllvmLibdir = "${libllvm.lib}/lib";
- })
- ];
-
- postPatch = ''
- (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" ];
-
- postInstall = ''
- ln -sv $out/bin/clang $out/bin/cpp
-
- # Move libclang to 'lib' output
- moveToOutput "lib/libclang.*" "$lib"
- moveToOutput "lib/libclang-cpp.*" "$lib"
- 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."
-
- 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
- rm $out/bin/c-index-test
- patchShebangs $python/bin
-
- mkdir -p $dev/bin
- cp bin/{clang-tblgen,clang-tidy-confusable-chars-gen,clang-pseudo-gen} $dev/bin
- '';
-
- passthru = {
- inherit libllvm;
- isClang = true;
- hardeningUnsupportedFlags = [
- "fortify3"
- ];
- hardeningUnsupportedFlagsByTargetPlatform = targetPlatform:
- lib.optional (!(targetPlatform.isx86_64 || targetPlatform.isAarch64)) "zerocallusedregs"
- ++ (finalAttrs.passthru.hardeningUnsupportedFlags or []);
- };
-
- meta = llvm_meta // {
- homepage = "https://clang.llvm.org/";
- description = "A C language family frontend for LLVM";
- longDescription = ''
- The Clang project provides a language front-end and tooling
- infrastructure for languages in the C language family (C, C++, Objective
- C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project.
- It aims to deliver amazingly fast compiles, extremely useful error and
- warning messages and to provide a platform for building great source
- level tools. The Clang Static Analyzer and clang-tidy are tools that
- automatically find bugs in your code, and are great examples of the sort
- of tools that can be built using the Clang frontend as a library to
- parse C/C++ code.
- '';
- mainProgram = "clang";
- };
- } // lib.optionalAttrs enableManpages {
- pname = "clang-manpages";
-
- ninjaFlags = [ "docs-clang-man" ];
-
- installPhase = ''
- mkdir -p $out/share/man/man1
- # Manually install clang manpage
- cp docs/man/*.1 $out/share/man/man1/
- '';
-
- outputs = [ "out" ];
-
- doCheck = false;
-
- meta = llvm_meta // {
- description = "man page for Clang ${version}";
- };
- });
-in self
diff --git a/pkgs/development/compilers/llvm/16/default.nix b/pkgs/development/compilers/llvm/16/default.nix
index 99ab725273b8..5716267426b2 100644
--- a/pkgs/development/compilers/llvm/16/default.nix
+++ b/pkgs/development/compilers/llvm/16/default.nix
@@ -1,6 +1,6 @@
{ lowPrio, newScope, pkgs, lib, stdenv, cmake, ninja
, preLibcCrossHeaders
-, libxml2, python3, fetchFromGitHub, overrideCC, wrapCCWith, wrapBintoolsWith
+, libxml2, python3, fetchFromGitHub, substituteAll, overrideCC, wrapCCWith, wrapBintoolsWith
, buildLlvmTools # tools, but from the previous stage, for cross
, targetLlvmLibraries # libraries, but from the next stage, for cross
, targetLlvm
@@ -85,7 +85,7 @@ in let
then tools.bintools
else bootBintools;
- in {
+ in rec {
libllvm = callPackage ./llvm {
inherit llvm_meta;
@@ -95,7 +95,17 @@ in let
# we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get*
llvm = tools.libllvm;
- libclang = callPackage ./clang {
+ libclang = callPackage ../common/clang {
+ patches = [
+ ./clang/purity.patch
+ # https://reviews.llvm.org/D51899
+ ./clang/gnu-install-dirs.patch
+ ../common/clang/add-nostdlibinc-flag.patch
+ (substituteAll {
+ src = ../common/clang/clang-at-least-16-LLVMgold-path.patch;
+ libllvmLibdir = "${libllvm.lib}/lib";
+ })
+ ];
inherit llvm_meta;
};
diff --git a/pkgs/development/compilers/llvm/17/clang/default.nix b/pkgs/development/compilers/llvm/17/clang/default.nix
deleted file mode 100644
index f7922f3d9951..000000000000
--- a/pkgs/development/compilers/llvm/17/clang/default.nix
+++ /dev/null
@@ -1,141 +0,0 @@
-{ lib, stdenv, llvm_meta
-, monorepoSrc, runCommand
-, substituteAll, cmake, ninja, libxml2, libllvm, version, python3
-, buildLlvmTools
-, fixDarwinDylibNames
-, enableManpages ? false
-}:
-
-let
- self = stdenv.mkDerivation (finalAttrs: rec {
- pname = "clang";
- inherit version;
-
- src = runCommand "${pname}-src-${version}" {} ''
- mkdir -p "$out"
- cp -r ${monorepoSrc}/cmake "$out"
- cp -r ${monorepoSrc}/${pname} "$out"
- cp -r ${monorepoSrc}/clang-tools-extra "$out"
- '';
-
- sourceRoot = "${src.name}/${pname}";
-
- nativeBuildInputs = [ cmake ninja python3 ]
- ++ lib.optional enableManpages python3.pkgs.sphinx
- ++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames;
-
- buildInputs = [ libxml2 libllvm ];
-
- cmakeFlags = [
- "-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang"
- "-DCLANGD_BUILD_XPC=OFF"
- "-DLLVM_ENABLE_RTTI=ON"
- "-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.buildPlatform.canExecute stdenv.hostPlatform) [
- "-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
- "-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen"
- # 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"
- ];
-
- patches = [
- ./purity.patch
- # https://reviews.llvm.org/D51899
- ./gnu-install-dirs.patch
- ../../common/clang/add-nostdlibinc-flag.patch
- (substituteAll {
- src = ../../common/clang/clang-at-least-16-LLVMgold-path.patch;
- libllvmLibdir = "${libllvm.lib}/lib";
- })
- ];
-
- postPatch = ''
- (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" ];
-
- postInstall = ''
- ln -sv $out/bin/clang $out/bin/cpp
-
- 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"
- 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."
-
- mkdir -p