-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #136562 from primeos/llvm-backport
[21.05] Backport LLVM 13
- Loading branch information
Showing
31 changed files
with
2,887 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
{ runCommand, stdenv, llvm, lld, version }: | ||
|
||
let | ||
prefix = | ||
if stdenv.hostPlatform != stdenv.targetPlatform | ||
then "${stdenv.targetPlatform.config}-" | ||
else ""; | ||
in runCommand "llvm-binutils-${version}" { preferLocalBuild = true; } '' | ||
mkdir -p $out/bin | ||
for prog in ${lld}/bin/*; do | ||
ln -s $prog $out/bin/${prefix}$(basename $prog) | ||
done | ||
for prog in ${llvm}/bin/*; do | ||
ln -sf $prog $out/bin/${prefix}$(basename $prog) | ||
done | ||
ln -s ${llvm}/bin/llvm-ar $out/bin/${prefix}ar | ||
ln -s ${llvm}/bin/llvm-as $out/bin/${prefix}as | ||
ln -s ${llvm}/bin/llvm-dwp $out/bin/${prefix}dwp | ||
ln -s ${llvm}/bin/llvm-nm $out/bin/${prefix}nm | ||
ln -s ${llvm}/bin/llvm-objcopy $out/bin/${prefix}objcopy | ||
ln -s ${llvm}/bin/llvm-objdump $out/bin/${prefix}objdump | ||
ln -s ${llvm}/bin/llvm-ranlib $out/bin/${prefix}ranlib | ||
ln -s ${llvm}/bin/llvm-readelf $out/bin/${prefix}readelf | ||
ln -s ${llvm}/bin/llvm-size $out/bin/${prefix}size | ||
ln -s ${llvm}/bin/llvm-strip $out/bin/${prefix}strip | ||
ln -s ${lld}/bin/lld $out/bin/${prefix}ld | ||
'' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
{ 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 = "source/clang"; | ||
|
||
nativeBuildInputs = [ cmake python3 ] | ||
++ lib.optional enableManpages python3.pkgs.sphinx | ||
++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames; | ||
|
||
buildInputs = [ libxml2 libllvm ]; | ||
|
||
cmakeFlags = [ | ||
"-DCMAKE_CXX_FLAGS=-std=c++14" | ||
"-DCLANGD_BUILD_XPC=OFF" | ||
"-DLLVM_CONFIG_PATH=${libllvm.dev}/bin/llvm-config${lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) "-native"}" | ||
] ++ 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 = ../../clang-11-12-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 | ||
# Patch for standalone doc building | ||
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt | ||
'' + 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/ | ||
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 | ||
mkdir -p $dev/bin | ||
cp bin/clang-tblgen $dev/bin | ||
''; | ||
|
||
passthru = { | ||
isClang = true; | ||
inherit libllvm; | ||
}; | ||
|
||
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. | ||
''; | ||
}; | ||
} // 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 |
235 changes: 235 additions & 0 deletions
235
pkgs/development/compilers/llvm/13/clang/gnu-install-dirs.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,235 @@ | ||
diff --git a/CMakeLists.txt b/CMakeLists.txt | ||
index 9e74014134a0..976e6a1757fd 100644 | ||
--- a/CMakeLists.txt | ||
+++ b/CMakeLists.txt | ||
@@ -5,6 +5,8 @@ cmake_minimum_required(VERSION 3.13.4) | ||
if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) | ||
project(Clang) | ||
|
||
+ include(GNUInstallDirs) | ||
+ | ||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ standard to conform to") | ||
set(CMAKE_CXX_STANDARD_REQUIRED YES) | ||
set(CMAKE_CXX_EXTENSIONS NO) | ||
@@ -416,7 +418,7 @@ include_directories(BEFORE | ||
|
||
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) | ||
install(DIRECTORY include/clang include/clang-c | ||
- DESTINATION include | ||
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
COMPONENT clang-headers | ||
FILES_MATCHING | ||
PATTERN "*.def" | ||
@@ -425,7 +427,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) | ||
) | ||
|
||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/clang | ||
- DESTINATION include | ||
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} | ||
COMPONENT clang-headers | ||
FILES_MATCHING | ||
PATTERN "CMakeFiles" EXCLUDE | ||
@@ -445,7 +447,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) | ||
|
||
add_custom_target(bash-autocomplete DEPENDS utils/bash-autocomplete.sh) | ||
install(PROGRAMS utils/bash-autocomplete.sh | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT bash-autocomplete) | ||
if(NOT LLVM_ENABLE_IDE) | ||
add_llvm_install_targets(install-bash-autocomplete | ||
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake | ||
index 704278a0e93b..d25c8d325c71 100644 | ||
--- a/cmake/modules/AddClang.cmake | ||
+++ b/cmake/modules/AddClang.cmake | ||
@@ -123,9 +123,9 @@ macro(add_clang_library name) | ||
install(TARGETS ${lib} | ||
COMPONENT ${lib} | ||
${export_to_clangtargets} | ||
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} | ||
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} | ||
- RUNTIME DESTINATION bin) | ||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} | ||
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} | ||
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) | ||
|
||
if (NOT LLVM_ENABLE_IDE) | ||
add_llvm_install_targets(install-${lib} | ||
@@ -170,7 +170,7 @@ macro(add_clang_tool name) | ||
|
||
install(TARGETS ${name} | ||
${export_to_clangtargets} | ||
- RUNTIME DESTINATION bin | ||
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
COMPONENT ${name}) | ||
|
||
if(NOT LLVM_ENABLE_IDE) | ||
@@ -185,7 +185,7 @@ endmacro() | ||
macro(add_clang_symlink name dest) | ||
add_llvm_tool_symlink(${name} ${dest} ALWAYS_GENERATE) | ||
# Always generate install targets | ||
- llvm_install_symlink(${name} ${dest} ALWAYS_GENERATE) | ||
+ llvm_install_symlink(${name} ${dest} ${CMAKE_INSTALL_FULL_BINDIR} ALWAYS_GENERATE) | ||
endmacro() | ||
|
||
function(clang_target_link_libraries target type) | ||
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt | ||
index b2c0ce8dd4a0..19e5443d8c25 100644 | ||
--- a/lib/Headers/CMakeLists.txt | ||
+++ b/lib/Headers/CMakeLists.txt | ||
@@ -215,7 +215,7 @@ set_target_properties(clang-resource-headers PROPERTIES | ||
FOLDER "Misc" | ||
RUNTIME_OUTPUT_DIRECTORY "${output_dir}") | ||
|
||
-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include) | ||
+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION}/include) | ||
|
||
install( | ||
FILES ${files} ${generated_files} | ||
diff --git a/tools/c-index-test/CMakeLists.txt b/tools/c-index-test/CMakeLists.txt | ||
index ceef4b08637c..8efad5520ca4 100644 | ||
--- a/tools/c-index-test/CMakeLists.txt | ||
+++ b/tools/c-index-test/CMakeLists.txt | ||
@@ -54,7 +54,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY) | ||
set_property(TARGET c-index-test APPEND PROPERTY INSTALL_RPATH | ||
"@executable_path/../../lib") | ||
else() | ||
- set(INSTALL_DESTINATION bin) | ||
+ set(INSTALL_DESTINATION ${CMAKE_INSTALL_BINDIR}) | ||
endif() | ||
|
||
install(TARGETS c-index-test | ||
diff --git a/tools/clang-format/CMakeLists.txt b/tools/clang-format/CMakeLists.txt | ||
index 35ecdb11253c..d77d75de0094 100644 | ||
--- a/tools/clang-format/CMakeLists.txt | ||
+++ b/tools/clang-format/CMakeLists.txt | ||
@@ -21,20 +21,20 @@ if( LLVM_LIB_FUZZING_ENGINE OR LLVM_USE_SANITIZE_COVERAGE ) | ||
endif() | ||
|
||
install(PROGRAMS clang-format-bbedit.applescript | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-format) | ||
install(PROGRAMS clang-format-diff.py | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-format) | ||
install(PROGRAMS clang-format-sublime.py | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-format) | ||
install(PROGRAMS clang-format.el | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-format) | ||
install(PROGRAMS clang-format.py | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-format) | ||
install(PROGRAMS git-clang-format | ||
- DESTINATION bin | ||
+ DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
COMPONENT clang-format) | ||
diff --git a/tools/clang-rename/CMakeLists.txt b/tools/clang-rename/CMakeLists.txt | ||
index cda8e29ec5b1..0134d8ccd70b 100644 | ||
--- a/tools/clang-rename/CMakeLists.txt | ||
+++ b/tools/clang-rename/CMakeLists.txt | ||
@@ -19,8 +19,8 @@ clang_target_link_libraries(clang-rename | ||
) | ||
|
||
install(PROGRAMS clang-rename.py | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-rename) | ||
install(PROGRAMS clang-rename.el | ||
- DESTINATION share/clang | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/clang | ||
COMPONENT clang-rename) | ||
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt | ||
index 51ff2e7e1565..1ed5f8a079a1 100644 | ||
--- a/tools/libclang/CMakeLists.txt | ||
+++ b/tools/libclang/CMakeLists.txt | ||
@@ -166,7 +166,7 @@ endif() | ||
if(INTERNAL_INSTALL_PREFIX) | ||
set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include") | ||
else() | ||
- set(LIBCLANG_HEADERS_INSTALL_DESTINATION include) | ||
+ set(LIBCLANG_HEADERS_INSTALL_DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) | ||
endif() | ||
|
||
install(DIRECTORY ../../include/clang-c | ||
@@ -196,7 +196,7 @@ foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS}) | ||
COMPONENT | ||
libclang-python-bindings | ||
DESTINATION | ||
- "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") | ||
+ "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") | ||
endforeach() | ||
if(NOT LLVM_ENABLE_IDE) | ||
add_custom_target(libclang-python-bindings) | ||
diff --git a/tools/scan-build/CMakeLists.txt b/tools/scan-build/CMakeLists.txt | ||
index ec0702d76f18..d25d982f51da 100644 | ||
--- a/tools/scan-build/CMakeLists.txt | ||
+++ b/tools/scan-build/CMakeLists.txt | ||
@@ -47,7 +47,7 @@ if(CLANG_INSTALL_SCANBUILD) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile}) | ||
install(PROGRAMS bin/${BinFile} | ||
- DESTINATION bin | ||
+ DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
COMPONENT scan-build) | ||
endforeach() | ||
|
||
@@ -61,7 +61,7 @@ if(CLANG_INSTALL_SCANBUILD) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libexec/${LibexecFile}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/libexec/${LibexecFile}) | ||
install(PROGRAMS libexec/${LibexecFile} | ||
- DESTINATION libexec | ||
+ DESTINATION ${CMAKE_INSTALL_LIBEXECDIR} | ||
COMPONENT scan-build) | ||
endforeach() | ||
|
||
@@ -89,7 +89,7 @@ if(CLANG_INSTALL_SCANBUILD) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/share/scan-build/${ShareFile}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/share/scan-build/${ShareFile}) | ||
install(FILES share/scan-build/${ShareFile} | ||
- DESTINATION share/scan-build | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/scan-build | ||
COMPONENT scan-build) | ||
endforeach() | ||
|
||
diff --git a/tools/scan-view/CMakeLists.txt b/tools/scan-view/CMakeLists.txt | ||
index dd3d33439299..fea19c12ce70 100644 | ||
--- a/tools/scan-view/CMakeLists.txt | ||
+++ b/tools/scan-view/CMakeLists.txt | ||
@@ -19,7 +19,7 @@ if(CLANG_INSTALL_SCANVIEW) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile}) | ||
install(PROGRAMS bin/${BinFile} | ||
- DESTINATION bin | ||
+ DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
COMPONENT scan-view) | ||
endforeach() | ||
|
||
@@ -33,7 +33,7 @@ if(CLANG_INSTALL_SCANVIEW) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/share/${ShareFile}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/share/scan-view/${ShareFile}) | ||
install(FILES share/${ShareFile} | ||
- DESTINATION share/scan-view | ||
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/scan-view | ||
COMPONENT scan-view) | ||
endforeach() | ||
|
||
diff --git a/utils/hmaptool/CMakeLists.txt b/utils/hmaptool/CMakeLists.txt | ||
index 62f2de0cb15c..6aa66825b6ec 100644 | ||
--- a/utils/hmaptool/CMakeLists.txt | ||
+++ b/utils/hmaptool/CMakeLists.txt | ||
@@ -10,7 +10,7 @@ add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/${CLANG_HM | ||
|
||
list(APPEND Depends ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin/${CLANG_HMAPTOOL}) | ||
install(PROGRAMS ${CLANG_HMAPTOOL} | ||
- DESTINATION bin | ||
+ DESTINATION ${CMAKE_INSTALL_BINDIR} | ||
COMPONENT hmaptool) | ||
|
||
add_custom_target(hmaptool ALL DEPENDS ${Depends}) |
Oops, something went wrong.