Merge pull request #120780 from primeos/llvm_git

llvmPackages_git: init at 12.0.0

+29
pkgs/development/compilers/llvm/git/bintools/default.nix
···
+
{ 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
+
''
+123
pkgs/development/compilers/llvm/git/clang/default.nix
···
+
{ lib, stdenv, llvm_meta, src, 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
+
];
+
+
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" ];
+
+
# Clang expects to find LLVMgold in its own prefix
+
postInstall = ''
+
if [ -e ${libllvm.lib}/lib/LLVMgold.so ]; then
+
ln -sv ${libllvm.lib}/lib/LLVMgold.so $lib/lib
+
fi
+
+
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
pkgs/development/compilers/llvm/git/clang/gnu-install-dirs.patch
···
+
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})
+28
pkgs/development/compilers/llvm/git/clang/purity.patch
···
+
From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001
+
From: Will Dietz <w@wdtz.org>
+
Date: Thu, 18 May 2017 11:56:12 -0500
+
Subject: [PATCH] "purity" patch for 5.0
+
+
---
+
lib/Driver/ToolChains/Gnu.cpp | 7 -------
+
1 file changed, 7 deletions(-)
+
+
diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp
+
index fe3c0191bb..c6a482bece 100644
+
--- a/lib/Driver/ToolChains/Gnu.cpp
+
+++ b/lib/Driver/ToolChains/Gnu.cpp
+
@@ -487,12 +487,6 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
+
if (!IsStatic) {
+
if (Args.hasArg(options::OPT_rdynamic))
+
CmdArgs.push_back("-export-dynamic");
+
-
+
- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE) {
+
- CmdArgs.push_back("-dynamic-linker");
+
- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) +
+
- ToolChain.getDynamicLinker(Args)));
+
- }
+
}
+
+
CmdArgs.push_back("-o");
+
--
+
2.11.0
+23
pkgs/development/compilers/llvm/git/compiler-rt/X86-support-extension.patch
···
+
diff --git a/lib/builtins/CMakeLists.txt b/lib/builtins/CMakeLists.txt
+
index 3a66dd9c3fb..7efc85d9f9f 100644
+
--- a/lib/builtins/CMakeLists.txt
+
+++ b/lib/builtins/CMakeLists.txt
+
@@ -301,6 +301,10 @@ if (NOT MSVC)
+
i386/umoddi3.S
+
)
+
+
+ set(i486_SOURCES ${i386_SOURCES})
+
+ set(i586_SOURCES ${i386_SOURCES})
+
+ set(i686_SOURCES ${i386_SOURCES})
+
+
+
if (WIN32)
+
set(i386_SOURCES
+
${i386_SOURCES}
+
@@ -608,6 +612,7 @@ else ()
+
endif()
+
+
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
+
+ message("arch: ${arch}")
+
if (CAN_TARGET_${arch})
+
# For ARM archs, exclude any VFP builtins if VFP is not supported
+
if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
+32
pkgs/development/compilers/llvm/git/compiler-rt/armv7l.patch
···
+
diff -ur compiler-rt-10.0.0.src/cmake/builtin-config-ix.cmake compiler-rt-10.0.0.src-patched/cmake/builtin-config-ix.cmake
+
--- compiler-rt-10.0.0.src/cmake/builtin-config-ix.cmake 2020-03-24 00:01:02.000000000 +0900
+
+++ compiler-rt-10.0.0.src-patched/cmake/builtin-config-ix.cmake 2020-05-10 03:42:00.883450706 +0900
+
@@ -24,7 +24,7 @@
+
+
+
set(ARM64 aarch64)
+
-set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k)
+
+set(ARM32 arm armhf armv6m armv7m armv7em armv7 armv7s armv7k armv7l)
+
set(HEXAGON hexagon)
+
set(X86 i386)
+
set(X86_64 x86_64)
+
diff -ur compiler-rt-10.0.0.src/lib/builtins/CMakeLists.txt compiler-rt-10.0.0.src-patched/lib/builtins/CMakeLists.txt
+
--- compiler-rt-10.0.0.src/lib/builtins/CMakeLists.txt 2020-03-24 00:01:02.000000000 +0900
+
+++ compiler-rt-10.0.0.src-patched/lib/builtins/CMakeLists.txt 2020-05-10 03:44:49.468579650 +0900
+
@@ -474,6 +474,7 @@
+
set(armv7_SOURCES ${arm_SOURCES})
+
set(armv7s_SOURCES ${arm_SOURCES})
+
set(armv7k_SOURCES ${arm_SOURCES})
+
+set(armv7l_SOURCES ${arm_SOURCES})
+
set(arm64_SOURCES ${aarch64_SOURCES})
+
+
# macho_embedded archs
+
@@ -595,7 +596,7 @@
+
foreach (arch ${BUILTIN_SUPPORTED_ARCH})
+
if (CAN_TARGET_${arch})
+
# For ARM archs, exclude any VFP builtins if VFP is not supported
+
- if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em)$")
+
+ if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7l|armv7m|armv7em)$")
+
string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}")
+
check_compile_definition(__VFP_FP__ "${CMAKE_C_FLAGS} ${_TARGET_${arch}_CFLAGS}" COMPILER_RT_HAS_${arch}_VFP)
+
if(NOT COMPILER_RT_HAS_${arch}_VFP)
+33
pkgs/development/compilers/llvm/git/compiler-rt/codesign.patch
···
+
From 3dec5f3475a26aeb4678627795c4b67c6b7b4785 Mon Sep 17 00:00:00 2001
+
From: Will Dietz <w@wdtz.org>
+
Date: Tue, 19 Sep 2017 13:13:06 -0500
+
Subject: [PATCH] remove codesign use on Apple, disable ios sim testing that
+
needs it
+
+
---
+
cmake/Modules/AddCompilerRT.cmake | 8 ------
+
test/asan/CMakeLists.txt | 52 ---------------------------------------
+
test/tsan/CMakeLists.txt | 47 -----------------------------------
+
3 files changed, 107 deletions(-)
+
+
diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake
+
index bc5fb9ff7..b64eb4246 100644
+
--- a/cmake/Modules/AddCompilerRT.cmake
+
+++ b/cmake/Modules/AddCompilerRT.cmake
+
@@ -210,14 +210,6 @@ function(add_compiler_rt_runtime name type)
+
set_target_properties(${libname} PROPERTIES IMPORT_PREFIX "")
+
set_target_properties(${libname} PROPERTIES IMPORT_SUFFIX ".lib")
+
endif()
+
- if(APPLE)
+
- # Ad-hoc sign the dylibs
+
- add_custom_command(TARGET ${libname}
+
- POST_BUILD
+
- COMMAND codesign --sign - $<TARGET_FILE:${libname}>
+
- WORKING_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR}
+
- )
+
- endif()
+
endif()
+
install(TARGETS ${libname}
+
ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR}
+
2.14.1
+
+113
pkgs/development/compilers/llvm/git/compiler-rt/default.nix
···
+
{ lib, stdenv, llvm_meta, version, src, cmake, python3, llvm, libcxxabi }:
+
+
let
+
+
useLLVM = stdenv.hostPlatform.useLLVM or false;
+
bareMetal = stdenv.hostPlatform.parsed.kernel.name == "none";
+
haveLibc = stdenv.cc.libc != null;
+
inherit (stdenv.hostPlatform) isMusl;
+
+
in
+
+
stdenv.mkDerivation {
+
pname = "compiler-rt" + lib.optionalString (haveLibc) "-libc";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/compiler-rt";
+
+
nativeBuildInputs = [ cmake python3 llvm.dev ];
+
buildInputs = lib.optional stdenv.hostPlatform.isDarwin libcxxabi;
+
+
NIX_CFLAGS_COMPILE = [
+
"-DSCUDO_DEFAULT_OPTIONS=DeleteSizeMismatch=0:DeallocationTypeMismatch=0"
+
];
+
+
cmakeFlags = [
+
"-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON"
+
"-DCMAKE_C_COMPILER_TARGET=${stdenv.hostPlatform.config}"
+
"-DCMAKE_ASM_COMPILER_TARGET=${stdenv.hostPlatform.config}"
+
] ++ lib.optionals (useLLVM || bareMetal || isMusl) [
+
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
+
"-DCOMPILER_RT_BUILD_XRAY=OFF"
+
"-DCOMPILER_RT_BUILD_LIBFUZZER=OFF"
+
"-DCOMPILER_RT_BUILD_PROFILE=OFF"
+
] ++ lib.optionals ((useLLVM || bareMetal) && !haveLibc) [
+
"-DCMAKE_C_COMPILER_WORKS=ON"
+
"-DCMAKE_CXX_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) [
+
"-DDARWIN_macosx_OVERRIDE_SDK_VERSION=ON"
+
"-DDARWIN_osx_ARCHS=${stdenv.hostPlatform.darwinArch}"
+
"-DDARWIN_osx_BUILTIN_ARCHS=${stdenv.hostPlatform.darwinArch}"
+
];
+
+
outputs = [ "out" "dev" ];
+
+
patches = [
+
./codesign.patch # Revert compiler-rt commit that makes codesign mandatory
+
./X86-support-extension.patch # Add support for i486 i586 i686 by reusing i386 config
+
./gnu-install-dirs.patch
+
# ld-wrapper dislikes `-rpath-link //nix/store`, so we normalize away the
+
# extra `/`.
+
./normalize-var.patch
+
]# ++ lib.optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch
+
++ lib.optional stdenv.hostPlatform.isAarch32 ./armv7l.patch;
+
+
# 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/builtin-config-ix.cmake \
+
--replace 'set(ARM64 arm64 arm64e)' 'set(ARM64)'
+
substituteInPlace cmake/config-ix.cmake \
+
--replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)'
+
'' + lib.optionalString (useLLVM) ''
+
substituteInPlace lib/builtins/int_util.c \
+
--replace "#include <stdlib.h>" ""
+
substituteInPlace lib/builtins/clear_cache.c \
+
--replace "#include <assert.h>" ""
+
substituteInPlace lib/builtins/cpu_model.c \
+
--replace "#include <assert.h>" ""
+
'';
+
+
# Hack around weird upsream RPATH bug
+
postInstall = lib.optionalString (stdenv.hostPlatform.isDarwin || stdenv.hostPlatform.isWasm) ''
+
ln -s "$out/lib"/*/* "$out/lib"
+
'' + lib.optionalString (useLLVM) ''
+
ln -s $out/lib/*/clang_rt.crtbegin-*.o $out/lib/crtbegin.o
+
ln -s $out/lib/*/clang_rt.crtend-*.o $out/lib/crtend.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
+
'';
+
+
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 ];
+
};
+
}
+129
pkgs/development/compilers/llvm/git/compiler-rt/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index b44ad2c2118e..d42f5664d448 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -8,6 +8,7 @@ cmake_minimum_required(VERSION 3.13.4)
+
# Check if compiler-rt is built as a standalone project.
+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR COMPILER_RT_STANDALONE_BUILD)
+
project(CompilerRT C CXX ASM)
+
+ include(GNUInstallDirs)
+
set(COMPILER_RT_STANDALONE_BUILD TRUE)
+
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+
endif()
+
diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake
+
index 361538a58e47..f0d8d9ab80f1 100644
+
--- a/cmake/Modules/AddCompilerRT.cmake
+
+++ b/cmake/Modules/AddCompilerRT.cmake
+
@@ -495,7 +495,7 @@ macro(add_compiler_rt_resource_file target_name file_name component)
+
add_custom_target(${target_name} DEPENDS ${dst_file})
+
# Install in Clang resource directory.
+
install(FILES ${file_name}
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/share
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_DATADIR}
+
COMPONENT ${component})
+
add_dependencies(${component} ${target_name})
+
+
@@ -512,7 +512,7 @@ macro(add_compiler_rt_script name)
+
add_custom_target(${name} DEPENDS ${dst})
+
install(FILES ${dst}
+
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/bin)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_BINDIR})
+
endmacro(add_compiler_rt_script src name)
+
+
# Builds custom version of libc++ and installs it in <prefix>.
+
diff --git a/cmake/Modules/CompilerRTDarwinUtils.cmake b/cmake/Modules/CompilerRTDarwinUtils.cmake
+
index 456a8dcda59f..7a09e74c7c79 100644
+
--- a/cmake/Modules/CompilerRTDarwinUtils.cmake
+
+++ b/cmake/Modules/CompilerRTDarwinUtils.cmake
+
@@ -508,7 +508,7 @@ macro(darwin_add_embedded_builtin_libraries)
+
set(DARWIN_macho_embedded_LIBRARY_OUTPUT_DIR
+
${COMPILER_RT_OUTPUT_DIR}/lib/macho_embedded)
+
set(DARWIN_macho_embedded_LIBRARY_INSTALL_DIR
+
- ${COMPILER_RT_INSTALL_PATH}/lib/macho_embedded)
+
+ ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_LIBDIR}/macho_embedded)
+
+
set(CFLAGS_armv7 "-target thumbv7-apple-darwin-eabi")
+
set(CFLAGS_i386 "-march=pentium")
+
diff --git a/cmake/Modules/CompilerRTUtils.cmake b/cmake/Modules/CompilerRTUtils.cmake
+
index f61d487e93a0..f1f46fb9599c 100644
+
--- a/cmake/Modules/CompilerRTUtils.cmake
+
+++ b/cmake/Modules/CompilerRTUtils.cmake
+
@@ -378,7 +378,7 @@ endfunction()
+
function(get_compiler_rt_install_dir arch install_dir)
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+
get_compiler_rt_target(${arch} target)
+
- set(${install_dir} ${COMPILER_RT_INSTALL_PATH}/lib/${target} PARENT_SCOPE)
+
+ set(${install_dir} ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_LIBDIR}/${target} PARENT_SCOPE)
+
else()
+
set(${install_dir} ${COMPILER_RT_LIBRARY_INSTALL_DIR} PARENT_SCOPE)
+
endif()
+
diff --git a/cmake/base-config-ix.cmake b/cmake/base-config-ix.cmake
+
index 1edab43e7c0d..1aac6b73ff82 100644
+
--- a/cmake/base-config-ix.cmake
+
+++ b/cmake/base-config-ix.cmake
+
@@ -65,11 +65,11 @@ if (LLVM_TREE_AVAILABLE)
+
else()
+
# Take output dir and install path from the user.
+
set(COMPILER_RT_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR} CACHE PATH
+
- "Path where built compiler-rt libraries should be stored.")
+
+ "Path where built compiler-rt build artifacts should be stored.")
+
set(COMPILER_RT_EXEC_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/bin CACHE PATH
+
"Path where built compiler-rt executables should be stored.")
+
- set(COMPILER_RT_INSTALL_PATH ${CMAKE_INSTALL_PREFIX} CACHE PATH
+
- "Path where built compiler-rt libraries should be installed.")
+
+ set(COMPILER_RT_INSTALL_PATH "" CACHE PATH
+
+ "Prefix where built compiler-rt artifacts should be installed, comes before CMAKE_INSTALL_PREFIX.")
+
option(COMPILER_RT_INCLUDE_TESTS "Generate and build compiler-rt unit tests." OFF)
+
option(COMPILER_RT_ENABLE_WERROR "Fail and stop if warning is triggered" OFF)
+
# Use a host compiler to compile/link tests.
+
@@ -97,7 +97,7 @@ else(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR)
+
set(COMPILER_RT_LIBRARY_OUTPUT_DIR
+
${COMPILER_RT_OUTPUT_DIR}/lib/${COMPILER_RT_OS_DIR})
+
set(COMPILER_RT_LIBRARY_INSTALL_DIR
+
- ${COMPILER_RT_INSTALL_PATH}/lib/${COMPILER_RT_OS_DIR})
+
+ ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_LIBDIR}/${COMPILER_RT_OS_DIR})
+
endif()
+
+
if(APPLE)
+
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
+
index b00e8caa1ddd..0fe64e4862c9 100644
+
--- a/include/CMakeLists.txt
+
+++ b/include/CMakeLists.txt
+
@@ -69,22 +69,22 @@ set_target_properties(compiler-rt-headers PROPERTIES FOLDER "Compiler-RT Misc")
+
install(FILES ${SANITIZER_HEADERS}
+
COMPONENT compiler-rt-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/sanitizer)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_INCLUDEDIR}/sanitizer)
+
# Install fuzzer headers.
+
install(FILES ${FUZZER_HEADERS}
+
COMPONENT compiler-rt-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/fuzzer)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_INCLUDEDIR}/fuzzer)
+
# Install xray headers.
+
install(FILES ${XRAY_HEADERS}
+
COMPONENT compiler-rt-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/xray)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_INCLUDEDIR}/xray)
+
# Install profile headers.
+
install(FILES ${PROFILE_HEADERS}
+
COMPONENT compiler-rt-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/include/profile)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_INCLUDEDIR}/profile)
+
+
if (NOT CMAKE_CONFIGURATION_TYPES) # don't add this for IDEs.
+
add_custom_target(install-compiler-rt-headers
+
diff --git a/lib/dfsan/CMakeLists.txt b/lib/dfsan/CMakeLists.txt
+
index a29de8deff1b..d39ff01613d2 100644
+
--- a/lib/dfsan/CMakeLists.txt
+
+++ b/lib/dfsan/CMakeLists.txt
+
@@ -57,4 +57,4 @@ add_custom_command(OUTPUT ${dfsan_abilist_filename}
+
DEPENDS done_abilist.txt libc_ubuntu1404_abilist.txt)
+
add_dependencies(dfsan dfsan_abilist)
+
install(FILES ${dfsan_abilist_filename}
+
- DESTINATION ${COMPILER_RT_INSTALL_PATH}/share)
+
+ DESTINATION ${COMPILER_RT_INSTALL_PATH}/${CMAKE_INSTALL_FULL_DATADIR})
+16
pkgs/development/compilers/llvm/git/compiler-rt/normalize-var.patch
···
+
diff --git a/compiler-rt/cmake/Modules/CompilerRTUtils.cmake b/compiler-rt/cmake/Modules/CompilerRTUtils.cmake
+
index f1f46fb9599c..6f19e69507ba 100644
+
--- a/cmake/Modules/CompilerRTUtils.cmake
+
+++ b/cmake/Modules/CompilerRTUtils.cmake
+
@@ -302,8 +302,9 @@ macro(load_llvm_config)
+
# Get some LLVM variables from LLVMConfig.
+
include("${LLVM_CMAKE_PATH}/LLVMConfig.cmake")
+
+
- set(LLVM_LIBRARY_OUTPUT_INTDIR
+
- ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
+
+ get_filename_component(LLVM_LIBRARY_OUTPUT_INTDIR
+
+ ${LLVM_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX}
+
+ REALPATH)
+
endif()
+
endmacro()
+
+412
pkgs/development/compilers/llvm/git/compiler-rt/sanitizers-nongnu.patch
···
+
From f7a253f8f85d0f49df6b73996737a3e84ac64236 Mon Sep 17 00:00:00 2001
+
From: Will Dietz <w@wdtz.org>
+
Date: Mon, 24 Sep 2018 11:17:25 -0500
+
Subject: [PATCH] Ported to 7.0, taken from gentoo-musl project.
+
+
------
+
Ported to compiler-rt-sanitizers-5.0.0. Taken from
+
+
https://gist.githubusercontent.com/pwaller/2337f3290f12634cad3e3730cff0a6c1/raw/83c87a8585e2f9662494db5662e5361beb093c26/nongnu.patch
+
Signed-off-by: Jory A. Pratt <anarchy@gentoo.org>
+
+
Taken from gentoo-musl project, with a few additional minor fixes.
+
---
+
lib/asan/asan_linux.cc | 4 +-
+
lib/interception/interception_linux.cc | 2 +-
+
lib/interception/interception_linux.h | 2 +-
+
lib/msan/msan_linux.cc | 2 +-
+
lib/sanitizer_common/sanitizer_allocator.cc | 2 +-
+
.../sanitizer_common_interceptors_ioctl.inc | 4 +-
+
.../sanitizer_common_syscalls.inc | 2 +-
+
lib/sanitizer_common/sanitizer_linux.cc | 8 +++-
+
.../sanitizer_linux_libcdep.cc | 10 ++---
+
lib/sanitizer_common/sanitizer_platform.h | 6 +++
+
.../sanitizer_platform_interceptors.h | 4 +-
+
.../sanitizer_platform_limits_posix.cc | 37 +++++++++++--------
+
lib/tsan/rtl/tsan_platform_linux.cc | 2 +-
+
13 files changed, 51 insertions(+), 34 deletions(-)
+
+
diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc
+
index 625f32d40..73cf77aca 100644
+
--- a/lib/asan/asan_linux.cc
+
+++ b/lib/asan/asan_linux.cc
+
@@ -46,7 +46,7 @@
+
#include <link.h>
+
#endif
+
+
-#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS
+
+#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU
+
#include <ucontext.h>
+
extern "C" void* _DYNAMIC;
+
#elif SANITIZER_NETBSD
+
@@ -139,7 +139,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) {
+
UNIMPLEMENTED();
+
}
+
+
-#if SANITIZER_ANDROID
+
+#if SANITIZER_ANDROID || SANITIZER_NONGNU
+
// FIXME: should we do anything for Android?
+
void AsanCheckDynamicRTPrereqs() {}
+
void AsanCheckIncompatibleRT() {}
+
diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc
+
index 26bfcd8f6..529b234f7 100644
+
--- a/lib/interception/interception_linux.cc
+
+++ b/lib/interception/interception_linux.cc
+
@@ -43,7 +43,7 @@ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr,
+
}
+
+
// Android and Solaris do not have dlvsym
+
-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD
+
+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
+
void *GetFuncAddrVer(const char *func_name, const char *ver) {
+
return dlvsym(RTLD_NEXT, func_name, ver);
+
}
+
diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h
+
index 942c25609..24a4d5080 100644
+
--- a/lib/interception/interception_linux.h
+
+++ b/lib/interception/interception_linux.h
+
@@ -36,7 +36,7 @@ void *GetFuncAddrVer(const char *func_name, const char *ver);
+
(::__interception::uptr) & WRAP(func))
+
+
// Android, Solaris and OpenBSD do not have dlvsym
+
-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD
+
+#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
+
#define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \
+
(::__interception::real_##func = (func##_f)( \
+
unsigned long)::__interception::GetFuncAddrVer(#func, symver))
+
diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc
+
index 385a650c4..6e30a8ce9 100644
+
--- a/lib/msan/msan_linux.cc
+
+++ b/lib/msan/msan_linux.cc
+
@@ -13,7 +13,7 @@
+
//===----------------------------------------------------------------------===//
+
+
#include "sanitizer_common/sanitizer_platform.h"
+
-#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD
+
+#if SANITIZER_FREEBSD || (SANITIZER_LINUX && !SANITIZER_NONGNU) || SANITIZER_NETBSD
+
+
#include "msan.h"
+
#include "msan_report.h"
+
diff --git a/lib/sanitizer_common/sanitizer_allocator.cc b/lib/sanitizer_common/sanitizer_allocator.cc
+
index 6bfd5e5ee..048f6154f 100644
+
--- a/lib/sanitizer_common/sanitizer_allocator.cc
+
+++ b/lib/sanitizer_common/sanitizer_allocator.cc
+
@@ -27,7 +27,7 @@ const char *SecondaryAllocatorName = "LargeMmapAllocator";
+
+
// ThreadSanitizer for Go uses libc malloc/free.
+
#if SANITIZER_GO || defined(SANITIZER_USE_MALLOC)
+
-# if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+# if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
extern "C" void *__libc_malloc(uptr size);
+
# if !SANITIZER_GO
+
extern "C" void *__libc_memalign(uptr alignment, uptr size);
+
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
+
index 2d633c173..b6eb23116 100644
+
--- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
+
+++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc
+
@@ -104,7 +104,7 @@ static void ioctl_table_fill() {
+
_(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz);
+
#endif
+
+
-#if SANITIZER_LINUX
+
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
+
// Conflicting request ids.
+
// _(CDROMAUDIOBUFSIZ, NONE, 0);
+
// _(SNDCTL_TMR_CONTINUE, NONE, 0);
+
@@ -365,7 +365,7 @@ static void ioctl_table_fill() {
+
_(VT_WAITACTIVE, NONE, 0);
+
#endif
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
// _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE
+
_(CYGETDEFTHRESH, WRITE, sizeof(int));
+
_(CYGETDEFTIMEOUT, WRITE, sizeof(int));
+
diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc
+
index 469c8eb7e..24f87867d 100644
+
--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc
+
+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc
+
@@ -2038,7 +2038,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) {
+
}
+
}
+
+
-#if !SANITIZER_ANDROID
+
+#if !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim,
+
void *old_rlim) {
+
if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz);
+
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
+
index 96d6c1eff..9e2b7fb9d 100644
+
--- a/lib/sanitizer_common/sanitizer_linux.cc
+
+++ b/lib/sanitizer_common/sanitizer_linux.cc
+
@@ -541,13 +541,13 @@ const char *GetEnv(const char *name) {
+
#endif
+
}
+
+
-#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD
+
+#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_NONGNU
+
extern "C" {
+
SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end;
+
}
+
#endif
+
+
-#if !SANITIZER_GO && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \
+
+#if (!SANITIZER_GO || SANITIZER_NONGNU) && !SANITIZER_FREEBSD && !SANITIZER_NETBSD && \
+
!SANITIZER_OPENBSD
+
static void ReadNullSepFileToArray(const char *path, char ***arr,
+
int arr_size) {
+
@@ -590,6 +590,10 @@ static void GetArgsAndEnv(char ***argv, char ***envp) {
+
#elif SANITIZER_NETBSD
+
*argv = __ps_strings->ps_argvstr;
+
*envp = __ps_strings->ps_envstr;
+
+#elif SANITIZER_NONGNU
+
+ static const int kMaxArgv = 2000, kMaxEnvp = 2000;
+
+ ReadNullSepFileToArray("/proc/self/cmdline", argv, kMaxArgv);
+
+ ReadNullSepFileToArray("/proc/self/environ", envp, kMaxEnvp);
+
#else // SANITIZER_FREEBSD
+
#if !SANITIZER_GO
+
if (&__libc_stack_end) {
+
diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+
index 4962ff832..438f94dbe 100644
+
--- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+
+++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+
@@ -179,7 +179,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor,
+
}
+
+
#if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \
+
- !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS
+
+ !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU
+
static uptr g_tls_size;
+
+
#ifdef __i386__
+
@@ -261,7 +261,7 @@ void InitTlsSize() { }
+
#if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) || \
+
defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) || \
+
defined(__arm__)) && \
+
- SANITIZER_LINUX && !SANITIZER_ANDROID
+
+ SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
// sizeof(struct pthread) from glibc.
+
static atomic_uintptr_t thread_descriptor_size;
+
+
@@ -426,7 +426,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) {
+
+
#if !SANITIZER_GO
+
static void GetTls(uptr *addr, uptr *size) {
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
# if defined(__x86_64__) || defined(__i386__) || defined(__s390__)
+
*addr = ThreadSelf();
+
*size = GetTlsSize();
+
@@ -470,7 +470,7 @@ static void GetTls(uptr *addr, uptr *size) {
+
#elif SANITIZER_OPENBSD
+
*addr = 0;
+
*size = 0;
+
-#elif SANITIZER_ANDROID
+
+#elif SANITIZER_ANDROID || SANITIZER_NONGNU
+
*addr = 0;
+
*size = 0;
+
#elif SANITIZER_SOLARIS
+
@@ -486,7 +486,7 @@ static void GetTls(uptr *addr, uptr *size) {
+
#if !SANITIZER_GO
+
uptr GetTlsSize() {
+
#if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \
+
- SANITIZER_OPENBSD || SANITIZER_SOLARIS
+
+ SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU
+
uptr addr, size;
+
GetTls(&addr, &size);
+
return size;
+
diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h
+
index d81e25580..e10680ac8 100644
+
--- a/lib/sanitizer_common/sanitizer_platform.h
+
+++ b/lib/sanitizer_common/sanitizer_platform.h
+
@@ -208,6 +208,12 @@
+
# define SANITIZER_SOLARIS32 0
+
#endif
+
+
+#if defined(__linux__) && !defined(__GLIBC__)
+
+# define SANITIZER_NONGNU 1
+
+#else
+
+# define SANITIZER_NONGNU 0
+
+#endif
+
+
+
#if defined(__myriad2__)
+
# define SANITIZER_MYRIAD2 1
+
#else
+
diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h
+
index f95539a73..6c53b3415 100644
+
--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h
+
+++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h
+
@@ -39,7 +39,7 @@
+
# include "sanitizer_platform_limits_solaris.h"
+
#endif
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
# define SI_LINUX_NOT_ANDROID 1
+
#else
+
# define SI_LINUX_NOT_ANDROID 0
+
@@ -322,7 +322,7 @@
+
#define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID)
+
#define SANITIZER_INTERCEPT_SHMCTL \
+
(SI_NETBSD || SI_OPENBSD || SI_SOLARIS || \
+
- ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && \
+
+ ((SI_FREEBSD || SI_LINUX_NOT_ANDROID || SANITIZER_NONGNU) && \
+
SANITIZER_WORDSIZE == 64)) // NOLINT
+
#define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID
+
#define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_POSIX
+
diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+
index 54da635d7..2f6ff69c3 100644
+
--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+
+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc
+
@@ -14,6 +14,9 @@
+
+
#include "sanitizer_platform.h"
+
+
+// Workaround musl <--> linux conflicting definition of 'struct sysinfo'
+
+#define _LINUX_SYSINFO_H
+
+
+
#if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC
+
// Tests in this file assume that off_t-dependent data structures match the
+
// libc ABI. For example, struct dirent here is what readdir() function (as
+
@@ -138,12 +141,14 @@ typedef struct user_fpregs elf_fpregset_t;
+
+
#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
#include <glob.h>
+
-#include <obstack.h>
+
+# if !SANITIZER_NONGNU
+
+# include <obstack.h>
+
+# endif
+
#include <mqueue.h>
+
-#include <net/if_ppp.h>
+
-#include <netax25/ax25.h>
+
-#include <netipx/ipx.h>
+
-#include <netrom/netrom.h>
+
+#include <linux/if_ppp.h>
+
+#include <linux/ax25.h>
+
+#include <linux/ipx.h>
+
+#include <linux/netrom.h>
+
#if HAVE_RPC_XDR_H
+
# include <rpc/xdr.h>
+
#elif HAVE_TIRPC_RPC_XDR_H
+
@@ -251,7 +256,7 @@ namespace __sanitizer {
+
unsigned struct_itimerspec_sz = sizeof(struct itimerspec);
+
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
// Use pre-computed size of struct ustat to avoid <sys/ustat.h> which
+
// has been removed from glibc 2.28.
+
#if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \
+
@@ -322,7 +327,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr));
+
unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
+
#endif
+
+
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
+
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
int glob_nomatch = GLOB_NOMATCH;
+
int glob_altdirfunc = GLOB_ALTDIRFUNC;
+
#endif
+
@@ -416,7 +421,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
+
unsigned struct_termios_sz = sizeof(struct termios);
+
unsigned struct_winsize_sz = sizeof(struct winsize);
+
+
-#if SANITIZER_LINUX
+
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
+
unsigned struct_arpreq_sz = sizeof(struct arpreq);
+
unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf);
+
unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession);
+
@@ -466,7 +471,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
+
unsigned struct_vt_mode_sz = sizeof(struct vt_mode);
+
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct);
+
unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor);
+
#if EV_VERSION > (0x010000)
+
@@ -834,7 +839,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr);
+
unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE;
+
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH;
+
unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT;
+
unsigned IOCTL_CYGETMON = CYGETMON;
+
@@ -989,7 +994,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr);
+
CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum);
+
#endif // SANITIZER_LINUX || SANITIZER_FREEBSD
+
+
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
+
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
CHECK_TYPE_SIZE(glob_t);
+
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc);
+
CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv);
+
@@ -1023,6 +1028,7 @@ CHECK_TYPE_SIZE(iovec);
+
CHECK_SIZE_AND_OFFSET(iovec, iov_base);
+
CHECK_SIZE_AND_OFFSET(iovec, iov_len);
+
+
+#if !SANITIZER_NONGNU
+
CHECK_TYPE_SIZE(msghdr);
+
CHECK_SIZE_AND_OFFSET(msghdr, msg_name);
+
CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen);
+
@@ -1036,6 +1042,7 @@ CHECK_TYPE_SIZE(cmsghdr);
+
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len);
+
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level);
+
CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type);
+
+#endif
+
+
#ifndef __GLIBC_PREREQ
+
#define __GLIBC_PREREQ(x, y) 0
+
@@ -1145,7 +1152,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno);
+
+
CHECK_TYPE_SIZE(ether_addr);
+
+
-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID
+
+#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
CHECK_TYPE_SIZE(ipc_perm);
+
# if SANITIZER_FREEBSD
+
CHECK_SIZE_AND_OFFSET(ipc_perm, key);
+
@@ -1206,7 +1213,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr);
+
CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data);
+
#endif
+
+
-#if SANITIZER_LINUX
+
+#if SANITIZER_LINUX && !SANITIZER_NONGNU
+
COMPILER_CHECK(sizeof(__sanitizer_mallinfo) == sizeof(struct mallinfo));
+
#endif
+
+
@@ -1256,7 +1263,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE);
+
COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE);
+
#endif
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE));
+
CHECK_SIZE_AND_OFFSET(FILE, _flags);
+
CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr);
+
@@ -1275,7 +1282,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain);
+
CHECK_SIZE_AND_OFFSET(FILE, _fileno);
+
#endif
+
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk));
+
CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit);
+
CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev);
+
diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc
+
index de989b780..51a97b554 100644
+
--- a/lib/tsan/rtl/tsan_platform_linux.cc
+
+++ b/lib/tsan/rtl/tsan_platform_linux.cc
+
@@ -294,7 +294,7 @@ void InitializePlatform() {
+
// This is required to properly "close" the fds, because we do not see internal
+
// closes within glibc. The code is a pure hack.
+
int ExtractResolvFDs(void *state, int *fds, int nfd) {
+
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+
+#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU
+
int cnt = 0;
+
struct __res_state *statp = (struct __res_state*)state;
+
for (int i = 0; i < MAXNS && cnt < nfd; i++) {
+
--
+
2.19.0
+
+268
pkgs/development/compilers/llvm/git/default.nix
···
+
{ lowPrio, newScope, pkgs, lib, stdenv, cmake
+
, gccForLibs, preLibcCrossHeaders
+
, libxml2, python3, isl, fetchFromGitHub, overrideCC, wrapCCWith, wrapBintoolsWith
+
, buildLlvmTools # tools, but from the previous stage, for cross
+
, targetLlvmLibraries # libraries, but from the next stage, for cross
+
# This is the default binutils, but with *this* version of LLD rather
+
# than the default LLVM verion's, if LLD is the choice. We use these for
+
# the `useLLVM` bootstrapping below.
+
, bootBintoolsNoLibc ?
+
if stdenv.targetPlatform.linker == "lld"
+
then null
+
else pkgs.bintoolsNoLibc
+
, bootBintools ?
+
if stdenv.targetPlatform.linker == "lld"
+
then null
+
else pkgs.bintools
+
, darwin
+
}:
+
+
let
+
release_version = "12.0.0";
+
candidate = ""; # empty or "rcN"
+
dash-candidate = lib.optionalString (candidate != "") "-${candidate}";
+
version = "${release_version}${dash-candidate}"; # differentiating these (variables) is important for RCs
+
targetConfig = stdenv.targetPlatform.config;
+
+
src = fetchFromGitHub {
+
owner = "llvm";
+
repo = "llvm-project";
+
rev = "llvmorg-${version}";
+
sha256 = "07jz8pywc2qqa1srdnqg5p2y4lx3ki1inpigarzgxc3j20r4gb58";
+
};
+
+
llvm_meta = {
+
license = lib.licenses.ncsa;
+
maintainers = with lib.maintainers; [ lovek323 raskin dtzWill primeos ];
+
platforms = lib.platforms.all;
+
};
+
+
tools = lib.makeExtensible (tools: let
+
callPackage = newScope (tools // { inherit stdenv cmake libxml2 python3 isl release_version version src buildLlvmTools; });
+
mkExtraBuildCommands0 = cc: ''
+
rsrc="$out/resource-root"
+
mkdir "$rsrc"
+
ln -s "${cc.lib}/lib/clang/${release_version}/include" "$rsrc"
+
echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags
+
'';
+
mkExtraBuildCommands = cc: mkExtraBuildCommands0 cc + ''
+
ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib"
+
ln -s "${targetLlvmLibraries.compiler-rt.out}/share" "$rsrc/share"
+
'';
+
+
bintoolsNoLibc' =
+
if bootBintoolsNoLibc == null
+
then tools.bintoolsNoLibc
+
else bootBintoolsNoLibc;
+
bintools' =
+
if bootBintools == null
+
then tools.bintools
+
else bootBintools;
+
+
in {
+
+
libllvm = callPackage ./llvm {
+
inherit llvm_meta;
+
};
+
+
# `llvm` historically had the binaries. When choosing an output explicitly,
+
# we need to reintroduce `outputUnspecified` to get the expected behavior e.g. of lib.get*
+
llvm = tools.libllvm.out // { outputUnspecified = true; };
+
+
libclang = callPackage ./clang {
+
inherit llvm_meta;
+
};
+
+
clang-unwrapped = tools.libclang.out // { outputUnspecified = true; };
+
+
# disabled until recommonmark supports sphinx 3
+
#Llvm-manpages = lowPrio (tools.libllvm.override {
+
# enableManpages = true;
+
# python3 = pkgs.python3; # don't use python-boot
+
#});
+
+
clang-manpages = lowPrio (tools.libclang.override {
+
enableManpages = true;
+
python3 = pkgs.python3; # don't use python-boot
+
});
+
+
# disabled until recommonmark supports sphinx 3
+
# lldb-manpages = lowPrio (tools.lldb.override {
+
# enableManpages = true;
+
# python3 = pkgs.python3; # don't use python-boot
+
# });
+
+
clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang;
+
+
libstdcxxClang = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
# libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper.
+
libcxx = null;
+
extraPackages = [
+
targetLlvmLibraries.compiler-rt
+
];
+
extraBuildCommands = mkExtraBuildCommands cc;
+
};
+
+
libcxxClang = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = targetLlvmLibraries.libcxx;
+
extraPackages = [
+
targetLlvmLibraries.libcxxabi
+
targetLlvmLibraries.compiler-rt
+
];
+
extraBuildCommands = mkExtraBuildCommands cc;
+
};
+
+
lld = callPackage ./lld {
+
inherit llvm_meta;
+
};
+
+
lldb = callPackage ./lldb {
+
inherit llvm_meta;
+
inherit (darwin) libobjc bootstrap_cmds;
+
inherit (darwin.apple_sdk.libs) xpc;
+
inherit (darwin.apple_sdk.frameworks) Foundation Carbon Cocoa;
+
};
+
+
# Below, is the LLVM bootstrapping logic. It handles building a
+
# fully LLVM toolchain from scratch. No GCC toolchain should be
+
# pulled in. As a consequence, it is very quick to build different
+
# targets provided by LLVM and we can also build for what GCC
+
# doesn’t support like LLVM. Probably we should move to some other
+
# file.
+
+
bintools-unwrapped = callPackage ./bintools {};
+
+
bintoolsNoLibc = wrapBintoolsWith {
+
bintools = tools.bintools-unwrapped;
+
libc = preLibcCrossHeaders;
+
};
+
+
bintools = wrapBintoolsWith {
+
bintools = tools.bintools-unwrapped;
+
};
+
+
clangUseLLVM = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = targetLlvmLibraries.libcxx;
+
bintools = bintools';
+
extraPackages = [
+
targetLlvmLibraries.libcxxabi
+
targetLlvmLibraries.compiler-rt
+
] ++ lib.optionals (!stdenv.targetPlatform.isWasm) [
+
targetLlvmLibraries.libunwind
+
];
+
extraBuildCommands = ''
+
echo "-rtlib=compiler-rt -Wno-unused-command-line-argument" >> $out/nix-support/cc-cflags
+
echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+
'' + lib.optionalString (!stdenv.targetPlatform.isWasm) ''
+
echo "--unwindlib=libunwind" >> $out/nix-support/cc-cflags
+
'' + lib.optionalString (!stdenv.targetPlatform.isWasm && stdenv.targetPlatform.useLLVM or false) ''
+
echo "-lunwind" >> $out/nix-support/cc-ldflags
+
'' + lib.optionalString stdenv.targetPlatform.isWasm ''
+
echo "-fno-exceptions" >> $out/nix-support/cc-cflags
+
'' + mkExtraBuildCommands cc;
+
};
+
+
clangNoLibcxx = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = null;
+
bintools = bintools';
+
extraPackages = [
+
targetLlvmLibraries.compiler-rt
+
];
+
extraBuildCommands = ''
+
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
+
echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+
echo "-nostdlib++" >> $out/nix-support/cc-cflags
+
'' + mkExtraBuildCommands cc;
+
};
+
+
clangNoLibc = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = null;
+
bintools = bintoolsNoLibc';
+
extraPackages = [
+
targetLlvmLibraries.compiler-rt
+
];
+
extraBuildCommands = ''
+
echo "-rtlib=compiler-rt" >> $out/nix-support/cc-cflags
+
echo "-B${targetLlvmLibraries.compiler-rt}/lib" >> $out/nix-support/cc-cflags
+
'' + mkExtraBuildCommands cc;
+
};
+
+
clangNoCompilerRt = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = null;
+
bintools = bintoolsNoLibc';
+
extraPackages = [ ];
+
extraBuildCommands = ''
+
echo "-nostartfiles" >> $out/nix-support/cc-cflags
+
'' + mkExtraBuildCommands0 cc;
+
};
+
+
clangNoCompilerRtWithLibc = wrapCCWith rec {
+
cc = tools.clang-unwrapped;
+
libcxx = null;
+
bintools = bintools';
+
extraPackages = [ ];
+
extraBuildCommands = mkExtraBuildCommands0 cc;
+
};
+
+
});
+
+
libraries = lib.makeExtensible (libraries: let
+
callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python3 isl release_version version src; });
+
in {
+
+
compiler-rt-libc = callPackage ./compiler-rt {
+
inherit llvm_meta;
+
stdenv = if stdenv.hostPlatform.useLLVM or false
+
then overrideCC stdenv buildLlvmTools.clangNoCompilerRtWithLibc
+
else stdenv;
+
};
+
+
compiler-rt-no-libc = callPackage ./compiler-rt {
+
inherit llvm_meta;
+
stdenv = if stdenv.hostPlatform.useLLVM or false
+
then overrideCC stdenv buildLlvmTools.clangNoCompilerRt
+
else stdenv;
+
};
+
+
# N.B. condition is safe because without useLLVM both are the same.
+
compiler-rt = if stdenv.hostPlatform.isAndroid
+
then libraries.compiler-rt-libc
+
else libraries.compiler-rt-no-libc;
+
+
stdenv = overrideCC stdenv buildLlvmTools.clang;
+
+
libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang;
+
+
libcxx = callPackage ./libcxx {
+
inherit llvm_meta;
+
stdenv = if stdenv.hostPlatform.useLLVM or false
+
then overrideCC stdenv buildLlvmTools.clangNoLibcxx
+
else stdenv;
+
};
+
+
libcxxabi = callPackage ./libcxxabi {
+
inherit llvm_meta;
+
stdenv = if stdenv.hostPlatform.useLLVM or false
+
then overrideCC stdenv buildLlvmTools.clangNoLibcxx
+
else stdenv;
+
};
+
+
libunwind = callPackage ./libunwind {
+
inherit llvm_meta;
+
stdenv = if stdenv.hostPlatform.useLLVM or false
+
then overrideCC stdenv buildLlvmTools.clangNoLibcxx
+
else stdenv;
+
};
+
+
openmp = callPackage ./openmp {
+
inherit llvm_meta;
+
};
+
});
+
+
in { inherit tools libraries; } // libraries // tools
+54
pkgs/development/compilers/llvm/git/libcxx/default.nix
···
+
{ lib, stdenv, llvm_meta, src, cmake, python3, libcxxabi, fixDarwinDylibNames, version
+
, enableShared ? !stdenv.hostPlatform.isStatic
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "libcxx";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
outputs = [ "out" "dev" ];
+
+
patches = [
+
./gnu-install-dirs.patch
+
] ++ lib.optionals stdenv.hostPlatform.isMusl [
+
../../libcxx-0001-musl-hacks.patch
+
];
+
+
preConfigure = lib.optionalString stdenv.hostPlatform.isMusl ''
+
patchShebangs utils/cat_files.py
+
'';
+
+
nativeBuildInputs = [ cmake python3 ]
+
++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
+
+
buildInputs = [ libcxxabi ];
+
+
cmakeFlags = [
+
"-DLIBCXX_CXX_ABI=libcxxabi"
+
] ++ lib.optional (stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isWasi) "-DLIBCXX_HAS_MUSL_LIBC=1"
+
++ lib.optional (stdenv.hostPlatform.useLLVM or false) "-DLIBCXX_USE_COMPILER_RT=ON"
+
++ lib.optional stdenv.hostPlatform.isWasm [
+
"-DLIBCXX_ENABLE_THREADS=OFF"
+
"-DLIBCXX_ENABLE_FILESYSTEM=OFF"
+
"-DLIBCXX_ENABLE_EXCEPTIONS=OFF"
+
] ++ lib.optional (!enableShared) "-DLIBCXX_ENABLE_SHARED=OFF";
+
+
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 ];
+
};
+
}
+100
pkgs/development/compilers/llvm/git/libcxx/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 9bf1a02f0908..612cd4aab76c 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -28,6 +28,8 @@ set(LIBCXX_BINARY_INCLUDE_DIR "${LIBCXX_BINARY_DIR}/include/c++build")
+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBCXX_STANDALONE_BUILD)
+
project(libcxx CXX C)
+
+
+ include(GNUInstallDirs)
+
+
+
set(PACKAGE_NAME libcxx)
+
set(PACKAGE_VERSION 12.0.0)
+
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
+
@@ -402,7 +404,7 @@ endif ()
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
set(LIBCXX_HEADER_DIR ${LLVM_BINARY_DIR})
+
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
+ set(LIBCXX_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
if(LIBCXX_LIBDIR_SUBDIR)
+
string(APPEND LIBCXX_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
+
string(APPEND LIBCXX_INSTALL_LIBRARY_DIR /${LIBCXX_LIBDIR_SUBDIR})
+
@@ -410,11 +412,11 @@ if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+
elseif(LLVM_LIBRARY_OUTPUT_INTDIR)
+
set(LIBCXX_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+
set(LIBCXX_HEADER_DIR ${LLVM_BINARY_DIR})
+
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX})
+
+ set(LIBCXX_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXX_LIBDIR_SUFFIX})
+
else()
+
set(LIBCXX_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXX_LIBDIR_SUFFIX})
+
set(LIBCXX_HEADER_DIR ${CMAKE_BINARY_DIR})
+
- set(LIBCXX_INSTALL_LIBRARY_DIR lib${LIBCXX_LIBDIR_SUFFIX})
+
+ set(LIBCXX_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXX_LIBDIR_SUFFIX})
+
endif()
+
+
file(MAKE_DIRECTORY "${LIBCXX_BINARY_INCLUDE_DIR}")
+
diff --git a/cmake/Modules/HandleLibCXXABI.cmake b/cmake/Modules/HandleLibCXXABI.cmake
+
index 5d2764e870e9..bb1ec5de6ca2 100644
+
--- a/cmake/Modules/HandleLibCXXABI.cmake
+
+++ b/cmake/Modules/HandleLibCXXABI.cmake
+
@@ -63,7 +63,7 @@ macro(setup_abi_lib abidefines abishared abistatic abifiles abidirs)
+
+
if (LIBCXX_INSTALL_HEADERS)
+
install(FILES "${LIBCXX_BINARY_INCLUDE_DIR}/${fpath}"
+
- DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1/${dstdir}
+
+ DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}${CMAKE_INSTALL_INCLUDEDIR}/c++/v1/${dstdir}
+
COMPONENT cxx-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
)
+
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
+
index 29a317b8ae9a..4747263cfd1b 100644
+
--- a/include/CMakeLists.txt
+
+++ b/include/CMakeLists.txt
+
@@ -252,7 +252,7 @@ if (LIBCXX_INSTALL_HEADERS)
+
foreach(file ${files})
+
get_filename_component(dir ${file} DIRECTORY)
+
install(FILES ${file}
+
- DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1/${dir}
+
+ DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}${CMAKE_INSTALL_INCLUDEDIR}/c++/v1/${dir}
+
COMPONENT cxx-headers
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
)
+
@@ -260,7 +260,7 @@ if (LIBCXX_INSTALL_HEADERS)
+
+
# Install the generated header as __config.
+
install(FILES ${LIBCXX_BINARY_DIR}/__generated_config
+
- DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}include/c++/v1
+
+ DESTINATION ${LIBCXX_INSTALL_HEADER_PREFIX}${CMAKE_INSTALL_INCLUDEDIR}/c++/v1
+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
+
RENAME __config
+
COMPONENT cxx-headers)
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+
index 9965104cb5b2..9b55dbb1d822 100644
+
--- a/src/CMakeLists.txt
+
+++ b/src/CMakeLists.txt
+
@@ -352,21 +352,21 @@ if (LIBCXX_INSTALL_SHARED_LIBRARY)
+
install(TARGETS cxx_shared
+
ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
- RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
+
+ RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR} COMPONENT cxx)
+
endif()
+
+
if (LIBCXX_INSTALL_STATIC_LIBRARY)
+
install(TARGETS cxx_static
+
ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
- RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
+
+ RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR} COMPONENT cxx)
+
endif()
+
+
if(LIBCXX_INSTALL_EXPERIMENTAL_LIBRARY)
+
install(TARGETS cxx_experimental
+
LIBRARY DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
ARCHIVE DESTINATION ${LIBCXX_INSTALL_PREFIX}${LIBCXX_INSTALL_LIBRARY_DIR} COMPONENT cxx
+
- RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}bin COMPONENT cxx)
+
+ RUNTIME DESTINATION ${LIBCXX_INSTALL_PREFIX}${CMAKE_INSTALL_BINDIR} COMPONENT cxx)
+
endif()
+
+
# NOTE: This install command must go after the cxx install command otherwise
+73
pkgs/development/compilers/llvm/git/libcxxabi/default.nix
···
+
{ lib, stdenv, llvm_meta, cmake, python3, src, libunwind, version
+
, enableShared ? !stdenv.hostPlatform.isStatic
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "libcxxabi";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
outputs = [ "out" "dev" ];
+
+
postUnpack = lib.optionalString stdenv.isDarwin ''
+
export TRIPLE=x86_64-apple-darwin
+
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
+
patch -p1 -d libcxx -i ${../../libcxx-0001-musl-hacks.patch}
+
'' + lib.optionalString stdenv.hostPlatform.isWasm ''
+
patch -p1 -d llvm -i ${./wasm.patch}
+
'';
+
+
patches = [
+
./gnu-install-dirs.patch
+
];
+
+
nativeBuildInputs = [ cmake python3 ];
+
buildInputs = lib.optional (!stdenv.isDarwin && !stdenv.isFreeBSD && !stdenv.hostPlatform.isWasm) libunwind;
+
+
cmakeFlags = lib.optionals (stdenv.hostPlatform.useLLVM or false) [
+
"-DLLVM_ENABLE_LIBCXX=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"
+
];
+
+
installPhase = if stdenv.isDarwin
+
then ''
+
for file in lib/*.dylib; do
+
# this should be done in CMake, but having trouble figuring out
+
# the magic combination of necessary CMake variables
+
# if you fancy a try, take a look at
+
# https://gitlab.kitware.com/cmake/community/-/wikis/doc/cmake/RPATH-handling
+
install_name_tool -id $out/$file $file
+
done
+
make install
+
install -d 755 $out/include
+
install -m 644 ../include/*.h $out/include
+
''
+
else ''
+
install -d -m 755 $out/include $out/lib
+
install -m 644 lib/libc++abi.a $out/lib
+
install -m 644 ../include/cxxabi.h $out/include
+
'' + lib.optionalString enableShared ''
+
install -m 644 lib/libc++abi.so.1.0 $out/lib
+
ln -s libc++abi.so.1.0 $out/lib/libc++abi.so
+
ln -s libc++abi.so.1.0 $out/lib/libc++abi.so.1
+
'';
+
+
meta = llvm_meta // {
+
homepage = "https://libcxxabi.llvm.org/";
+
description = "Provides C++ standard library support";
+
longDescription = ''
+
libc++abi is a new implementation of low level support for a standard C++ library.
+
'';
+
# "All of the code in libc++abi is dual licensed under the MIT license and
+
# the UIUC License (a BSD-like license)":
+
license = with lib.licenses; [ mit ncsa ];
+
maintainers = llvm_meta.maintainers ++ [ lib.maintainers.vlstill ];
+
};
+
}
+34
pkgs/development/compilers/llvm/git/libcxxabi/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 426c855288fc..a9812a994f53 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -27,6 +27,8 @@ set(LIBCXXABI_LIBCXX_PATH "${CMAKE_CURRENT_LIST_DIR}/../libcxx" CACHE PATH
+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBCXXABI_STANDALONE_BUILD)
+
project(libcxxabi CXX C)
+
+
+ include(GNUInstallDirs)
+
+
+
set(PACKAGE_NAME libcxxabi)
+
set(PACKAGE_VERSION 11.0.0)
+
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
+
@@ -180,17 +182,17 @@ set(CMAKE_MODULE_PATH
+
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+
set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
+ set(LIBCXXABI_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
if(LIBCXX_LIBDIR_SUBDIR)
+
string(APPEND LIBCXXABI_LIBRARY_DIR /${LIBCXXABI_LIBDIR_SUBDIR})
+
string(APPEND LIBCXXABI_INSTALL_LIBRARY_DIR /${LIBCXXABI_LIBDIR_SUBDIR})
+
endif()
+
elseif(LLVM_LIBRARY_OUTPUT_INTDIR)
+
set(LIBCXXABI_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LIBCXXABI_LIBDIR_SUFFIX})
+
+ set(LIBCXXABI_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXXABI_LIBDIR_SUFFIX})
+
else()
+
set(LIBCXXABI_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBCXXABI_LIBDIR_SUFFIX})
+
- set(LIBCXXABI_INSTALL_LIBRARY_DIR lib${LIBCXXABI_LIBDIR_SUFFIX})
+
+ set(LIBCXXABI_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBCXXABI_LIBDIR_SUFFIX})
+
endif()
+
+
set(LIBCXXABI_INSTALL_PREFIX "" CACHE STRING "Define libc++abi destination prefix.")
+16
pkgs/development/compilers/llvm/git/libcxxabi/wasm.patch
···
+
diff --git a/cmake/modules/HandleLLVMOptions.cmake b/cmake/modules/HandleLLVMOptions.cmake
+
index 15497d405e0..33f7f18193a 100644
+
--- a/cmake/modules/HandleLLVMOptions.cmake
+
+++ b/cmake/modules/HandleLLVMOptions.cmake
+
@@ -127,7 +127,10 @@ else(WIN32)
+
set(LLVM_HAVE_LINK_VERSION_SCRIPT 1)
+
endif()
+
else(FUCHSIA OR UNIX)
+
- MESSAGE(SEND_ERROR "Unable to determine platform")
+
+ if(${CMAKE_SYSTEM_NAME} MATCHES "Wasi")
+
+ else()
+
+ MESSAGE(SEND_ERROR "Unable to determine platform")
+
+ endif()
+
endif(FUCHSIA OR UNIX)
+
endif(WIN32)
+
+33
pkgs/development/compilers/llvm/git/libunwind/default.nix
···
+
{ lib, stdenv, llvm_meta, version, src, cmake
+
, enableShared ? !stdenv.hostPlatform.isStatic
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "libunwind";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
patches = [
+
./gnu-install-dirs.patch
+
];
+
+
outputs = [ "out" "dev" ];
+
+
nativeBuildInputs = [ cmake ];
+
+
cmakeFlags = 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.
+
'';
+
};
+
}
+34
pkgs/development/compilers/llvm/git/libunwind/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 48cb8e004e08..fec8144fb95a 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -23,6 +23,8 @@ set(LIBUNWIND_LIBCXX_PATH "${CMAKE_CURRENT_LIST_DIR}/../libcxx" CACHE PATH
+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR OR LIBUNWIND_STANDALONE_BUILD)
+
project(libunwind LANGUAGES C CXX ASM)
+
+
+ include(GNUInstallDirs)
+
+
+
set(PACKAGE_NAME libunwind)
+
set(PACKAGE_VERSION 12.0.0)
+
set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
+
@@ -115,17 +117,17 @@ set(CMAKE_MODULE_PATH
+
+
if(LLVM_ENABLE_PER_TARGET_RUNTIME_DIR AND NOT APPLE)
+
set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
+ set(LIBUNWIND_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/${LLVM_DEFAULT_TARGET_TRIPLE}/c++)
+
if(LIBCXX_LIBDIR_SUBDIR)
+
string(APPEND LIBUNWIND_LIBRARY_DIR /${LIBUNWIND_LIBDIR_SUBDIR})
+
string(APPEND LIBUNWIND_INSTALL_LIBRARY_DIR /${LIBUNWIND_LIBDIR_SUBDIR})
+
endif()
+
elseif(LLVM_LIBRARY_OUTPUT_INTDIR)
+
set(LIBUNWIND_LIBRARY_DIR ${LLVM_LIBRARY_OUTPUT_INTDIR})
+
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LIBUNWIND_LIBDIR_SUFFIX})
+
+ set(LIBUNWIND_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBUNWIND_LIBDIR_SUFFIX})
+
else()
+
set(LIBUNWIND_LIBRARY_DIR ${CMAKE_BINARY_DIR}/lib${LIBUNWIND_LIBDIR_SUFFIX})
+
- set(LIBUNWIND_INSTALL_LIBRARY_DIR lib${LIBUNWIND_LIBDIR_SUFFIX})
+
+ set(LIBUNWIND_INSTALL_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}${LIBUNWIND_LIBDIR_SUFFIX})
+
endif()
+
+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIBUNWIND_LIBRARY_DIR})
+44
pkgs/development/compilers/llvm/git/lld/default.nix
···
+
{ lib, stdenv, llvm_meta
+
, buildLlvmTools
+
, src
+
, cmake
+
, libxml2
+
, libllvm
+
, version
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "lld";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
patches = [
+
./gnu-install-dirs.patch
+
];
+
+
nativeBuildInputs = [ cmake ];
+
buildInputs = [ libllvm libxml2 ];
+
+
cmakeFlags = [
+
"-DLLVM_CONFIG_PATH=${libllvm.dev}/bin/llvm-config${lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) "-native"}"
+
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen"
+
];
+
+
outputs = [ "out" "lib" "dev" ];
+
+
meta = llvm_meta // {
+
homepage = "https://lld.llvm.org/";
+
description = "The LLVM linker";
+
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.
+
'';
+
};
+
}
+68
pkgs/development/compilers/llvm/git/lld/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index d4e561b50d8f..cfa5bdd79c2a 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -6,6 +6,8 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
set(LLD_BUILT_STANDALONE TRUE)
+
+
+ include(GNUInstallDirs)
+
+
+
find_program(LLVM_CONFIG_PATH "llvm-config" DOC "Path to llvm-config binary")
+
if(NOT LLVM_CONFIG_PATH)
+
message(FATAL_ERROR "llvm-config not found: specify LLVM_CONFIG_PATH")
+
@@ -179,7 +181,7 @@ include_directories(BEFORE
+
+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
install(DIRECTORY include/
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
FILES_MATCHING
+
PATTERN "*.h"
+
)
+
diff --git a/cmake/modules/AddLLD.cmake b/cmake/modules/AddLLD.cmake
+
index 23df41312403..d62372c88de7 100644
+
--- a/cmake/modules/AddLLD.cmake
+
+++ b/cmake/modules/AddLLD.cmake
+
@@ -20,9 +20,9 @@ macro(add_lld_library name)
+
install(TARGETS ${name}
+
COMPONENT ${name}
+
${export_to_lldtargets}
+
- 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 (${ARG_SHARED} AND NOT CMAKE_CONFIGURATION_TYPES)
+
add_llvm_install_targets(install-${name}
+
@@ -54,7 +54,7 @@ macro(add_lld_tool name)
+
+
install(TARGETS ${name}
+
${export_to_lldtargets}
+
- RUNTIME DESTINATION bin
+
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+
COMPONENT ${name})
+
+
if(NOT CMAKE_CONFIGURATION_TYPES)
+
@@ -69,5 +69,5 @@ endmacro()
+
macro(add_lld_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()
+
diff --git a/tools/lld/CMakeLists.txt b/tools/lld/CMakeLists.txt
+
index 5cff736ff57f..64e775c771b9 100644
+
--- a/tools/lld/CMakeLists.txt
+
+++ b/tools/lld/CMakeLists.txt
+
@@ -21,7 +21,7 @@ target_link_libraries(lld
+
)
+
+
install(TARGETS lld
+
- RUNTIME DESTINATION bin)
+
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+
if(NOT LLD_SYMLINKS_TO_CREATE)
+
set(LLD_SYMLINKS_TO_CREATE
+131
pkgs/development/compilers/llvm/git/lldb/default.nix
···
+
{ lib, stdenv, llvm_meta
+
, runCommand
+
, src
+
, cmake
+
, zlib
+
, ncurses
+
, swig
+
, which
+
, libedit
+
, libxml2
+
, libllvm
+
, libclang
+
, python3
+
, version
+
, libobjc
+
, xpc
+
, Foundation
+
, bootstrap_cmds
+
, Carbon
+
, Cocoa
+
, lit
+
, enableManpages ? false
+
}:
+
+
stdenv.mkDerivation (rec {
+
pname = "lldb";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
patches = [
+
./procfs.patch
+
(runCommand "resource-dir.patch" {
+
clangLibDir = "${libclang.lib}/lib";
+
} ''
+
substitute '${./resource-dir.patch}' "$out" --subst-var clangLibDir
+
'')
+
./gnu-install-dirs.patch
+
];
+
+
outputs = [ "out" "lib" "dev" ];
+
+
nativeBuildInputs = [
+
cmake python3 which swig lit
+
] ++ lib.optionals enableManpages [
+
python3.pkgs.sphinx python3.pkgs.recommonmark
+
];
+
+
buildInputs = [
+
ncurses
+
zlib
+
libedit
+
libxml2
+
libllvm
+
]
+
++ lib.optionals stdenv.isDarwin [
+
libobjc
+
xpc
+
Foundation
+
bootstrap_cmds
+
Carbon
+
Cocoa
+
];
+
+
hardeningDisable = [ "format" ];
+
+
cmakeFlags = [
+
"-DLLDB_INCLUDE_TESTS=${if doCheck then "YES" else "NO"}"
+
"-DLLVM_ENABLE_RTTI=OFF"
+
"-DClang_DIR=${libclang.dev}/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 enableManpages [
+
"-DLLVM_ENABLE_SPHINX=ON"
+
"-DSPHINX_OUTPUT_MAN=ON"
+
"-DSPHINX_OUTPUT_HTML=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;
+
+
postInstall = ''
+
# Editor support
+
# vscode:
+
install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
+
mkdir -p $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
+
ln -s $out/bin/lldb-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
+
'';
+
+
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.
+
'';
+
};
+
} // lib.optionalAttrs enableManpages {
+
pname = "lldb-manpages";
+
+
buildPhase = ''
+
make docs-lldb-man
+
'';
+
+
propagatedBuildInputs = [];
+
+
# 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;
+
+
outputs = [ "out" ];
+
+
doCheck = false;
+
+
meta = llvm_meta // {
+
description = "man pages for LLDB ${version}";
+
};
+
})
+65
pkgs/development/compilers/llvm/git/lldb/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index b5633e21c56a..f2f1035e9238 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -10,6 +10,8 @@ set(CMAKE_MODULE_PATH
+
# If we are not building as part of LLVM, build LLDB as a standalone project,
+
# using LLVM as an external library.
+
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+
+ include(GNUInstallDirs)
+
+
+
project(lldb)
+
include(LLDBStandalone)
+
+
diff --git a/cmake/modules/AddLLDB.cmake b/cmake/modules/AddLLDB.cmake
+
index 4ed5c647c5d2..89f96e710d55 100644
+
--- a/cmake/modules/AddLLDB.cmake
+
+++ b/cmake/modules/AddLLDB.cmake
+
@@ -107,13 +107,13 @@ function(add_lldb_library name)
+
endif()
+
+
if(PARAM_SHARED)
+
- set(install_dest lib${LLVM_LIBDIR_SUFFIX})
+
+ set(install_dest ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
+
if(PARAM_INSTALL_PREFIX)
+
set(install_dest ${PARAM_INSTALL_PREFIX})
+
endif()
+
# RUNTIME is relevant for DLL platforms, FRAMEWORK for macOS
+
install(TARGETS ${name} COMPONENT ${name}
+
- RUNTIME DESTINATION bin
+
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+
LIBRARY DESTINATION ${install_dest}
+
ARCHIVE DESTINATION ${install_dest}
+
FRAMEWORK DESTINATION ${install_dest})
+
diff --git a/cmake/modules/LLDBConfig.cmake b/cmake/modules/LLDBConfig.cmake
+
index 2fdf1502d055..37364341ff8b 100644
+
--- a/cmake/modules/LLDBConfig.cmake
+
+++ b/cmake/modules/LLDBConfig.cmake
+
@@ -225,7 +225,7 @@ include_directories(BEFORE
+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
install(DIRECTORY include/
+
COMPONENT lldb-headers
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
FILES_MATCHING
+
PATTERN "*.h"
+
PATTERN ".cmake" EXCLUDE
+
@@ -233,7 +233,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
+
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/include/
+
COMPONENT lldb-headers
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
FILES_MATCHING
+
PATTERN "*.h"
+
PATTERN ".cmake" EXCLUDE
+
diff --git a/tools/intel-features/CMakeLists.txt b/tools/intel-features/CMakeLists.txt
+
index 734167e51bc5..f95761b5df58 100644
+
--- a/tools/intel-features/CMakeLists.txt
+
+++ b/tools/intel-features/CMakeLists.txt
+
@@ -65,4 +65,4 @@ if (LLDB_ENABLE_PYTHON AND LLDB_BUILD_INTEL_PT)
+
endif()
+
+
install(TARGETS lldbIntelFeatures
+
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX})
+
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
+31
pkgs/development/compilers/llvm/git/lldb/procfs.patch
···
+
--- a/source/Plugins/Process/Linux/Procfs.h
+
+++ b/source/Plugins/Process/Linux/Procfs.h
+
@@ -11,21 +11,12 @@
+
// sys/procfs.h on Android/Linux for all supported architectures.
+
+
#include <sys/ptrace.h>
+
+#include <asm/ptrace.h>
+
+
-#ifdef __ANDROID__
+
-#if defined(__arm64__) || defined(__aarch64__)
+
-typedef unsigned long elf_greg_t;
+
-typedef elf_greg_t
+
- elf_gregset_t[(sizeof(struct user_pt_regs) / sizeof(elf_greg_t))];
+
-typedef struct user_fpsimd_state elf_fpregset_t;
+
-#ifndef NT_FPREGSET
+
-#define NT_FPREGSET NT_PRFPREG
+
-#endif // NT_FPREGSET
+
-#elif defined(__mips__)
+
-#ifndef NT_FPREGSET
+
-#define NT_FPREGSET NT_PRFPREG
+
-#endif // NT_FPREGSET
+
-#endif
+
-#else // __ANDROID__
+
+#if !defined(__GLIBC__) && defined(__powerpc__)
+
+#define pt_regs musl_pt_regs
+
+#include <sys/procfs.h>
+
+#undef pt_regs
+
+#else
+
#include <sys/procfs.h>
+
-#endif // __ANDROID__
+
+#endif
+13
pkgs/development/compilers/llvm/git/lldb/resource-dir.patch
···
+
diff --git a/lldb/cmake/modules/LLDBConfig.cmake b/lldb/cmake/modules/LLDBConfig.cmake
+
index 37364341ff8b..7f74c1a3e257 100644
+
--- a/cmake/modules/LLDBConfig.cmake
+
+++ b/cmake/modules/LLDBConfig.cmake
+
@@ -257,7 +257,7 @@ if (NOT TARGET clang-resource-headers)
+
# Iterate over the possible places where the external resource directory
+
# could be and pick the first that exists.
+
foreach(CANDIDATE "${Clang_DIR}/../.." "${LLVM_DIR}" "${LLVM_LIBRARY_DIRS}"
+
- "${LLVM_BUILD_LIBRARY_DIR}"
+
+ "${LLVM_BUILD_LIBRARY_DIR}" "@clangLibDir@"
+
"${LLVM_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX}")
+
# Build the resource directory path by appending 'clang/<version number>'.
+
set(CANDIDATE_RESOURCE_DIR "${CANDIDATE}/clang/${LLDB_CLANG_RESOURCE_DIR_NAME}")
+220
pkgs/development/compilers/llvm/git/llvm/default.nix
···
+
{ lib, stdenv, llvm_meta
+
, pkgsBuildBuild
+
, src
+
, fetchpatch
+
, cmake
+
, python3
+
, libffi
+
, libbfd
+
, libpfm
+
, libxml2
+
, ncurses
+
, version
+
, release_version
+
, zlib
+
, buildLlvmTools
+
, debugVersion ? false
+
, enableManpages ? false
+
, enableSharedLibraries ? !stdenv.hostPlatform.isStatic
+
, enablePFM ? !(stdenv.isDarwin
+
|| stdenv.isAarch64 # broken for Ampere eMAG 8180 (c2.large.arm on Packet) #56245
+
|| stdenv.isAarch32 # broken for the armv7l builder
+
)
+
, enablePolly ? false
+
}:
+
+
let
+
inherit (lib) optional optionals optionalString;
+
+
# Used when creating a version-suffixed symlink of libLLVM.dylib
+
shortVersion = with lib;
+
concatStringsSep "." (take 1 (splitString "." release_version));
+
+
in stdenv.mkDerivation (rec {
+
pname = "llvm";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
outputs = [ "out" "lib" "dev" "python" ];
+
+
nativeBuildInputs = [ cmake python3 ]
+
++ optionals enableManpages [ python3.pkgs.sphinx python3.pkgs.recommonmark ];
+
+
buildInputs = [ libxml2 libffi ]
+
++ optional enablePFM libpfm; # exegesis
+
+
propagatedBuildInputs = [ ncurses zlib ];
+
+
patches = [
+
./gnu-install-dirs.patch
+
# On older CPUs (e.g. Hydra/wendy) we'd be getting an error in this test.
+
(fetchpatch {
+
name = "uops-CMOV16rm-noreg.diff";
+
url = "https://github.com/llvm/llvm-project/commit/9e9f991ac033.diff";
+
sha256 = "sha256:12s8vr6ibri8b48h2z38f3afhwam10arfiqfy4yg37bmc054p5hi";
+
stripLen = 1;
+
})
+
] ++ lib.optional enablePolly ./gnu-install-dirs-polly.patch;
+
+
postPatch = optionalString stdenv.isDarwin ''
+
substituteInPlace cmake/modules/AddLLVM.cmake \
+
--replace 'set(_install_name_dir INSTALL_NAME_DIR "@rpath")' "set(_install_name_dir)" \
+
--replace 'set(_install_rpath "@loader_path/../''${CMAKE_INSTALL_LIBDIR}''${LLVM_LIBDIR_SUFFIX}" ''${extra_libdir})' ""
+
''
+
# Patch llvm-config to return correct library path based on --link-{shared,static}.
+
+ optionalString (enableSharedLibraries) ''
+
substitute '${./outputs.patch}' ./outputs.patch --subst-var lib
+
patch -p1 < ./outputs.patch
+
'' + ''
+
# FileSystem permissions tests fail with various special bits
+
substituteInPlace unittests/Support/CMakeLists.txt \
+
--replace "Path.cpp" ""
+
rm unittests/Support/Path.cpp
+
substituteInPlace unittests/IR/CMakeLists.txt \
+
--replace "PassBuilderCallbacksTest.cpp" ""
+
rm unittests/IR/PassBuilderCallbacksTest.cpp
+
'' + optionalString stdenv.hostPlatform.isMusl ''
+
patch -p1 -i ${../../TLI-musl.patch}
+
substituteInPlace unittests/Support/CMakeLists.txt \
+
--replace "add_subdirectory(DynamicLibrary)" ""
+
rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
+
# valgrind unhappy with musl or glibc, but fails w/musl only
+
rm test/CodeGen/AArch64/wineh4.mir
+
'' + optionalString stdenv.hostPlatform.isAarch32 ''
+
# skip failing X86 test cases on 32-bit ARM
+
rm test/DebugInfo/X86/convert-debugloc.ll
+
rm test/DebugInfo/X86/convert-inlined.ll
+
rm test/DebugInfo/X86/convert-linked.ll
+
rm test/tools/dsymutil/X86/op-convert.test
+
'' + optionalString (stdenv.hostPlatform.system == "armv6l-linux") ''
+
# Seems to require certain floating point hardware (NEON?)
+
rm test/ExecutionEngine/frem.ll
+
'' + ''
+
patchShebangs test/BugPoint/compile-custom.ll.py
+
'';
+
+
# hacky fix: created binaries need to be run before installation
+
preBuild = ''
+
mkdir -p $out/
+
ln -sv $PWD/lib $out
+
'';
+
+
# E.g. mesa.drivers use the build-id as a cache key (see #93946):
+
LDFLAGS = optionalString (enableSharedLibraries && !stdenv.isDarwin) "-Wl,--build-id=sha1";
+
+
cmakeFlags = with stdenv; [
+
"-DLLVM_INSTALL_CMAKE_DIR=${placeholder "dev"}/lib/cmake/llvm/"
+
"-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}"
+
"-DLLVM_INSTALL_UTILS=ON" # Needed by rustc
+
"-DLLVM_BUILD_TESTS=ON"
+
"-DLLVM_ENABLE_FFI=ON"
+
"-DLLVM_ENABLE_RTTI=ON"
+
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
+
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}"
+
"-DLLVM_ENABLE_DUMP=ON"
+
] ++ optionals enableSharedLibraries [
+
"-DLLVM_LINK_LLVM_DYLIB=ON"
+
] ++ optionals enableManpages [
+
"-DLLVM_BUILD_DOCS=ON"
+
"-DLLVM_ENABLE_SPHINX=ON"
+
"-DSPHINX_OUTPUT_MAN=ON"
+
"-DSPHINX_OUTPUT_HTML=OFF"
+
"-DSPHINX_WARNINGS_AS_ERRORS=OFF"
+
] ++ optionals (!isDarwin) [
+
"-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include"
+
] ++ optionals isDarwin [
+
"-DLLVM_ENABLE_LIBCXX=ON"
+
"-DCAN_TARGET_i386=false"
+
] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+
"-DCMAKE_CROSSCOMPILING=True"
+
"-DLLVM_TABLEGEN=${buildLlvmTools.llvm}/bin/llvm-tblgen"
+
(
+
let
+
nativeCC = pkgsBuildBuild.targetPackages.stdenv.cc;
+
nativeBintools = nativeCC.bintools.bintools;
+
nativeToolchainFlags = [
+
"-DCMAKE_C_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}cc"
+
"-DCMAKE_CXX_COMPILER=${nativeCC}/bin/${nativeCC.targetPrefix}c++"
+
"-DCMAKE_AR=${nativeBintools}/bin/${nativeBintools.targetPrefix}ar"
+
"-DCMAKE_STRIP=${nativeBintools}/bin/${nativeBintools.targetPrefix}strip"
+
"-DCMAKE_RANLIB=${nativeBintools}/bin/${nativeBintools.targetPrefix}ranlib"
+
];
+
in "-DCROSS_TOOLCHAIN_FLAGS_NATIVE:list=${lib.concatStringsSep ";" nativeToolchainFlags}"
+
)
+
];
+
+
postBuild = ''
+
rm -fR $out
+
'';
+
+
preCheck = ''
+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD/lib
+
'';
+
+
postInstall = ''
+
mkdir -p $python/share
+
mv $out/share/opt-viewer $python/share/opt-viewer
+
moveToOutput "bin/llvm-config*" "$dev"
+
substituteInPlace "$dev/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \
+
--replace "\''${_IMPORT_PREFIX}/lib/lib" "$lib/lib/lib" \
+
--replace "$out/bin/llvm-config" "$dev/bin/llvm-config"
+
substituteInPlace "$dev/lib/cmake/llvm/LLVMConfig.cmake" \
+
--replace 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}")' 'set(LLVM_BINARY_DIR "''${LLVM_INSTALL_PREFIX}'"$lib"'")'
+
''
+
+ optionalString (stdenv.isDarwin && enableSharedLibraries) ''
+
ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib
+
ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib
+
''
+
+ optionalString (stdenv.buildPlatform != stdenv.hostPlatform) ''
+
cp NATIVE/bin/llvm-config $dev/bin/llvm-config-native
+
'';
+
+
doCheck = stdenv.isLinux && (!stdenv.isx86_32) && (!stdenv.hostPlatform.isMusl);
+
+
checkTarget = "check-all";
+
+
requiredSystemFeatures = [ "big-parallel" ];
+
meta = llvm_meta // {
+
homepage = "https://llvm.org/";
+
description = "A collection of modular and reusable compiler and toolchain technologies";
+
longDescription = ''
+
The LLVM Project is a collection of modular and reusable compiler and
+
toolchain technologies. Despite its name, LLVM has little to do with
+
traditional virtual machines. The name "LLVM" itself is not an acronym; it
+
is the full name of the project.
+
LLVM began as a research project at the University of Illinois, with the
+
goal of providing a modern, SSA-based compilation strategy capable of
+
supporting both static and dynamic compilation of arbitrary programming
+
languages. Since then, LLVM has grown to be an umbrella project consisting
+
of a number of subprojects, many of which are being used in production by
+
a wide variety of commercial and open source projects as well as being
+
widely used in academic research. Code in the LLVM project is licensed
+
under the "Apache 2.0 License with LLVM exceptions".
+
'';
+
};
+
} // lib.optionalAttrs enableManpages {
+
pname = "llvm-manpages";
+
+
buildPhase = ''
+
make docs-llvm-man
+
'';
+
+
propagatedBuildInputs = [];
+
+
installPhase = ''
+
make -C docs install
+
'';
+
+
postPatch = null;
+
postInstall = null;
+
+
outputs = [ "out" ];
+
+
doCheck = false;
+
+
meta = llvm_meta // {
+
description = "man pages for LLVM ${version}";
+
};
+
})
+105
pkgs/development/compilers/llvm/git/llvm/gnu-install-dirs-polly.patch
···
+
diff --git a/tools/polly/CMakeLists.txt b/tools/polly/CMakeLists.txt
+
index ca7c04c565bb..6ed5db5dd4f8 100644
+
--- a/tools/polly/CMakeLists.txt
+
+++ b/tools/polly/CMakeLists.txt
+
@@ -2,7 +2,11 @@
+
if (NOT DEFINED LLVM_MAIN_SRC_DIR)
+
project(Polly)
+
cmake_minimum_required(VERSION 3.13.4)
+
+endif()
+
+
+
+include(GNUInstallDirs)
+
+
+if (NOT DEFINED LLVM_MAIN_SRC_DIR)
+
# Where is LLVM installed?
+
find_package(LLVM CONFIG REQUIRED)
+
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${LLVM_CMAKE_DIR})
+
@@ -122,13 +126,13 @@ include_directories(
+
+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
install(DIRECTORY include/
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
FILES_MATCHING
+
PATTERN "*.h"
+
)
+
+
install(DIRECTORY ${POLLY_BINARY_DIR}/include/
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
FILES_MATCHING
+
PATTERN "*.h"
+
PATTERN "CMakeFiles" EXCLUDE
+
diff --git a/tools/polly/cmake/CMakeLists.txt b/tools/polly/cmake/CMakeLists.txt
+
index 7cc129ba2e90..137be25e4b80 100644
+
--- a/tools/polly/cmake/CMakeLists.txt
+
+++ b/tools/polly/cmake/CMakeLists.txt
+
@@ -79,18 +79,18 @@ file(GENERATE
+
+
# Generate PollyConfig.cmake for the install tree.
+
unset(POLLY_EXPORTS)
+
-set(POLLY_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+set(POLLY_INSTALL_PREFIX "")
+
set(POLLY_CONFIG_LLVM_CMAKE_DIR "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
+
-set(POLLY_CONFIG_CMAKE_DIR "${POLLY_INSTALL_PREFIX}/${POLLY_INSTALL_PACKAGE_DIR}")
+
-set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_INSTALL_PREFIX}/lib${LLVM_LIBDIR_SUFFIX}")
+
+set(POLLY_CONFIG_CMAKE_DIR "${POLLY_INSTALL_PREFIX}${CMAKE_INSTALL_PREFIX}/${POLLY_INSTALL_PACKAGE_DIR}")
+
+set(POLLY_CONFIG_LIBRARY_DIRS "${POLLY_INSTALL_PREFIX}${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
+
if (POLLY_BUNDLED_ISL)
+
set(POLLY_CONFIG_INCLUDE_DIRS
+
- "${POLLY_INSTALL_PREFIX}/include"
+
- "${POLLY_INSTALL_PREFIX}/include/polly"
+
+ "${POLLY_INSTALL_PREFIX}${CMAKE_INSTALL_FULL_LIBDIR}"
+
+ "${POLLY_INSTALL_PREFIX}${CMAKE_INSTALL_FULL_LIBDIR}/polly"
+
)
+
else()
+
set(POLLY_CONFIG_INCLUDE_DIRS
+
- "${POLLY_INSTALL_PREFIX}/include"
+
+ "${POLLY_INSTALL_PREFIX}${CMAKE_INSTALL_FULL_INCLUDEDIR}"
+
${ISL_INCLUDE_DIRS}
+
)
+
endif()
+
@@ -100,12 +100,12 @@ endif()
+
foreach(tgt IN LISTS POLLY_CONFIG_EXPORTED_TARGETS)
+
get_target_property(tgt_type ${tgt} TYPE)
+
if (tgt_type STREQUAL "EXECUTABLE")
+
- set(tgt_prefix "bin/")
+
+ set(tgt_prefix "${CMAKE_INSTALL_BINDIR}/")
+
else()
+
- set(tgt_prefix "lib/")
+
+ set(tgt_prefix "${CMAKE_INSTALL_LIBDIR}/")
+
endif()
+
+
- set(tgt_path "${CMAKE_INSTALL_PREFIX}/${tgt_prefix}$<TARGET_FILE_NAME:${tgt}>")
+
+ set(tgt_path "${tgt_prefix}$<TARGET_FILE_NAME:${tgt}>")
+
file(RELATIVE_PATH tgt_path ${POLLY_CONFIG_CMAKE_DIR} ${tgt_path})
+
+
if (NOT tgt_type STREQUAL "INTERFACE_LIBRARY")
+
diff --git a/tools/polly/cmake/polly_macros.cmake b/tools/polly/cmake/polly_macros.cmake
+
index 518a09b45a42..bd9d6f5542ad 100644
+
--- a/tools/polly/cmake/polly_macros.cmake
+
+++ b/tools/polly/cmake/polly_macros.cmake
+
@@ -44,8 +44,8 @@ macro(add_polly_library name)
+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY OR ${name} STREQUAL "LLVMPolly")
+
install(TARGETS ${name}
+
EXPORT LLVMExports
+
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX}
+
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX})
+
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}
+
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
+
endif()
+
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS ${name})
+
endmacro(add_polly_library)
+
diff --git a/tools/polly/lib/External/CMakeLists.txt b/tools/polly/lib/External/CMakeLists.txt
+
index 8991094d92c7..178d8ad606bb 100644
+
--- a/tools/polly/lib/External/CMakeLists.txt
+
+++ b/tools/polly/lib/External/CMakeLists.txt
+
@@ -275,7 +275,7 @@ if (POLLY_BUNDLED_ISL)
+
install(DIRECTORY
+
${ISL_SOURCE_DIR}/include/
+
${ISL_BINARY_DIR}/include/
+
- DESTINATION include/polly
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/polly
+
FILES_MATCHING
+
PATTERN "*.h"
+
PATTERN "CMakeFiles" EXCLUDE
+417
pkgs/development/compilers/llvm/git/llvm/gnu-install-dirs.patch
···
+
diff --git a/CMakeLists.txt b/CMakeLists.txt
+
index 277d0fe54d7b..af69c8be8745 100644
+
--- a/CMakeLists.txt
+
+++ b/CMakeLists.txt
+
@@ -256,15 +256,21 @@ if (CMAKE_BUILD_TYPE AND
+
message(FATAL_ERROR "Invalid value for CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
+
endif()
+
+
+include(GNUInstallDirs)
+
+
+
set(LLVM_LIBDIR_SUFFIX "" CACHE STRING "Define suffix of library directory name (32/64)" )
+
+
-set(LLVM_TOOLS_INSTALL_DIR "bin" CACHE STRING "Path for binary subdirectory (defaults to 'bin')")
+
+set(LLVM_TOOLS_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}" CACHE STRING
+
+ "Path for binary subdirectory (defaults to 'bin')")
+
mark_as_advanced(LLVM_TOOLS_INSTALL_DIR)
+
+
set(LLVM_UTILS_INSTALL_DIR "${LLVM_TOOLS_INSTALL_DIR}" CACHE STRING
+
"Path to install LLVM utilities (enabled by LLVM_INSTALL_UTILS=ON) (defaults to LLVM_TOOLS_INSTALL_DIR)")
+
mark_as_advanced(LLVM_UTILS_INSTALL_DIR)
+
+
+set(LLVM_INSTALL_CMAKE_DIR "${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/cmake/llvm" CACHE STRING
+
+ "Path for CMake subdirectory (defaults to lib/cmake/llvm)" )
+
+
+
# They are used as destination of target generators.
+
set(LLVM_RUNTIME_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin)
+
set(LLVM_LIBRARY_OUTPUT_INTDIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib${LLVM_LIBDIR_SUFFIX})
+
@@ -567,9 +573,9 @@ option (LLVM_ENABLE_SPHINX "Use Sphinx to generate llvm documentation." OFF)
+
option (LLVM_ENABLE_OCAMLDOC "Build OCaml bindings documentation." ON)
+
option (LLVM_ENABLE_BINDINGS "Build bindings." ON)
+
+
-set(LLVM_INSTALL_DOXYGEN_HTML_DIR "share/doc/llvm/doxygen-html"
+
+set(LLVM_INSTALL_DOXYGEN_HTML_DIR "${CMAKE_INSTALL_DOCDIR}/${project}/doxygen-html"
+
CACHE STRING "Doxygen-generated HTML documentation install directory")
+
-set(LLVM_INSTALL_OCAMLDOC_HTML_DIR "share/doc/llvm/ocaml-html"
+
+set(LLVM_INSTALL_OCAMLDOC_HTML_DIR "${CMAKE_INSTALL_DOCDIR}/${project}/ocaml-html"
+
CACHE STRING "OCamldoc-generated HTML documentation install directory")
+
+
option (LLVM_BUILD_EXTERNAL_COMPILER_RT
+
@@ -1027,7 +1033,7 @@ endif()
+
+
if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
install(DIRECTORY include/llvm include/llvm-c
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
COMPONENT llvm-headers
+
FILES_MATCHING
+
PATTERN "*.def"
+
@@ -1038,7 +1044,7 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
)
+
+
install(DIRECTORY ${LLVM_INCLUDE_DIR}/llvm ${LLVM_INCLUDE_DIR}/llvm-c
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
COMPONENT llvm-headers
+
FILES_MATCHING
+
PATTERN "*.def"
+
@@ -1052,13 +1058,13 @@ if (NOT LLVM_INSTALL_TOOLCHAIN_ONLY)
+
+
if (LLVM_INSTALL_MODULEMAPS)
+
install(DIRECTORY include/llvm include/llvm-c
+
- DESTINATION include
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+
COMPONENT llvm-headers
+
FILES_MATCHING
+
PATTERN "module.modulemap"
+
)
+
install(FILES include/llvm/module.install.modulemap
+
- DESTINATION include/llvm
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/llvm
+
COMPONENT llvm-headers
+
RENAME "module.extern.modulemap"
+
)
+
diff --git a/cmake/modules/AddLLVM.cmake b/cmake/modules/AddLLVM.cmake
+
index 97c9980c7de3..409e8b615f75 100644
+
--- a/cmake/modules/AddLLVM.cmake
+
+++ b/cmake/modules/AddLLVM.cmake
+
@@ -804,9 +804,9 @@ macro(add_llvm_library name)
+
+
install(TARGETS ${name}
+
${export_to_llvmexports}
+
- LIBRARY DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
+
- ARCHIVE DESTINATION lib${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
+
- RUNTIME DESTINATION bin COMPONENT ${name})
+
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
+
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX} COMPONENT ${name}
+
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT ${name})
+
+
if (NOT LLVM_ENABLE_IDE)
+
add_llvm_install_targets(install-${name}
+
@@ -1022,7 +1022,7 @@ function(process_llvm_pass_plugins)
+
"set(LLVM_STATIC_EXTENSIONS ${LLVM_STATIC_EXTENSIONS})")
+
install(FILES
+
${llvm_cmake_builddir}/LLVMConfigExtensions.cmake
+
- DESTINATION ${LLVM_INSTALL_PACKAGE_DIR}
+
+ DESTINATION ${LLVM_INSTALL_CMAKE_DIR}
+
COMPONENT cmake-exports)
+
+
set(ExtensionDef "${LLVM_BINARY_DIR}/include/llvm/Support/Extension.def")
+
@@ -1242,7 +1242,7 @@ macro(add_llvm_example name)
+
endif()
+
add_llvm_executable(${name} ${ARGN})
+
if( LLVM_BUILD_EXAMPLES )
+
- install(TARGETS ${name} RUNTIME DESTINATION examples)
+
+ install(TARGETS ${name} RUNTIME DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples)
+
endif()
+
set_target_properties(${name} PROPERTIES FOLDER "Examples")
+
endmacro(add_llvm_example name)
+
@@ -1854,7 +1854,7 @@ function(llvm_install_library_symlink name dest type)
+
set(full_name ${CMAKE_${type}_LIBRARY_PREFIX}${name}${CMAKE_${type}_LIBRARY_SUFFIX})
+
set(full_dest ${CMAKE_${type}_LIBRARY_PREFIX}${dest}${CMAKE_${type}_LIBRARY_SUFFIX})
+
+
- set(output_dir lib${LLVM_LIBDIR_SUFFIX})
+
+ set(output_dir ${CMAKE_INSTALL_FULL_LIBDIR}${LLVM_LIBDIR_SUFFIX})
+
if(WIN32 AND "${type}" STREQUAL "SHARED")
+
set(output_dir bin)
+
endif()
+
@@ -1871,7 +1871,7 @@ function(llvm_install_library_symlink name dest type)
+
endif()
+
endfunction()
+
+
-function(llvm_install_symlink name dest)
+
+function(llvm_install_symlink name dest output_dir)
+
cmake_parse_arguments(ARG "ALWAYS_GENERATE" "COMPONENT" "" ${ARGN})
+
foreach(path ${CMAKE_MODULE_PATH})
+
if(EXISTS ${path}/LLVMInstallSymlink.cmake)
+
@@ -1894,7 +1894,7 @@ function(llvm_install_symlink name dest)
+
set(full_dest ${dest}${CMAKE_EXECUTABLE_SUFFIX})
+
+
install(SCRIPT ${INSTALL_SYMLINK}
+
- CODE "install_symlink(${full_name} ${full_dest} ${LLVM_TOOLS_INSTALL_DIR})"
+
+ CODE "install_symlink(${full_name} ${full_dest} ${output_dir})"
+
COMPONENT ${component})
+
+
if (NOT LLVM_ENABLE_IDE AND NOT ARG_ALWAYS_GENERATE)
+
@@ -1977,7 +1977,8 @@ function(add_llvm_tool_symlink link_name target)
+
endif()
+
+
if ((TOOL_IS_TOOLCHAIN OR NOT LLVM_INSTALL_TOOLCHAIN_ONLY) AND LLVM_BUILD_TOOLS)
+
- llvm_install_symlink(${link_name} ${target})
+
+ GNUInstallDirs_get_absolute_install_dir(output_dir LLVM_TOOLS_INSTALL_DIR)
+
+ llvm_install_symlink(${link_name} ${target} ${output_dir})
+
endif()
+
endif()
+
endfunction()
+
@@ -2100,9 +2101,9 @@ function(llvm_setup_rpath name)
+
+
if (APPLE)
+
set(_install_name_dir INSTALL_NAME_DIR "@rpath")
+
- set(_install_rpath "@loader_path/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+
+ set(_install_rpath "@loader_path/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+
elseif(UNIX)
+
- set(_install_rpath "\$ORIGIN/../lib${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+
+ set(_install_rpath "\$ORIGIN/../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}" ${extra_libdir})
+
if(${CMAKE_SYSTEM_NAME} MATCHES "(FreeBSD|DragonFly)")
+
set_property(TARGET ${name} APPEND_STRING PROPERTY
+
LINK_FLAGS " -Wl,-z,origin ")
+
diff --git a/cmake/modules/AddOCaml.cmake b/cmake/modules/AddOCaml.cmake
+
index 554046b20edf..4d1ad980641e 100644
+
--- a/cmake/modules/AddOCaml.cmake
+
+++ b/cmake/modules/AddOCaml.cmake
+
@@ -144,9 +144,9 @@ function(add_ocaml_library name)
+
endforeach()
+
+
if( APPLE )
+
- set(ocaml_rpath "@executable_path/../../../lib${LLVM_LIBDIR_SUFFIX}")
+
+ set(ocaml_rpath "@executable_path/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
+
elseif( UNIX )
+
- set(ocaml_rpath "\\$ORIGIN/../../../lib${LLVM_LIBDIR_SUFFIX}")
+
+ set(ocaml_rpath "\\$ORIGIN/../../../${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}")
+
endif()
+
list(APPEND ocaml_flags "-ldopt" "-Wl,-rpath,${ocaml_rpath}")
+
+
diff --git a/cmake/modules/AddSphinxTarget.cmake b/cmake/modules/AddSphinxTarget.cmake
+
index e80c3b5c1cac..482f6d715ef5 100644
+
--- a/cmake/modules/AddSphinxTarget.cmake
+
+++ b/cmake/modules/AddSphinxTarget.cmake
+
@@ -90,7 +90,7 @@ function (add_sphinx_target builder project)
+
endif()
+
elseif (builder STREQUAL html)
+
string(TOUPPER "${project}" project_upper)
+
- set(${project_upper}_INSTALL_SPHINX_HTML_DIR "share/doc/${project}/html"
+
+ set(${project_upper}_INSTALL_SPHINX_HTML_DIR "${CMAKE_INSTALL_DOCDIR}/${project}/html"
+
CACHE STRING "HTML documentation install directory for ${project}")
+
+
# '/.' indicates: copy the contents of the directory directly into
+
diff --git a/cmake/modules/CMakeLists.txt b/cmake/modules/CMakeLists.txt
+
index 505dc9a29d70..36e6c63af3f4 100644
+
--- a/cmake/modules/CMakeLists.txt
+
+++ b/cmake/modules/CMakeLists.txt
+
@@ -1,4 +1,4 @@
+
-set(LLVM_INSTALL_PACKAGE_DIR lib${LLVM_LIBDIR_SUFFIX}/cmake/llvm)
+
+set(LLVM_INSTALL_PACKAGE_DIR ${LLVM_INSTALL_CMAKE_DIR} CACHE STRING "Path for CMake subdirectory (defaults to 'cmake/llvm')")
+
set(llvm_cmake_builddir "${LLVM_BINARY_DIR}/${LLVM_INSTALL_PACKAGE_DIR}")
+
+
# First for users who use an installed LLVM, create the LLVMExports.cmake file.
+
@@ -107,13 +107,13 @@ foreach(p ${_count})
+
set(LLVM_CONFIG_CODE "${LLVM_CONFIG_CODE}
+
get_filename_component(LLVM_INSTALL_PREFIX \"\${LLVM_INSTALL_PREFIX}\" PATH)")
+
endforeach(p)
+
-set(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/include")
+
+set(LLVM_CONFIG_INCLUDE_DIRS "\${LLVM_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
+
set(LLVM_CONFIG_INCLUDE_DIR "${LLVM_CONFIG_INCLUDE_DIRS}")
+
set(LLVM_CONFIG_MAIN_INCLUDE_DIR "${LLVM_CONFIG_INCLUDE_DIRS}")
+
-set(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/lib\${LLVM_LIBDIR_SUFFIX}")
+
+set(LLVM_CONFIG_LIBRARY_DIRS "\${LLVM_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}\${LLVM_LIBDIR_SUFFIX}")
+
set(LLVM_CONFIG_CMAKE_DIR "\${LLVM_INSTALL_PREFIX}/${LLVM_INSTALL_PACKAGE_DIR}")
+
set(LLVM_CONFIG_BINARY_DIR "\${LLVM_INSTALL_PREFIX}")
+
-set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/bin")
+
+set(LLVM_CONFIG_TOOLS_BINARY_DIR "\${LLVM_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
+
+
# Generate a default location for lit
+
if (LLVM_INSTALL_UTILS AND LLVM_BUILD_UTILS)
+
diff --git a/cmake/modules/LLVMInstallSymlink.cmake b/cmake/modules/LLVMInstallSymlink.cmake
+
index 09fed8085c23..aa79f192abf0 100644
+
--- a/cmake/modules/LLVMInstallSymlink.cmake
+
+++ b/cmake/modules/LLVMInstallSymlink.cmake
+
@@ -10,7 +10,7 @@ function(install_symlink name target outdir)
+
set(LINK_OR_COPY copy)
+
endif()
+
+
- set(bindir "${DESTDIR}${CMAKE_INSTALL_PREFIX}/${outdir}/")
+
+ set(bindir "${DESTDIR}${outdir}/")
+
+
message(STATUS "Creating ${name}")
+
+
diff --git a/docs/CMake.rst b/docs/CMake.rst
+
index bb821b417ad9..6a528f7c2ad3 100644
+
--- a/docs/CMake.rst
+
+++ b/docs/CMake.rst
+
@@ -196,7 +196,7 @@ CMake manual, or execute ``cmake --help-variable VARIABLE_NAME``.
+
**LLVM_LIBDIR_SUFFIX**:STRING
+
Extra suffix to append to the directory where libraries are to be
+
installed. On a 64-bit architecture, one could use ``-DLLVM_LIBDIR_SUFFIX=64``
+
- to install libraries to ``/usr/lib64``.
+
+ to install libraries to ``/usr/lib64``. See also ``CMAKE_INSTALL_LIBDIR``.
+
+
**CMAKE_C_FLAGS**:STRING
+
Extra flags to use when compiling C source files.
+
@@ -550,8 +550,8 @@ LLVM-specific variables
+
+
**LLVM_INSTALL_DOXYGEN_HTML_DIR**:STRING
+
The path to install Doxygen-generated HTML documentation to. This path can
+
- either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to
+
- `share/doc/llvm/doxygen-html`.
+
+ either be absolute or relative to the ``CMAKE_INSTALL_PREFIX``. Defaults to
+
+ `${CMAKE_INSTALL_DOCDIR}/${project}/doxygen-html`.
+
+
**LLVM_ENABLE_SPHINX**:BOOL
+
If specified, CMake will search for the ``sphinx-build`` executable and will make
+
@@ -582,13 +582,33 @@ LLVM-specific variables
+
+
**LLVM_INSTALL_SPHINX_HTML_DIR**:STRING
+
The path to install Sphinx-generated HTML documentation to. This path can
+
- either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to
+
- `share/doc/llvm/html`.
+
+ either be absolute or relative to the ``CMAKE_INSTALL_PREFIX``. Defaults to
+
+ `${CMAKE_INSTALL_DOCDIR}/${project}/html`.
+
+
**LLVM_INSTALL_OCAMLDOC_HTML_DIR**:STRING
+
The path to install OCamldoc-generated HTML documentation to. This path can
+
- either be absolute or relative to the CMAKE_INSTALL_PREFIX. Defaults to
+
- `share/doc/llvm/ocaml-html`.
+
+ either be absolute or relative to the ``CMAKE_INSTALL_PREFIX``. Defaults to
+
+ `${CMAKE_INSTALL_DOCDIR}/${project}/ocaml-html`.
+
+
+
+**CMAKE_INSTALL_BINDIR**:STRING
+
+ The path to install binary tools, relative to the ``CMAKE_INSTALL_PREFIX``.
+
+ Defaults to `bin`.
+
+
+
+**CMAKE_INSTALL_LIBDIR**:STRING
+
+ The path to install libraries, relative to the ``CMAKE_INSTALL_PREFIX``.
+
+ Defaults to `lib`.
+
+
+
+**CMAKE_INSTALL_INCLUDEDIR**:STRING
+
+ The path to install header files, relative to the ``CMAKE_INSTALL_PREFIX``.
+
+ Defaults to `include`.
+
+
+
+**CMAKE_INSTALL_DOCDIR**:STRING
+
+ The path to install documentation, relative to the ``CMAKE_INSTALL_PREFIX``.
+
+ Defaults to `share/doc`.
+
+
+
+**CMAKE_INSTALL_MANDIR**:STRING
+
+ The path to install manpage files, relative to the ``CMAKE_INSTALL_PREFIX``.
+
+ Defaults to `share/man`.
+
+
**LLVM_CREATE_XCODE_TOOLCHAIN**:BOOL
+
macOS Only: If enabled CMake will generate a target named
+
@@ -786,9 +806,11 @@ the ``cmake`` command or by setting it directly in ``ccmake`` or ``cmake-gui``).
+
+
This file is available in two different locations.
+
+
-* ``<INSTALL_PREFIX>/lib/cmake/llvm/LLVMConfig.cmake`` where
+
- ``<INSTALL_PREFIX>`` is the install prefix of an installed version of LLVM.
+
- On Linux typically this is ``/usr/lib/cmake/llvm/LLVMConfig.cmake``.
+
+* ``<LLVM_INSTALL_PACKAGE_DIR>LLVMConfig.cmake`` where
+
+ ``<LLVM_INSTALL_PACKAGE_DIR>`` is the location where LLVM CMake modules are
+
+ installed as part of an installed version of LLVM. This is typically
+
+ ``cmake/llvm/`` within the lib directory. On Linux, this is typically
+
+ ``/usr/lib/cmake/llvm/LLVMConfig.cmake``.
+
+
* ``<LLVM_BUILD_ROOT>/lib/cmake/llvm/LLVMConfig.cmake`` where
+
``<LLVM_BUILD_ROOT>`` is the root of the LLVM build tree. **Note: this is only
+
diff --git a/examples/Bye/CMakeLists.txt b/examples/Bye/CMakeLists.txt
+
index bb96edb4b4bf..678c22fb43c8 100644
+
--- a/examples/Bye/CMakeLists.txt
+
+++ b/examples/Bye/CMakeLists.txt
+
@@ -14,6 +14,6 @@ if (NOT WIN32)
+
BUILDTREE_ONLY
+
)
+
+
- install(TARGETS ${name} RUNTIME DESTINATION examples)
+
+ install(TARGETS ${name} RUNTIME DESTINATION ${CMAKE_INSTALL_DOCDIR}/examples)
+
set_target_properties(${name} PROPERTIES FOLDER "Examples")
+
endif()
+
diff --git a/include/llvm/CMakeLists.txt b/include/llvm/CMakeLists.txt
+
index b46319f24fc8..2feabd1954e4 100644
+
--- a/include/llvm/CMakeLists.txt
+
+++ b/include/llvm/CMakeLists.txt
+
@@ -5,5 +5,5 @@ add_subdirectory(Frontend)
+
# If we're doing an out-of-tree build, copy a module map for generated
+
# header files into the build area.
+
if (NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+
- configure_file(module.modulemap.build module.modulemap COPYONLY)
+
+ configure_file(module.modulemap.build ${LLVM_INCLUDE_DIR}/module.modulemap COPYONLY)
+
endif (NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+
diff --git a/tools/llvm-config/BuildVariables.inc.in b/tools/llvm-config/BuildVariables.inc.in
+
index ebe5b73a5c65..70c497be12f5 100644
+
--- a/tools/llvm-config/BuildVariables.inc.in
+
+++ b/tools/llvm-config/BuildVariables.inc.in
+
@@ -23,6 +23,10 @@
+
#define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@"
+
#define LLVM_BUILDMODE "@LLVM_BUILDMODE@"
+
#define LLVM_LIBDIR_SUFFIX "@LLVM_LIBDIR_SUFFIX@"
+
+#define LLVM_INSTALL_BINDIR "@CMAKE_INSTALL_BINDIR@"
+
+#define LLVM_INSTALL_LIBDIR "@CMAKE_INSTALL_LIBDIR@"
+
+#define LLVM_INSTALL_INCLUDEDIR "@CMAKE_INSTALL_INCLUDEDIR@"
+
+#define LLVM_INSTALL_CMAKEDIR "@LLVM_INSTALL_CMAKE_DIR@"
+
#define LLVM_TARGETS_BUILT "@LLVM_TARGETS_BUILT@"
+
#define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@"
+
#define LLVM_BUILD_SYSTEM "@LLVM_BUILD_SYSTEM@"
+
diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
+
index 1a2f04552d13..44fa7d3eec6b 100644
+
--- a/tools/llvm-config/llvm-config.cpp
+
+++ b/tools/llvm-config/llvm-config.cpp
+
@@ -357,12 +357,26 @@ int main(int argc, char **argv) {
+
("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot + "/include");
+
} else {
+
ActivePrefix = CurrentExecPrefix;
+
- ActiveIncludeDir = ActivePrefix + "/include";
+
- SmallString<256> path(StringRef(LLVM_TOOLS_INSTALL_DIR));
+
- sys::fs::make_absolute(ActivePrefix, path);
+
- ActiveBinDir = std::string(path.str());
+
- ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
+
- ActiveCMakeDir = ActiveLibDir + "/cmake/llvm";
+
+ {
+
+ SmallString<256> path(StringRef(LLVM_INSTALL_INCLUDEDIR));
+
+ sys::fs::make_absolute(ActivePrefix, path);
+
+ ActiveIncludeDir = std::string(path.str());
+
+ }
+
+ {
+
+ SmallString<256> path(StringRef(LLVM_INSTALL_BINDIR));
+
+ sys::fs::make_absolute(ActivePrefix, path);
+
+ ActiveBinDir = std::string(path.str());
+
+ }
+
+ {
+
+ SmallString<256> path(StringRef(LLVM_INSTALL_LIBDIR LLVM_LIBDIR_SUFFIX));
+
+ sys::fs::make_absolute(ActivePrefix, path);
+
+ ActiveLibDir = std::string(path.str());
+
+ }
+
+ {
+
+ SmallString<256> path(StringRef(LLVM_INSTALL_CMAKEDIR));
+
+ sys::fs::make_absolute(ActivePrefix, path);
+
+ ActiveCMakeDir = std::string(path.str());
+
+ }
+
ActiveIncludeOption = "-I" + ActiveIncludeDir;
+
}
+
+
diff --git a/tools/lto/CMakeLists.txt b/tools/lto/CMakeLists.txt
+
index 2963f97cad88..69d66c9c9ca1 100644
+
--- a/tools/lto/CMakeLists.txt
+
+++ b/tools/lto/CMakeLists.txt
+
@@ -25,7 +25,7 @@ add_llvm_library(LTO SHARED INSTALL_WITH_TOOLCHAIN ${SOURCES} DEPENDS
+
intrinsics_gen)
+
+
install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/lto.h
+
- DESTINATION include/llvm-c
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/llvm-c
+
COMPONENT LTO)
+
+
if (APPLE)
+
diff --git a/tools/opt-viewer/CMakeLists.txt b/tools/opt-viewer/CMakeLists.txt
+
index ead73ec13a8f..250362021f17 100644
+
--- a/tools/opt-viewer/CMakeLists.txt
+
+++ b/tools/opt-viewer/CMakeLists.txt
+
@@ -8,7 +8,7 @@ set (files
+
+
foreach (file ${files})
+
install(PROGRAMS ${file}
+
- DESTINATION share/opt-viewer
+
+ DESTINATION ${CMAKE_INSTALL_DATADIR}/opt-viewer
+
COMPONENT opt-viewer)
+
endforeach (file)
+
+
diff --git a/tools/remarks-shlib/CMakeLists.txt b/tools/remarks-shlib/CMakeLists.txt
+
index 865436247270..ce1daa62f6ab 100644
+
--- a/tools/remarks-shlib/CMakeLists.txt
+
+++ b/tools/remarks-shlib/CMakeLists.txt
+
@@ -19,7 +19,7 @@ if(LLVM_ENABLE_PIC)
+
endif()
+
+
install(FILES ${LLVM_MAIN_INCLUDE_DIR}/llvm-c/Remarks.h
+
- DESTINATION include/llvm-c
+
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/llvm-c
+
COMPONENT Remarks)
+
+
if (APPLE)
+26
pkgs/development/compilers/llvm/git/llvm/outputs.patch
···
+
diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
+
index 94d426b..37f7794 100644
+
--- a/tools/llvm-config/llvm-config.cpp
+
+++ b/tools/llvm-config/llvm-config.cpp
+
@@ -333,6 +333,21 @@ int main(int argc, char **argv) {
+
ActiveIncludeOption = "-I" + ActiveIncludeDir;
+
}
+
+
+ /// Nix-specific multiple-output handling: override ActiveLibDir if --link-shared
+
+ if (!IsInDevelopmentTree) {
+
+ bool WantShared = true;
+
+ for (int i = 1; i < argc; ++i) {
+
+ StringRef Arg = argv[i];
+
+ if (Arg == "--link-shared")
+
+ WantShared = true;
+
+ else if (Arg == "--link-static")
+
+ WantShared = false; // the last one wins
+
+ }
+
+
+
+ if (WantShared)
+
+ ActiveLibDir = std::string("@lib@") + "/lib" + LLVM_LIBDIR_SUFFIX;
+
+ }
+
+
+
/// We only use `shared library` mode in cases where the static library form
+
/// of the components provided are not available; note however that this is
+
/// skipped if we're run from within the build dir. However, once installed,
+35
pkgs/development/compilers/llvm/git/openmp/default.nix
···
+
{ lib
+
, stdenv
+
, llvm_meta
+
, src
+
, cmake
+
, llvm
+
, perl
+
, version
+
}:
+
+
stdenv.mkDerivation rec {
+
pname = "openmp";
+
inherit version;
+
+
inherit src;
+
sourceRoot = "source/${pname}";
+
+
nativeBuildInputs = [ cmake perl ];
+
buildInputs = [ llvm ];
+
+
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 ];
+
};
+
}
+7
pkgs/top-level/aliases.nix
···
sddm
+
# LLVM packages for (integration) testing that should not be used inside Nixpkgs:
+
llvmPackages_git = recurseIntoAttrs (callPackage ../development/compilers/llvm/git {
+
inherit (stdenvAdapters) overrideCC;
+
buildLlvmTools = buildPackages.llvmPackages_git.tools;
+
targetLlvmLibraries = targetPackages.llvmPackages_git.libraries;
+
});
+
})