forked from NixOS/nixpkgs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ce35e61
commit 2c627d9
Showing
35 changed files
with
2,525 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
{ lib, runCommand, stdenv, llvm, lld, version }: | ||
|
||
let | ||
prefix = lib.optionalString (stdenv.hostPlatform != stdenv.targetPlatform) "${stdenv.targetPlatform.config}-"; | ||
in runCommand "llvm-binutils-${version}" { | ||
preferLocalBuild = true; | ||
passthru = { | ||
isLLVM = 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-ar $out/bin/${prefix}dlltool | ||
ln -s ${llvm}/bin/llvm-ar $out/bin/${prefix}ranlib | ||
ln -s ${llvm}/bin/llvm-cxxfilt $out/bin/${prefix}c++filt | ||
ln -s ${llvm}/bin/llvm-debuginfod $out/bin/${prefix}debuginfod | ||
ln -s ${llvm}/bin/llvm-debuginfod-find $out/bin/${prefix}debuginfod-find | ||
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-objcopy $out/bin/${prefix}strip | ||
ln -s ${llvm}/bin/llvm-objdump $out/bin/${prefix}objdump | ||
ln -s ${llvm}/bin/llvm-rc $out/bin/${prefix}windres | ||
ln -s ${llvm}/bin/llvm-readobj $out/bin/${prefix}readelf | ||
ln -s ${llvm}/bin/llvm-size $out/bin/${prefix}size | ||
ln -s ${llvm}/bin/llvm-strings $out/bin/${prefix}strings | ||
ln -s ${llvm}/bin/llvm-symbolizer $out/bin/${prefix}addr2line | ||
ln -s ${lld}/bin/lld $out/bin/${prefix}ld | ||
'' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
{ lib, stdenv, llvm_meta | ||
, monorepoSrc, runCommand | ||
, substituteAll, cmake, ninja, libxml2, libllvm, version, python3 | ||
, buildLlvmTools | ||
, fixDarwinDylibNames | ||
, enableManpages ? false | ||
}: | ||
|
||
let | ||
self = stdenv.mkDerivation (rec { | ||
pname = "clang"; | ||
inherit version; | ||
|
||
src = runCommand "${pname}-src-${version}" {} '' | ||
mkdir -p "$out" | ||
cp -r ${monorepoSrc}/cmake "$out" | ||
cp -r ${monorepoSrc}/${pname} "$out" | ||
cp -r ${monorepoSrc}/clang-tools-extra "$out" | ||
''; | ||
|
||
sourceRoot = "${src.name}/${pname}"; | ||
|
||
nativeBuildInputs = [ cmake ninja python3 ] | ||
++ lib.optional enableManpages python3.pkgs.sphinx | ||
++ lib.optional stdenv.hostPlatform.isDarwin fixDarwinDylibNames; | ||
|
||
buildInputs = [ libxml2 libllvm ]; | ||
|
||
cmakeFlags = [ | ||
"-DCLANG_INSTALL_PACKAGE_DIR=${placeholder "dev"}/lib/cmake/clang" | ||
"-DCLANGD_BUILD_XPC=OFF" | ||
"-DLLVM_ENABLE_RTTI=ON" | ||
] ++ lib.optionals enableManpages [ | ||
"-DCLANG_INCLUDE_DOCS=ON" | ||
"-DLLVM_ENABLE_SPHINX=ON" | ||
"-DSPHINX_OUTPUT_MAN=ON" | ||
"-DSPHINX_OUTPUT_HTML=OFF" | ||
"-DSPHINX_WARNINGS_AS_ERRORS=OFF" | ||
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ | ||
"-DLLVM_TABLEGEN_EXE=${buildLlvmTools.llvm}/bin/llvm-tblgen" | ||
"-DCLANG_TABLEGEN=${buildLlvmTools.libclang.dev}/bin/clang-tblgen" | ||
]; | ||
|
||
patches = [ | ||
./purity.patch | ||
# https://reviews.llvm.org/D51899 | ||
./gnu-install-dirs.patch | ||
../../common/clang/add-nostdlibinc-flag.patch | ||
# FIMXE: do we need this patch? | ||
# (substituteAll { | ||
# src = ../../clang-11-12-LLVMgold-path.patch; | ||
# libllvmLibdir = "${libllvm.lib}/lib"; | ||
# }) | ||
]; | ||
|
||
postPatch = '' | ||
(cd tools && ln -s ../../clang-tools-extra extra) | ||
'' + lib.optionalString stdenv.hostPlatform.isMusl '' | ||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp | ||
''; | ||
|
||
outputs = [ "out" "lib" "dev" "python" ]; | ||
|
||
postInstall = '' | ||
ln -sv $out/bin/clang $out/bin/cpp | ||
# Move libclang to 'lib' output | ||
moveToOutput "lib/libclang.*" "$lib" | ||
moveToOutput "lib/libclang-cpp.*" "$lib" | ||
substituteInPlace $dev/lib/cmake/clang/ClangTargets-release.cmake \ | ||
--replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." \ | ||
--replace "\''${_IMPORT_PREFIX}/lib/libclang-cpp." "$lib/lib/libclang-cpp." | ||
mkdir -p $python/bin $python/share/clang/ | ||
mv $out/bin/{git-clang-format,scan-view} $python/bin | ||
if [ -e $out/bin/set-xcode-analyzer ]; then | ||
mv $out/bin/set-xcode-analyzer $python/bin | ||
fi | ||
mv $out/share/clang/*.py $python/share/clang | ||
rm $out/bin/c-index-test | ||
patchShebangs $python/bin | ||
mkdir -p $dev/bin | ||
cp bin/clang-tblgen $dev/bin | ||
''; | ||
|
||
passthru = { | ||
inherit libllvm; | ||
isClang = true; | ||
hardeningUnsupportedFlags = [ "fortify3" ]; | ||
}; | ||
|
||
meta = llvm_meta // { | ||
homepage = "https://clang.llvm.org/"; | ||
description = "A C language family frontend for LLVM"; | ||
longDescription = '' | ||
The Clang project provides a language front-end and tooling | ||
infrastructure for languages in the C language family (C, C++, Objective | ||
C/C++, OpenCL, CUDA, and RenderScript) for the LLVM project. | ||
It aims to deliver amazingly fast compiles, extremely useful error and | ||
warning messages and to provide a platform for building great source | ||
level tools. The Clang Static Analyzer and clang-tidy are tools that | ||
automatically find bugs in your code, and are great examples of the sort | ||
of tools that can be built using the Clang frontend as a library to | ||
parse C/C++ code. | ||
''; | ||
mainProgram = "clang"; | ||
}; | ||
} // lib.optionalAttrs enableManpages { | ||
pname = "clang-manpages"; | ||
|
||
ninjaFlags = [ "docs-clang-man" ]; | ||
|
||
installPhase = '' | ||
mkdir -p $out/share/man/man1 | ||
# Manually install clang manpage | ||
cp docs/man/*.1 $out/share/man/man1/ | ||
''; | ||
|
||
outputs = [ "out" ]; | ||
|
||
doCheck = false; | ||
|
||
meta = llvm_meta // { | ||
description = "man page for Clang ${version}"; | ||
}; | ||
}); | ||
in self |
109 changes: 109 additions & 0 deletions
109
pkgs/development/compilers/llvm/16/clang/gnu-install-dirs.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
diff --git a/CMakeLists.txt b/CMakeLists.txt | ||
index 090cfa352078..624b7c9f3400 100644 | ||
--- a/CMakeLists.txt | ||
+++ b/CMakeLists.txt | ||
@@ -38,12 +38,26 @@ if(CLANG_BUILT_STANDALONE) | ||
find_package(LLVM REQUIRED HINTS "${LLVM_CMAKE_DIR}") | ||
list(APPEND CMAKE_MODULE_PATH "${LLVM_DIR}") | ||
|
||
- # Turn into CACHE PATHs for overwritting | ||
- set(LLVM_INCLUDE_DIRS ${LLVM_INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed") | ||
- set(LLVM_BINARY_DIR "${LLVM_BINARY_DIR}" CACHE PATH "Path to LLVM build tree") | ||
- set(LLVM_MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm" CACHE PATH "Path to LLVM source tree") | ||
- set(LLVM_TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin") | ||
- set(LLVM_LIBRARY_DIR "${LLVM_LIBRARY_DIR}" CACHE PATH "Path to llvm/lib") | ||
+ # We can't check LLVM_CONFIG here, because find_package(LLVM ...) also sets | ||
+ # LLVM_CONFIG. | ||
+ if (NOT LLVM_CONFIG_FOUND) | ||
+ # Pull values from LLVMConfig.cmake. We can drop this once the llvm-config | ||
+ # path is removed. | ||
+ set(INCLUDE_DIRS ${LLVM_INCLUDE_DIRS}) | ||
+ set(LLVM_OBJ_DIR "${LLVM_BINARY_DIR}") | ||
+ # N.B. this is just a default value, the CACHE PATHs below can be overriden. | ||
+ set(MAIN_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../llvm") | ||
+ set(TOOLS_BINARY_DIR "${LLVM_TOOLS_BINARY_DIR}") | ||
+ set(LIBRARY_DIR "${LLVM_LIBRARY_DIR}") | ||
+ else() | ||
+ set(INCLUDE_DIRS "${LLVM_BINARY_DIR}/include" "${MAIN_INCLUDE_DIR}") | ||
+ endif() | ||
+ | ||
+ set(LLVM_INCLUDE_DIRS ${INCLUDE_DIRS} CACHE PATH "Path to llvm/include and any other header dirs needed") | ||
+ set(LLVM_BINARY_DIR "${LLVM_OBJ_ROOT}" CACHE PATH "Path to LLVM build tree") | ||
+ set(LLVM_MAIN_SRC_DIR "${MAIN_SRC_DIR}" CACHE PATH "Path to LLVM source tree") | ||
+ set(LLVM_TOOLS_BINARY_DIR "${TOOLS_BINARY_DIR}" CACHE PATH "Path to llvm/bin") | ||
+ set(LLVM_LIBRARY_DIR "${LIBRARY_DIR}" CACHE PATH "Path to llvm/lib") | ||
|
||
find_program(LLVM_TABLEGEN_EXE "llvm-tblgen" ${LLVM_TOOLS_BINARY_DIR} | ||
NO_DEFAULT_PATH) | ||
diff --git a/cmake/modules/AddClang.cmake b/cmake/modules/AddClang.cmake | ||
index 75b0080f6715..c895b884cd27 100644 | ||
--- a/cmake/modules/AddClang.cmake | ||
+++ b/cmake/modules/AddClang.cmake | ||
@@ -119,8 +119,8 @@ 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} | ||
+ 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) | ||
diff --git a/lib/Headers/CMakeLists.txt b/lib/Headers/CMakeLists.txt | ||
index bb9a11eabbef..e2de91c65fbb 100644 | ||
--- a/lib/Headers/CMakeLists.txt | ||
+++ b/lib/Headers/CMakeLists.txt | ||
@@ -437,7 +437,7 @@ add_header_target("openmp-resource-headers" ${openmp_wrapper_files}) | ||
add_header_target("windows-resource-headers" ${windows_only_files}) | ||
add_header_target("utility-resource-headers" ${utility_files}) | ||
|
||
-set(header_install_dir lib${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include) | ||
+set(header_install_dir ${CMAKE_INSTALL_LIBDIR}${LLVM_LIBDIR_SUFFIX}/clang/${CLANG_VERSION_MAJOR}/include) | ||
|
||
############################################################# | ||
# Install rules for the catch-all clang-resource-headers target | ||
diff --git a/tools/libclang/CMakeLists.txt b/tools/libclang/CMakeLists.txt | ||
index 4f23065a2472..6a0f55991e24 100644 | ||
--- a/tools/libclang/CMakeLists.txt | ||
+++ b/tools/libclang/CMakeLists.txt | ||
@@ -234,7 +234,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-py/CMakeLists.txt b/tools/scan-build-py/CMakeLists.txt | ||
index 3aca22c0b0a8..3115353e3fe3 100644 | ||
--- a/tools/scan-build-py/CMakeLists.txt | ||
+++ b/tools/scan-build-py/CMakeLists.txt | ||
@@ -88,7 +88,7 @@ foreach(lib ${LibScanbuild}) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib}) | ||
install(FILES lib/libscanbuild/${lib} | ||
- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libscanbuild | ||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild" | ||
COMPONENT scan-build-py) | ||
endforeach() | ||
|
||
@@ -106,7 +106,7 @@ foreach(resource ${LibScanbuildResources}) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource}) | ||
install(FILES lib/libscanbuild/resources/${resource} | ||
- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libscanbuild/resources | ||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libscanbuild/resources" | ||
COMPONENT scan-build-py) | ||
endforeach() | ||
|
||
@@ -122,7 +122,7 @@ foreach(lib ${LibEar}) | ||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib}) | ||
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib}) | ||
install(FILES lib/libear/${lib} | ||
- DESTINATION lib${CLANG_LIBDIR_SUFFIX}/libear | ||
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/libear" | ||
COMPONENT scan-build-py) | ||
endforeach() | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
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,13 +487,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, | ||
} else { | ||
if (Args.hasArg(options::OPT_rdynamic)) | ||
CmdArgs.push_back("-export-dynamic"); | ||
|
||
- if (!Args.hasArg(options::OPT_shared) && !IsStaticPIE && | ||
- !Args.hasArg(options::OPT_r)) { | ||
- CmdArgs.push_back("-dynamic-linker"); | ||
- CmdArgs.push_back(Args.MakeArgString(Twine(D.DyldPrefix) + | ||
- ToolChain.getDynamicLinker(Args))); | ||
- } | ||
} | ||
|
||
CmdArgs.push_back("-o"); | ||
-- | ||
2.11.0 |
21 changes: 21 additions & 0 deletions
21
pkgs/development/compilers/llvm/16/compiler-rt/X86-support-extension.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
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 | ||
@@ -348,4 +348,8 @@ if (NOT MSVC) | ||
|
||
+ set(i486_SOURCES ${i386_SOURCES}) | ||
+ set(i586_SOURCES ${i386_SOURCES}) | ||
+ set(i686_SOURCES ${i386_SOURCES}) | ||
+ | ||
if (WIN32) | ||
set(i386_SOURCES | ||
${i386_SOURCES} | ||
@@ -723,6 +723,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)$") |
Oops, something went wrong.