Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)

llvm7: init at 7.0.0rc3

Copy of 6 + updated hashes

+1260
+106
pkgs/development/compilers/llvm/7/clang/default.nix
···
··· 1 + { stdenv, fetch, cmake, libxml2, llvm, version, clang-tools-extra_src, python 2 + , fixDarwinDylibNames 3 + , enableManpages ? false 4 + }: 5 + 6 + let 7 + gcc = if stdenv.cc.isGNU then stdenv.cc.cc else stdenv.cc.cc.gcc; 8 + self = stdenv.mkDerivation ({ 9 + name = "clang-${version}"; 10 + 11 + unpackPhase = '' 12 + unpackFile ${fetch "cfe" "18aapi26lp25g38j1kwmzviagy9l59ach5kzvf80x5dvs2rmhcpc"} 13 + mv cfe-${version}* clang 14 + sourceRoot=$PWD/clang 15 + unpackFile ${clang-tools-extra_src} 16 + mv clang-tools-extra-* $sourceRoot/tools/extra 17 + ''; 18 + 19 + nativeBuildInputs = [ cmake python ] 20 + ++ stdenv.lib.optional enableManpages python.pkgs.sphinx; 21 + 22 + buildInputs = [ libxml2 llvm ] 23 + ++ stdenv.lib.optional stdenv.isDarwin fixDarwinDylibNames; 24 + 25 + cmakeFlags = [ 26 + "-DCMAKE_CXX_FLAGS=-std=c++11" 27 + ] ++ stdenv.lib.optionals enableManpages [ 28 + "-DCLANG_INCLUDE_DOCS=ON" 29 + "-DLLVM_ENABLE_SPHINX=ON" 30 + "-DSPHINX_OUTPUT_MAN=ON" 31 + "-DSPHINX_OUTPUT_HTML=OFF" 32 + "-DSPHINX_WARNINGS_AS_ERRORS=OFF" 33 + ]; 34 + 35 + patches = [ ./purity.patch ]; 36 + 37 + postPatch = '' 38 + sed -i -e 's/DriverArgs.hasArg(options::OPT_nostdlibinc)/true/' \ 39 + -e 's/Args.hasArg(options::OPT_nostdlibinc)/true/' \ 40 + lib/Driver/ToolChains/*.cpp 41 + 42 + # Patch for standalone doc building 43 + sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt 44 + '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' 45 + sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp 46 + ''; 47 + 48 + outputs = [ "out" "lib" "python" ]; 49 + 50 + # Clang expects to find LLVMgold in its own prefix 51 + postInstall = '' 52 + if [ -e ${llvm}/lib/LLVMgold.so ]; then 53 + ln -sv ${llvm}/lib/LLVMgold.so $out/lib 54 + fi 55 + 56 + ln -sv $out/bin/clang $out/bin/cpp 57 + 58 + # Move libclang to 'lib' output 59 + moveToOutput "lib/libclang.*" "$lib" 60 + substituteInPlace $out/lib/cmake/clang/ClangTargets-release.cmake \ 61 + --replace "\''${_IMPORT_PREFIX}/lib/libclang." "$lib/lib/libclang." 62 + 63 + mkdir -p $python/bin $python/share/clang/ 64 + mv $out/bin/{git-clang-format,scan-view} $python/bin 65 + if [ -e $out/bin/set-xcode-analyzer ]; then 66 + mv $out/bin/set-xcode-analyzer $python/bin 67 + fi 68 + mv $out/share/clang/*.py $python/share/clang 69 + rm $out/bin/c-index-test 70 + ''; 71 + 72 + enableParallelBuilding = true; 73 + 74 + passthru = { 75 + isClang = true; 76 + inherit llvm; 77 + } // stdenv.lib.optionalAttrs stdenv.targetPlatform.isLinux { 78 + inherit gcc; 79 + }; 80 + 81 + meta = { 82 + description = "A c, c++, objective-c, and objective-c++ frontend for the llvm compiler"; 83 + homepage = http://llvm.org/; 84 + license = stdenv.lib.licenses.ncsa; 85 + platforms = stdenv.lib.platforms.all; 86 + }; 87 + } // stdenv.lib.optionalAttrs enableManpages { 88 + name = "clang-manpages-${version}"; 89 + 90 + buildPhase = '' 91 + make docs-clang-man 92 + ''; 93 + 94 + installPhase = '' 95 + mkdir -p $out/share/man/man1 96 + # Manually install clang manpage 97 + cp docs/man/*.1 $out/share/man/man1/ 98 + ''; 99 + 100 + outputs = [ "out" ]; 101 + 102 + doCheck = false; 103 + 104 + meta.description = "man page for Clang ${version}"; 105 + }); 106 + in self
+30
pkgs/development/compilers/llvm/7/clang/purity.patch
···
··· 1 + From 4add81bba40dcec62c4ea4481be8e35ac53e89d8 Mon Sep 17 00:00:00 2001 2 + From: Will Dietz <w@wdtz.org> 3 + Date: Thu, 18 May 2017 11:56:12 -0500 4 + Subject: [PATCH] "purity" patch for 5.0 5 + 6 + --- 7 + lib/Driver/ToolChains/Gnu.cpp | 7 ------- 8 + 1 file changed, 7 deletions(-) 9 + 10 + diff --git a/lib/Driver/ToolChains/Gnu.cpp b/lib/Driver/ToolChains/Gnu.cpp 11 + index fe3c0191bb..c6a482bece 100644 12 + --- a/lib/Driver/ToolChains/Gnu.cpp 13 + +++ b/lib/Driver/ToolChains/Gnu.cpp 14 + @@ -494,13 +494,6 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA, 15 + if (!Args.hasArg(options::OPT_static)) { 16 + if (Args.hasArg(options::OPT_rdynamic)) 17 + CmdArgs.push_back("-export-dynamic"); 18 + - 19 + - if (!Args.hasArg(options::OPT_shared)) { 20 + - const std::string Loader = 21 + - D.DyldPrefix + ToolChain.getDynamicLinker(Args); 22 + - CmdArgs.push_back("-dynamic-linker"); 23 + - CmdArgs.push_back(Args.MakeArgString(Loader)); 24 + - } 25 + } 26 + 27 + CmdArgs.push_back("-o"); 28 + -- 29 + 2.11.0 30 +
+155
pkgs/development/compilers/llvm/7/compiler-rt-codesign.patch
···
··· 1 + From 3dec5f3475a26aeb4678627795c4b67c6b7b4785 Mon Sep 17 00:00:00 2001 2 + From: Will Dietz <w@wdtz.org> 3 + Date: Tue, 19 Sep 2017 13:13:06 -0500 4 + Subject: [PATCH] remove codesign use on Apple, disable ios sim testing that 5 + needs it 6 + 7 + --- 8 + cmake/Modules/AddCompilerRT.cmake | 8 ------ 9 + test/asan/CMakeLists.txt | 52 --------------------------------------- 10 + test/tsan/CMakeLists.txt | 47 ----------------------------------- 11 + 3 files changed, 107 deletions(-) 12 + 13 + diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake 14 + index bc5fb9ff7..b64eb4246 100644 15 + --- a/cmake/Modules/AddCompilerRT.cmake 16 + +++ b/cmake/Modules/AddCompilerRT.cmake 17 + @@ -210,14 +210,6 @@ function(add_compiler_rt_runtime name type) 18 + set_target_properties(${libname} PROPERTIES IMPORT_PREFIX "") 19 + set_target_properties(${libname} PROPERTIES IMPORT_SUFFIX ".lib") 20 + endif() 21 + - if(APPLE) 22 + - # Ad-hoc sign the dylibs 23 + - add_custom_command(TARGET ${libname} 24 + - POST_BUILD 25 + - COMMAND codesign --sign - $<TARGET_FILE:${libname}> 26 + - WORKING_DIRECTORY ${COMPILER_RT_LIBRARY_OUTPUT_DIR} 27 + - ) 28 + - endif() 29 + endif() 30 + install(TARGETS ${libname} 31 + ARCHIVE DESTINATION ${COMPILER_RT_LIBRARY_INSTALL_DIR} 32 + diff --git a/test/asan/CMakeLists.txt b/test/asan/CMakeLists.txt 33 + index 8bfc15b5c..f23d0f71a 100644 34 + --- a/test/asan/CMakeLists.txt 35 + +++ b/test/asan/CMakeLists.txt 36 + @@ -83,58 +83,6 @@ foreach(arch ${ASAN_TEST_ARCH}) 37 + endif() 38 + endforeach() 39 + 40 + -# iOS and iOS simulator test suites 41 + -# These are not added into "check-all", in order to run these tests, use 42 + -# "check-asan-iossim-x86_64" and similar. They also require that an extra env 43 + -# variable to select which iOS device or simulator to use, e.g.: 44 + -# SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER="iPhone 6" 45 + -if(APPLE) 46 + - set(EXCLUDE_FROM_ALL ON) 47 + - 48 + - set(ASAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER}) 49 + - set(ASAN_TEST_IOS "1") 50 + - pythonize_bool(ASAN_TEST_IOS) 51 + - set(ASAN_TEST_DYNAMIC True) 52 + - 53 + - foreach(arch ${DARWIN_iossim_ARCHS}) 54 + - set(ASAN_TEST_IOSSIM "1") 55 + - pythonize_bool(ASAN_TEST_IOSSIM) 56 + - set(ASAN_TEST_TARGET_ARCH ${arch}) 57 + - set(ASAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_iossim_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}") 58 + - set(ASAN_TEST_CONFIG_SUFFIX "-${arch}-iossim") 59 + - get_bits_for_arch(${arch} ASAN_TEST_BITS) 60 + - string(TOUPPER ${arch} ARCH_UPPER_CASE) 61 + - set(CONFIG_NAME "IOSSim${ARCH_UPPER_CASE}Config") 62 + - configure_lit_site_cfg( 63 + - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in 64 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg 65 + - ) 66 + - add_lit_testsuite(check-asan-iossim-${arch} "AddressSanitizer iOS Simulator ${arch} tests" 67 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/ 68 + - DEPENDS ${ASAN_TEST_DEPS}) 69 + - endforeach() 70 + - 71 + - foreach (arch ${DARWIN_ios_ARCHS}) 72 + - set(ASAN_TEST_IOSSIM "0") 73 + - pythonize_bool(ASAN_TEST_IOSSIM) 74 + - set(ASAN_TEST_TARGET_ARCH ${arch}) 75 + - set(ASAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_ios_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}") 76 + - set(ASAN_TEST_CONFIG_SUFFIX "-${arch}-ios") 77 + - get_bits_for_arch(${arch} ASAN_TEST_BITS) 78 + - string(TOUPPER ${arch} ARCH_UPPER_CASE) 79 + - set(CONFIG_NAME "IOS${ARCH_UPPER_CASE}Config") 80 + - configure_lit_site_cfg( 81 + - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in 82 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg 83 + - ) 84 + - add_lit_testsuite(check-asan-ios-${arch} "AddressSanitizer iOS ${arch} tests" 85 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/ 86 + - DEPENDS ${ASAN_TEST_DEPS}) 87 + - endforeach() 88 + - 89 + - set(EXCLUDE_FROM_ALL OFF) 90 + -endif() 91 + - 92 + # Add unit tests. 93 + if(COMPILER_RT_INCLUDE_TESTS) 94 + set(ASAN_TEST_DYNAMIC False) 95 + diff --git a/test/tsan/CMakeLists.txt b/test/tsan/CMakeLists.txt 96 + index a68908612..cde0accb5 100644 97 + --- a/test/tsan/CMakeLists.txt 98 + +++ b/test/tsan/CMakeLists.txt 99 + @@ -42,53 +42,6 @@ foreach(arch ${TSAN_TEST_ARCH}) 100 + list(APPEND TSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}) 101 + endforeach() 102 + 103 + -# iOS and iOS simulator test suites 104 + -# These are not added into "check-all", in order to run these tests, use 105 + -# "check-tsan-iossim-x86_64" and similar. They also require an extra environment 106 + -# variable to select which iOS device or simulator to use, e.g.: 107 + -# SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER="iPhone 6" 108 + -if(APPLE) 109 + - set(EXCLUDE_FROM_ALL ON) 110 + - 111 + - set(TSAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER}) 112 + - set(TSAN_TEST_IOS "1") 113 + - pythonize_bool(TSAN_TEST_IOS) 114 + - 115 + - set(arch "x86_64") 116 + - set(TSAN_TEST_IOSSIM "1") 117 + - pythonize_bool(TSAN_TEST_IOSSIM) 118 + - set(TSAN_TEST_TARGET_ARCH ${arch}) 119 + - set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_iossim_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}") 120 + - set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-iossim") 121 + - string(TOUPPER ${arch} ARCH_UPPER_CASE) 122 + - set(CONFIG_NAME "IOSSim${ARCH_UPPER_CASE}Config") 123 + - configure_lit_site_cfg( 124 + - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in 125 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg 126 + - ) 127 + - add_lit_testsuite(check-tsan-iossim-${arch} "ThreadSanitizer iOS Simulator ${arch} tests" 128 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/ 129 + - DEPENDS ${TSAN_TEST_DEPS}) 130 + - 131 + - set(arch "arm64") 132 + - set(TSAN_TEST_IOSSIM "0") 133 + - pythonize_bool(TSAN_TEST_IOSSIM) 134 + - set(TSAN_TEST_TARGET_ARCH ${arch}) 135 + - set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_ios_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}") 136 + - set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-ios") 137 + - string(TOUPPER ${arch} ARCH_UPPER_CASE) 138 + - set(CONFIG_NAME "IOS${ARCH_UPPER_CASE}Config") 139 + - configure_lit_site_cfg( 140 + - ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in 141 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg 142 + - ) 143 + - add_lit_testsuite(check-tsan-ios-${arch} "ThreadSanitizer iOS Simulator ${arch} tests" 144 + - ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/ 145 + - DEPENDS ${TSAN_TEST_DEPS}) 146 + - 147 + - set(EXCLUDE_FROM_ALL OFF) 148 + -endif() 149 + - 150 + if(COMPILER_RT_INCLUDE_TESTS) 151 + configure_lit_site_cfg( 152 + ${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in 153 + -- 154 + 2.14.1 155 +
+37
pkgs/development/compilers/llvm/7/compiler-rt.nix
···
··· 1 + { stdenv, version, fetch, cmake, python, llvm, libcxxabi }: 2 + with stdenv.lib; 3 + stdenv.mkDerivation rec { 4 + name = "compiler-rt-${version}"; 5 + inherit version; 6 + src = fetch "compiler-rt" "0r4hg8hi60kdjl4arp3s51dbwbwz11s8qvccdkx9v52vc27p2241"; 7 + 8 + nativeBuildInputs = [ cmake python llvm ]; 9 + buildInputs = stdenv.lib.optional stdenv.hostPlatform.isDarwin libcxxabi; 10 + 11 + configureFlags = [ 12 + "-DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON" 13 + ]; 14 + 15 + outputs = [ "out" "dev" ]; 16 + 17 + patches = [ 18 + ./compiler-rt-codesign.patch # Revert compiler-rt commit that makes codesign mandatory 19 + ] ++ optional stdenv.hostPlatform.isMusl ./sanitizers-nongnu.patch; 20 + 21 + # TSAN requires XPC on Darwin, which we have no public/free source files for. We can depend on the Apple frameworks 22 + # to get it, but they're unfree. Since LLVM is rather central to the stdenv, we patch out TSAN support so that Hydra 23 + # can build this. If we didn't do it, basically the entire nixpkgs on Darwin would have an unfree dependency and we'd 24 + # get no binary cache for the entire platform. If you really find yourself wanting the TSAN, make this controllable by 25 + # a flag and turn the flag off during the stdenv build. 26 + postPatch = stdenv.lib.optionalString stdenv.isDarwin '' 27 + substituteInPlace cmake/config-ix.cmake \ 28 + --replace 'set(COMPILER_RT_HAS_TSAN TRUE)' 'set(COMPILER_RT_HAS_TSAN FALSE)' 29 + ''; 30 + 31 + # Hack around weird upsream RPATH bug 32 + postInstall = stdenv.lib.optionalString stdenv.isDarwin '' 33 + ln -s "$out/lib"/*/* "$out/lib" 34 + ''; 35 + 36 + enableParallelBuilding = true; 37 + }
+93
pkgs/development/compilers/llvm/7/default.nix
···
··· 1 + { lowPrio, newScope, pkgs, stdenv, cmake, libstdcxxHook 2 + , libxml2, python, isl, fetchurl, overrideCC, wrapCCWith 3 + , buildLlvmTools # tools, but from the previous stage, for cross 4 + , targetLlvmLibraries # libraries, but from the next stage, for cross 5 + }: 6 + 7 + let 8 + release_version = "7.0.0"; 9 + version = release_version + "rc3"; # differentiating these is important for rc's 10 + 11 + fetch = name: sha256: fetchurl { 12 + name = "${name}-${release_version}.src.tar.xz"; 13 + url = "http://prereleases.llvm.org/${release_version}/rc3/${name}-${version}.src.tar.xz"; 14 + inherit sha256; 15 + }; 16 + 17 + clang-tools-extra_src = fetch "clang-tools-extra" "0rhvlz4g2nd10zrwx37yi5if8wqirh8845pwbgg62r9l2pb6j7n7"; 18 + 19 + tools = stdenv.lib.makeExtensible (tools: let 20 + callPackage = newScope (tools // { inherit stdenv cmake libxml2 python isl release_version version fetch; }); 21 + mkExtraBuildCommands = cc: '' 22 + rsrc="$out/resource-root" 23 + mkdir "$rsrc" 24 + ln -s "${cc}/lib/clang/${release_version}/include" "$rsrc" 25 + ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" 26 + echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 27 + '' + stdenv.lib.optionalString stdenv.targetPlatform.isLinux '' 28 + echo "--gcc-toolchain=${tools.clang-unwrapped.gcc}" >> $out/nix-support/cc-cflags 29 + ''; 30 + in { 31 + 32 + llvm = callPackage ./llvm.nix { }; 33 + 34 + clang-unwrapped = callPackage ./clang { 35 + inherit clang-tools-extra_src; 36 + }; 37 + 38 + llvm-manpages = lowPrio (tools.llvm.override { 39 + enableManpages = true; 40 + python = pkgs.python; # don't use python-boot 41 + }); 42 + 43 + clang-manpages = lowPrio (tools.clang-unwrapped.override { 44 + enableManpages = true; 45 + python = pkgs.python; # don't use python-boot 46 + }); 47 + 48 + libclang = tools.clang-unwrapped.lib; 49 + 50 + clang = if stdenv.cc.isGNU then tools.libstdcxxClang else tools.libcxxClang; 51 + 52 + libstdcxxClang = wrapCCWith rec { 53 + cc = tools.clang-unwrapped; 54 + extraPackages = [ 55 + libstdcxxHook 56 + targetLlvmLibraries.compiler-rt 57 + ]; 58 + extraBuildCommands = mkExtraBuildCommands cc; 59 + }; 60 + 61 + libcxxClang = wrapCCWith rec { 62 + cc = tools.clang-unwrapped; 63 + extraPackages = [ 64 + targetLlvmLibraries.libcxx 65 + targetLlvmLibraries.libcxxabi 66 + targetLlvmLibraries.compiler-rt 67 + ]; 68 + extraBuildCommands = mkExtraBuildCommands cc; 69 + }; 70 + 71 + lld = callPackage ./lld.nix {}; 72 + 73 + lldb = callPackage ./lldb.nix {}; 74 + }); 75 + 76 + libraries = stdenv.lib.makeExtensible (libraries: let 77 + callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python isl release_version version fetch; }); 78 + in { 79 + 80 + compiler-rt = callPackage ./compiler-rt.nix {}; 81 + 82 + stdenv = overrideCC stdenv buildLlvmTools.clang; 83 + 84 + libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang; 85 + 86 + libcxx = callPackage ./libc++ {}; 87 + 88 + libcxxabi = callPackage ./libc++abi.nix {}; 89 + 90 + openmp = callPackage ./openmp.nix {}; 91 + }); 92 + 93 + in { inherit tools libraries; } // libraries // tools
+54
pkgs/development/compilers/llvm/7/libc++/default.nix
···
··· 1 + { lib, stdenv, fetch, cmake, python, libcxxabi, fixDarwinDylibNames, version }: 2 + 3 + stdenv.mkDerivation rec { 4 + name = "libc++-${version}"; 5 + 6 + src = fetch "libcxx" "1ylw8sdiy7b9siajm88frw95y8ii1kng3xbsqhn8nmhy0yxwd1p5"; 7 + 8 + postUnpack = '' 9 + unpackFile ${libcxxabi.src} 10 + export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include" 11 + ''; 12 + 13 + # on next rebuild, this can be replaced with optionals; for now set to null to avoid 14 + # patches = stdenv.lib.optionals stdenv.hostPlatform.isMusl [ 15 + patches = if stdenv.hostPlatform.isMusl then [ 16 + ../../libcxx-0001-musl-hacks.patch 17 + ] else null; 18 + 19 + prePatch = '' 20 + substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++" 21 + ''; 22 + 23 + preConfigure = '' 24 + # Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package 25 + cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR") 26 + '' + lib.optionalString stdenv.hostPlatform.isMusl '' 27 + patchShebangs utils/cat_files.py 28 + ''; 29 + nativeBuildInputs = [ cmake ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl python; 30 + 31 + buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames; 32 + 33 + cmakeFlags = [ 34 + "-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib" 35 + "-DLIBCXX_LIBCPPABI_VERSION=2" 36 + "-DLIBCXX_CXX_ABI=libcxxabi" 37 + ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl "-DLIBCXX_HAS_MUSL_LIBC=1"; 38 + 39 + enableParallelBuilding = true; 40 + 41 + linkCxxAbi = stdenv.isLinux; 42 + 43 + setupHooks = [ 44 + ../../../../../build-support/setup-hooks/role.bash 45 + ./setup-hook.sh 46 + ]; 47 + 48 + meta = { 49 + homepage = http://libcxx.llvm.org/; 50 + description = "A new implementation of the C++ standard library, targeting C++11"; 51 + license = with stdenv.lib.licenses; [ ncsa mit ]; 52 + platforms = stdenv.lib.platforms.unix; 53 + }; 54 + }
+6
pkgs/development/compilers/llvm/7/libc++/setup-hook.sh
···
··· 1 + # See pkgs/build-support/setup-hooks/role.bash 2 + getHostRole 3 + 4 + linkCxxAbi="@linkCxxAbi@" 5 + export NIX_${role_pre}CXXSTDLIB_COMPILE+=" -isystem @out@/include/c++/v1" 6 + export NIX_${role_pre}CXXSTDLIB_LINK=" -stdlib=libc++${linkCxxAbi:+" -lc++abi"}"
+49
pkgs/development/compilers/llvm/7/libc++abi.nix
···
··· 1 + { stdenv, cmake, fetch, libcxx, libunwind, llvm, version }: 2 + 3 + stdenv.mkDerivation { 4 + name = "libc++abi-${version}"; 5 + 6 + src = fetch "libcxxabi" "1ry0v4sd91gg06kqkhqcnbwbd5v1yknbpm0gj39lq8y3d7lwn7np"; 7 + 8 + nativeBuildInputs = [ cmake ]; 9 + buildInputs = stdenv.lib.optional (!stdenv.isDarwin && !stdenv.isFreeBSD) libunwind; 10 + 11 + postUnpack = '' 12 + unpackFile ${libcxx.src} 13 + unpackFile ${llvm.src} 14 + export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)" 15 + '' + stdenv.lib.optionalString stdenv.isDarwin '' 16 + export TRIPLE=x86_64-apple-darwin 17 + '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' 18 + patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch} 19 + ''; 20 + 21 + installPhase = if stdenv.isDarwin 22 + then '' 23 + for file in lib/*.dylib; do 24 + # this should be done in CMake, but having trouble figuring out 25 + # the magic combination of necessary CMake variables 26 + # if you fancy a try, take a look at 27 + # http://www.cmake.org/Wiki/CMake_RPATH_handling 28 + install_name_tool -id $out/$file $file 29 + done 30 + make install 31 + install -d 755 $out/include 32 + install -m 644 ../include/*.h $out/include 33 + '' 34 + else '' 35 + install -d -m 755 $out/include $out/lib 36 + install -m 644 lib/libc++abi.so.1.0 $out/lib 37 + install -m 644 ../include/cxxabi.h $out/include 38 + ln -s libc++abi.so.1.0 $out/lib/libc++abi.so 39 + ln -s libc++abi.so.1.0 $out/lib/libc++abi.so.1 40 + ''; 41 + 42 + meta = { 43 + homepage = http://libcxxabi.llvm.org/; 44 + description = "A new implementation of low level support for a standard C++ library"; 45 + license = with stdenv.lib.licenses; [ ncsa mit ]; 46 + maintainers = with stdenv.lib.maintainers; [ vlstill ]; 47 + platforms = stdenv.lib.platforms.unix; 48 + }; 49 + }
+32
pkgs/development/compilers/llvm/7/lld.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , cmake 4 + , libxml2 5 + , llvm 6 + , version 7 + }: 8 + 9 + stdenv.mkDerivation { 10 + name = "lld-${version}"; 11 + 12 + src = fetch "lld" "10p8yqikpsx1hvs524dj6fk7hg267bhs6860xngk33130s9s05id"; 13 + 14 + nativeBuildInputs = [ cmake ]; 15 + buildInputs = [ llvm libxml2 ]; 16 + 17 + outputs = [ "out" "dev" ]; 18 + 19 + enableParallelBuilding = true; 20 + 21 + postInstall = '' 22 + moveToOutput include "$dev" 23 + moveToOutput lib "$dev" 24 + ''; 25 + 26 + meta = { 27 + description = "The LLVM Linker"; 28 + homepage = http://lld.llvm.org/; 29 + license = stdenv.lib.licenses.ncsa; 30 + platforms = stdenv.lib.platforms.all; 31 + }; 32 + }
+56
pkgs/development/compilers/llvm/7/lldb.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , cmake 4 + , zlib 5 + , ncurses 6 + , swig 7 + , which 8 + , libedit 9 + , libxml2 10 + , llvm 11 + , clang-unwrapped 12 + , python 13 + , version 14 + , darwin 15 + }: 16 + 17 + stdenv.mkDerivation { 18 + name = "lldb-${version}"; 19 + 20 + src = fetch "lldb" "1s2jiaq85nzbab3nj4msfw3zxkdwinq71p1d7h70z26q3caddngp"; 21 + 22 + postPatch = '' 23 + # Fix up various paths that assume llvm and clang are installed in the same place 24 + sed -i 's,".*ClangConfig.cmake","${clang-unwrapped}/lib/cmake/clang/ClangConfig.cmake",' \ 25 + cmake/modules/LLDBStandalone.cmake 26 + sed -i 's,".*tools/clang/include","${clang-unwrapped}/include",' \ 27 + cmake/modules/LLDBStandalone.cmake 28 + sed -i 's,"$.LLVM_LIBRARY_DIR.",${llvm}/lib ${clang-unwrapped}/lib,' \ 29 + cmake/modules/LLDBStandalone.cmake 30 + ''; 31 + 32 + nativeBuildInputs = [ cmake python which swig ]; 33 + buildInputs = [ ncurses zlib libedit libxml2 llvm ] 34 + ++ stdenv.lib.optionals stdenv.isDarwin [ darwin.libobjc darwin.apple_sdk.libs.xpc darwin.apple_sdk.frameworks.Foundation darwin.bootstrap_cmds darwin.apple_sdk.frameworks.Carbon darwin.apple_sdk.frameworks.Cocoa ]; 35 + 36 + CXXFLAGS = "-fno-rtti"; 37 + hardeningDisable = [ "format" ]; 38 + 39 + cmakeFlags = [ 40 + "-DLLDB_CODESIGN_IDENTITY=" # codesigning makes nondeterministic 41 + ]; 42 + 43 + enableParallelBuilding = true; 44 + 45 + postInstall = '' 46 + mkdir -p $out/share/man/man1 47 + cp ../docs/lldb.1 $out/share/man/man1/ 48 + ''; 49 + 50 + meta = with stdenv.lib; { 51 + description = "A next-generation high-performance debugger"; 52 + homepage = http://llvm.org/; 53 + license = licenses.ncsa; 54 + platforms = platforms.all; 55 + }; 56 + }
+26
pkgs/development/compilers/llvm/7/llvm-outputs.patch
···
··· 1 + diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp 2 + index 94d426b..37f7794 100644 3 + --- a/tools/llvm-config/llvm-config.cpp 4 + +++ b/tools/llvm-config/llvm-config.cpp 5 + @@ -333,6 +333,21 @@ int main(int argc, char **argv) { 6 + ActiveIncludeOption = "-I" + ActiveIncludeDir; 7 + } 8 + 9 + + /// Nix-specific multiple-output handling: override ActiveLibDir if --link-shared 10 + + if (!IsInDevelopmentTree) { 11 + + bool WantShared = true; 12 + + for (int i = 1; i < argc; ++i) { 13 + + StringRef Arg = argv[i]; 14 + + if (Arg == "--link-shared") 15 + + WantShared = true; 16 + + else if (Arg == "--link-static") 17 + + WantShared = false; // the last one wins 18 + + } 19 + + 20 + + if (WantShared) 21 + + ActiveLibDir = std::string("@lib@") + "/lib" + LLVM_LIBDIR_SUFFIX; 22 + + } 23 + + 24 + /// We only use `shared library` mode in cases where the static library form 25 + /// of the components provided are not available; note however that this is 26 + /// skipped if we're run from within the build dir. However, once installed,
+166
pkgs/development/compilers/llvm/7/llvm.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , cmake 4 + , python 5 + , libffi 6 + , libbfd 7 + , libxml2 8 + , ncurses 9 + , version 10 + , release_version 11 + , zlib 12 + , debugVersion ? false 13 + , enableManpages ? false 14 + , enableSharedLibraries ? true 15 + , enableWasm ? true 16 + }: 17 + 18 + let 19 + src = fetch "llvm" "0r28srr8i0qcx8csblzg1g59wv4q8qc9c9msdm2xfsfggj2sknqa"; 20 + 21 + # Used when creating a version-suffixed symlink of libLLVM.dylib 22 + shortVersion = with stdenv.lib; 23 + concatStringsSep "." (take 2 (splitString "." release_version)); 24 + in stdenv.mkDerivation (rec { 25 + name = "llvm-${version}"; 26 + 27 + unpackPhase = '' 28 + unpackFile ${src} 29 + mv llvm-${version}* llvm 30 + sourceRoot=$PWD/llvm 31 + ''; 32 + 33 + outputs = [ "out" "python" ] 34 + ++ stdenv.lib.optional enableSharedLibraries "lib"; 35 + 36 + nativeBuildInputs = [ cmake python ] 37 + ++ stdenv.lib.optional enableManpages python.pkgs.sphinx; 38 + 39 + buildInputs = [ libxml2 libffi ]; 40 + 41 + propagatedBuildInputs = [ ncurses zlib ]; 42 + 43 + postPatch = stdenv.lib.optionalString stdenv.isDarwin '' 44 + substituteInPlace cmake/modules/AddLLVM.cmake \ 45 + --replace 'set(_install_name_dir INSTALL_NAME_DIR "@rpath")' "set(_install_name_dir INSTALL_NAME_DIR "$lib/lib")" \ 46 + --replace 'set(_install_rpath "@loader_path/../lib" ''${extra_libdir})' "" 47 + '' 48 + # Patch llvm-config to return correct library path based on --link-{shared,static}. 49 + + stdenv.lib.optionalString (enableSharedLibraries) '' 50 + substitute '${./llvm-outputs.patch}' ./llvm-outputs.patch --subst-var lib 51 + patch -p1 < ./llvm-outputs.patch 52 + '' + '' 53 + # FileSystem permissions tests fail with various special bits 54 + substituteInPlace unittests/Support/CMakeLists.txt \ 55 + --replace "Path.cpp" "" 56 + rm unittests/Support/Path.cpp 57 + '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' 58 + patch -p1 -i ${../TLI-musl.patch} 59 + substituteInPlace unittests/Support/CMakeLists.txt \ 60 + --replace "add_subdirectory(DynamicLibrary)" "" 61 + rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp 62 + ''; 63 + 64 + # hacky fix: created binaries need to be run before installation 65 + preBuild = '' 66 + mkdir -p $out/ 67 + ln -sv $PWD/lib $out 68 + ''; 69 + 70 + cmakeFlags = with stdenv; [ 71 + "-DCMAKE_BUILD_TYPE=${if debugVersion then "Debug" else "Release"}" 72 + "-DLLVM_INSTALL_UTILS=ON" # Needed by rustc 73 + "-DLLVM_BUILD_TESTS=ON" 74 + "-DLLVM_ENABLE_FFI=ON" 75 + "-DLLVM_ENABLE_RTTI=ON" 76 + 77 + "-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}" 78 + "-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.hostPlatform.config}" 79 + "-DTARGET_TRIPLE=${stdenv.hostPlatform.config}" 80 + 81 + "-DLLVM_ENABLE_DUMP=ON" 82 + ] 83 + ++ stdenv.lib.optional enableSharedLibraries 84 + "-DLLVM_LINK_LLVM_DYLIB=ON" 85 + ++ stdenv.lib.optionals enableManpages [ 86 + "-DLLVM_BUILD_DOCS=ON" 87 + "-DLLVM_ENABLE_SPHINX=ON" 88 + "-DSPHINX_OUTPUT_MAN=ON" 89 + "-DSPHINX_OUTPUT_HTML=OFF" 90 + "-DSPHINX_WARNINGS_AS_ERRORS=OFF" 91 + ] 92 + ++ stdenv.lib.optional (!isDarwin) 93 + "-DLLVM_BINUTILS_INCDIR=${libbfd.dev}/include" 94 + ++ stdenv.lib.optionals (isDarwin) [ 95 + "-DLLVM_ENABLE_LIBCXX=ON" 96 + "-DCAN_TARGET_i386=false" 97 + ] 98 + ++ stdenv.lib.optional enableWasm 99 + "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly" 100 + ; 101 + 102 + postBuild = '' 103 + rm -fR $out 104 + 105 + paxmark m bin/{lli,llvm-rtdyld} 106 + paxmark m unittests/ExecutionEngine/MCJIT/MCJITTests 107 + paxmark m unittests/ExecutionEngine/Orc/OrcJITTests 108 + paxmark m unittests/Support/SupportTests 109 + paxmark m bin/lli-child-target 110 + ''; 111 + 112 + preCheck = '' 113 + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD/lib 114 + ''; 115 + 116 + postInstall = '' 117 + mkdir -p $python/share 118 + mv $out/share/opt-viewer $python/share/opt-viewer 119 + '' 120 + + stdenv.lib.optionalString enableSharedLibraries '' 121 + moveToOutput "lib/libLLVM-*" "$lib" 122 + moveToOutput "lib/libLLVM${stdenv.hostPlatform.extensions.sharedLibrary}" "$lib" 123 + substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ 124 + --replace "\''${_IMPORT_PREFIX}/lib/libLLVM-" "$lib/lib/libLLVM-" 125 + '' 126 + + stdenv.lib.optionalString (stdenv.isDarwin && enableSharedLibraries) '' 127 + substituteInPlace "$out/lib/cmake/llvm/LLVMExports-${if debugVersion then "debug" else "release"}.cmake" \ 128 + --replace "\''${_IMPORT_PREFIX}/lib/libLLVM.dylib" "$lib/lib/libLLVM.dylib" 129 + ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${shortVersion}.dylib 130 + ln -s $lib/lib/libLLVM.dylib $lib/lib/libLLVM-${release_version}.dylib 131 + ''; 132 + 133 + doCheck = stdenv.isLinux && (!stdenv.isi686); 134 + 135 + checkTarget = "check-all"; 136 + 137 + enableParallelBuilding = true; 138 + 139 + passthru.src = src; 140 + 141 + meta = { 142 + description = "Collection of modular and reusable compiler and toolchain technologies"; 143 + homepage = http://llvm.org/; 144 + license = stdenv.lib.licenses.ncsa; 145 + maintainers = with stdenv.lib.maintainers; [ lovek323 raskin dtzWill ]; 146 + platforms = stdenv.lib.platforms.all; 147 + }; 148 + } // stdenv.lib.optionalAttrs enableManpages { 149 + name = "llvm-manpages-${version}"; 150 + 151 + buildPhase = '' 152 + make docs-llvm-man 153 + ''; 154 + 155 + propagatedBuildInputs = []; 156 + 157 + installPhase = '' 158 + make -C docs install 159 + ''; 160 + 161 + outputs = [ "out" ]; 162 + 163 + doCheck = false; 164 + 165 + meta.description = "man pages for LLVM ${version}"; 166 + })
+25
pkgs/development/compilers/llvm/7/openmp.nix
···
··· 1 + { stdenv 2 + , fetch 3 + , cmake 4 + , llvm 5 + , perl 6 + , version 7 + }: 8 + 9 + stdenv.mkDerivation { 10 + name = "openmp-${version}"; 11 + 12 + src = fetch "openmp" "198iljq5hhm5rxfzslzbi73sq80jlwfr24a3khdk32lghdj2skdw"; 13 + 14 + nativeBuildInputs = [ cmake perl ]; 15 + buildInputs = [ llvm ]; 16 + 17 + enableParallelBuilding = true; 18 + 19 + meta = { 20 + description = "Components required to build an executable OpenMP program"; 21 + homepage = http://openmp.llvm.org/; 22 + license = stdenv.lib.licenses.mit; 23 + platforms = stdenv.lib.platforms.all; 24 + }; 25 + }
+413
pkgs/development/compilers/llvm/7/sanitizers-nongnu.patch
···
··· 1 + From 7b4b3333a2718628b1d510ec1d8438ad67308299 Mon Sep 17 00:00:00 2001 2 + From: Will Dietz <w@wdtz.org> 3 + Date: Fri, 29 Jun 2018 09:48:59 -0500 4 + Subject: [PATCH] Ported to 6.0, taken from gentoo-musl project. 5 + 6 + ------ 7 + Ported to compiler-rt-sanitizers-5.0.0. Taken from 8 + 9 + https://gist.githubusercontent.com/pwaller/2337f3290f12634cad3e3730cff0a6c1/raw/83c87a8585e2f9662494db5662e5361beb093c26/nongnu.patch 10 + Signed-off-by: Jory A. Pratt <anarchy@gentoo.org> 11 + 12 + Taken from gentoo-musl project, with a few additional minor fixes. 13 + --- 14 + lib/asan/asan_linux.cc | 4 +- 15 + lib/interception/interception_linux.cc | 2 +- 16 + lib/interception/interception_linux.h | 3 +- 17 + lib/msan/msan_linux.cc | 2 +- 18 + lib/sanitizer_common/sanitizer_allocator.cc | 2 +- 19 + .../sanitizer_common_interceptors_ioctl.inc | 4 +- 20 + .../sanitizer_common_syscalls.inc | 2 +- 21 + lib/sanitizer_common/sanitizer_linux.cc | 8 +++- 22 + .../sanitizer_linux_libcdep.cc | 10 ++--- 23 + lib/sanitizer_common/sanitizer_platform.h | 6 +++ 24 + .../sanitizer_platform_interceptors.h | 4 +- 25 + .../sanitizer_platform_limits_posix.cc | 37 +++++++++++-------- 26 + lib/tsan/rtl/tsan_platform_linux.cc | 2 +- 27 + 13 files changed, 51 insertions(+), 35 deletions(-) 28 + 29 + diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc 30 + index 625f32d40..73cf77aca 100644 31 + --- a/lib/asan/asan_linux.cc 32 + +++ b/lib/asan/asan_linux.cc 33 + @@ -46,7 +46,7 @@ 34 + #include <link.h> 35 + #endif 36 + 37 + -#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS 38 + +#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU 39 + #include <ucontext.h> 40 + extern "C" void* _DYNAMIC; 41 + #elif SANITIZER_NETBSD 42 + @@ -139,7 +139,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) { 43 + UNIMPLEMENTED(); 44 + } 45 + 46 + -#if SANITIZER_ANDROID 47 + +#if SANITIZER_ANDROID || SANITIZER_NONGNU 48 + // FIXME: should we do anything for Android? 49 + void AsanCheckDynamicRTPrereqs() {} 50 + void AsanCheckIncompatibleRT() {} 51 + diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc 52 + index c991550a4..2b706418b 100644 53 + --- a/lib/interception/interception_linux.cc 54 + +++ b/lib/interception/interception_linux.cc 55 + @@ -43,7 +43,7 @@ bool GetRealFunctionAddress(const char *func_name, uptr *func_addr, 56 + } 57 + 58 + // Android and Solaris do not have dlvsym 59 + -#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS 60 + +#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_NONGNU 61 + void *GetFuncAddrVer(const char *func_name, const char *ver) { 62 + return dlvsym(RTLD_NEXT, func_name, ver); 63 + } 64 + diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h 65 + index 98fe51b85..c13302b98 100644 66 + --- a/lib/interception/interception_linux.h 67 + +++ b/lib/interception/interception_linux.h 68 + @@ -35,8 +35,7 @@ void *GetFuncAddrVer(const char *func_name, const char *ver); 69 + (::__interception::uptr) & (func), \ 70 + (::__interception::uptr) & WRAP(func)) 71 + 72 + -// Android and Solaris do not have dlvsym 73 + -#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS 74 + +#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_NONGNU 75 + #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ 76 + (::__interception::real_##func = (func##_f)( \ 77 + unsigned long)::__interception::GetFuncAddrVer(#func, symver)) 78 + diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc 79 + index 4e6321fcb..4d50feb82 100644 80 + --- a/lib/msan/msan_linux.cc 81 + +++ b/lib/msan/msan_linux.cc 82 + @@ -13,7 +13,7 @@ 83 + //===----------------------------------------------------------------------===// 84 + 85 + #include "sanitizer_common/sanitizer_platform.h" 86 + -#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD 87 + +#if SANITIZER_FREEBSD || (SANITIZER_LINUX && !SANITIZER_NONGNU) || SANITIZER_NETBSD 88 + 89 + #include "msan.h" 90 + #include "msan_thread.h" 91 + diff --git a/lib/sanitizer_common/sanitizer_allocator.cc b/lib/sanitizer_common/sanitizer_allocator.cc 92 + index fc4f7a75a..76cf4f769 100644 93 + --- a/lib/sanitizer_common/sanitizer_allocator.cc 94 + +++ b/lib/sanitizer_common/sanitizer_allocator.cc 95 + @@ -23,7 +23,7 @@ namespace __sanitizer { 96 + 97 + // ThreadSanitizer for Go uses libc malloc/free. 98 + #if SANITIZER_GO || defined(SANITIZER_USE_MALLOC) 99 + -# if SANITIZER_LINUX && !SANITIZER_ANDROID 100 + +# if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 101 + extern "C" void *__libc_malloc(uptr size); 102 + # if !SANITIZER_GO 103 + extern "C" void *__libc_memalign(uptr alignment, uptr size); 104 + diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc 105 + index 24e7548a5..20259b1d6 100644 106 + --- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc 107 + +++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc 108 + @@ -102,7 +102,7 @@ static void ioctl_table_fill() { 109 + _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz); 110 + #endif 111 + 112 + -#if SANITIZER_LINUX 113 + +#if SANITIZER_LINUX && !SANITIZER_NONGNU 114 + // Conflicting request ids. 115 + // _(CDROMAUDIOBUFSIZ, NONE, 0); 116 + // _(SNDCTL_TMR_CONTINUE, NONE, 0); 117 + @@ -363,7 +363,7 @@ static void ioctl_table_fill() { 118 + _(VT_WAITACTIVE, NONE, 0); 119 + #endif 120 + 121 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 122 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 123 + // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE 124 + _(CYGETDEFTHRESH, WRITE, sizeof(int)); 125 + _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); 126 + diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc 127 + index 469c8eb7e..24f87867d 100644 128 + --- a/lib/sanitizer_common/sanitizer_common_syscalls.inc 129 + +++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc 130 + @@ -2038,7 +2038,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) { 131 + } 132 + } 133 + 134 + -#if !SANITIZER_ANDROID 135 + +#if !SANITIZER_ANDROID && !SANITIZER_NONGNU 136 + PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim, 137 + void *old_rlim) { 138 + if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz); 139 + diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc 140 + index 6c83e8db4..542c4fe64 100644 141 + --- a/lib/sanitizer_common/sanitizer_linux.cc 142 + +++ b/lib/sanitizer_common/sanitizer_linux.cc 143 + @@ -522,13 +522,13 @@ const char *GetEnv(const char *name) { 144 + #endif 145 + } 146 + 147 + -#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD 148 + +#if !SANITIZER_FREEBSD && !SANITIZER_NETBSD && !SANITIZER_NONGNU 149 + extern "C" { 150 + SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end; 151 + } 152 + #endif 153 + 154 + -#if !SANITIZER_GO && !SANITIZER_FREEBSD && !SANITIZER_NETBSD 155 + +#if (!SANITIZER_GO || SANITIZER_NONGNU) && !SANITIZER_FREEBSD && !SANITIZER_NETBSD 156 + static void ReadNullSepFileToArray(const char *path, char ***arr, 157 + int arr_size) { 158 + char *buff; 159 + @@ -569,6 +569,10 @@ static void GetArgsAndEnv(char ***argv, char ***envp) { 160 + #elif SANITIZER_NETBSD 161 + *argv = __ps_strings->ps_argvstr; 162 + *argv = __ps_strings->ps_envstr; 163 + +#elif SANITIZER_NONGNU 164 + + static const int kMaxArgv = 2000, kMaxEnvp = 2000; 165 + + ReadNullSepFileToArray("/proc/self/cmdline", argv, kMaxArgv); 166 + + ReadNullSepFileToArray("/proc/self/environ", envp, kMaxEnvp); 167 + #else 168 + #if !SANITIZER_GO 169 + if (&__libc_stack_end) { 170 + diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc 171 + index 56fdfc870..a932d5db1 100644 172 + --- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc 173 + +++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc 174 + @@ -174,7 +174,7 @@ bool SanitizerGetThreadName(char *name, int max_len) { 175 + } 176 + 177 + #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \ 178 + - !SANITIZER_NETBSD && !SANITIZER_SOLARIS 179 + + !SANITIZER_NETBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU 180 + static uptr g_tls_size; 181 + 182 + #ifdef __i386__ 183 + @@ -207,7 +207,7 @@ void InitTlsSize() { } 184 + 185 + #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) \ 186 + || defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) \ 187 + - || defined(__arm__)) && SANITIZER_LINUX && !SANITIZER_ANDROID 188 + + || defined(__arm__)) && SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 189 + // sizeof(struct pthread) from glibc. 190 + static atomic_uintptr_t kThreadDescriptorSize; 191 + 192 + @@ -391,7 +391,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) { 193 + 194 + #if !SANITIZER_GO 195 + static void GetTls(uptr *addr, uptr *size) { 196 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 197 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 198 + # if defined(__x86_64__) || defined(__i386__) || defined(__s390__) 199 + *addr = ThreadSelf(); 200 + *size = GetTlsSize(); 201 + @@ -432,7 +432,7 @@ static void GetTls(uptr *addr, uptr *size) { 202 + *addr = (uptr)tcb->tcb_dtv[1]; 203 + } 204 + } 205 + -#elif SANITIZER_ANDROID 206 + +#elif SANITIZER_ANDROID || SANITIZER_NONGNU 207 + *addr = 0; 208 + *size = 0; 209 + #elif SANITIZER_SOLARIS 210 + @@ -448,7 +448,7 @@ static void GetTls(uptr *addr, uptr *size) { 211 + #if !SANITIZER_GO 212 + uptr GetTlsSize() { 213 + #if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \ 214 + - SANITIZER_SOLARIS 215 + + SANITIZER_SOLARIS || SANITIZER_NONGNU 216 + uptr addr, size; 217 + GetTls(&addr, &size); 218 + return size; 219 + diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h 220 + index 334903c26..fc2afac2c 100644 221 + --- a/lib/sanitizer_common/sanitizer_platform.h 222 + +++ b/lib/sanitizer_common/sanitizer_platform.h 223 + @@ -195,6 +195,12 @@ 224 + # define SANITIZER_SOLARIS32 0 225 + #endif 226 + 227 + +#if defined(__linux__) && !defined(__GLIBC__) 228 + +# define SANITIZER_NONGNU 1 229 + +#else 230 + +# define SANITIZER_NONGNU 0 231 + +#endif 232 + + 233 + // By default we allow to use SizeClassAllocator64 on 64-bit platform. 234 + // But in some cases (e.g. AArch64's 39-bit address space) SizeClassAllocator64 235 + // does not work well and we need to fallback to SizeClassAllocator32. 236 + diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h 237 + index b99ac4480..628d226a1 100644 238 + --- a/lib/sanitizer_common/sanitizer_platform_interceptors.h 239 + +++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h 240 + @@ -38,7 +38,7 @@ 241 + # include "sanitizer_platform_limits_solaris.h" 242 + #endif 243 + 244 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 245 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 246 + # define SI_LINUX_NOT_ANDROID 1 247 + #else 248 + # define SI_LINUX_NOT_ANDROID 0 249 + @@ -291,7 +291,7 @@ 250 + (SI_FREEBSD || SI_MAC || SI_LINUX_NOT_ANDROID) 251 + #define SANITIZER_INTERCEPT_ETHER_R (SI_FREEBSD || SI_LINUX_NOT_ANDROID) 252 + #define SANITIZER_INTERCEPT_SHMCTL \ 253 + - (SI_NETBSD || SI_SOLARIS || ((SI_FREEBSD || SI_LINUX_NOT_ANDROID) && \ 254 + + (SI_NETBSD || SI_SOLARIS || ((SI_FREEBSD || SI_LINUX_NOT_ANDROID || SANITIZER_NONGNU) && \ 255 + SANITIZER_WORDSIZE == 64)) // NOLINT 256 + #define SANITIZER_INTERCEPT_RANDOM_R SI_LINUX_NOT_ANDROID 257 + #define SANITIZER_INTERCEPT_PTHREAD_ATTR_GET SI_POSIX 258 + diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc 259 + index feb7bad6f..4e89ab2a6 100644 260 + --- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc 261 + +++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc 262 + @@ -14,6 +14,9 @@ 263 + 264 + #include "sanitizer_platform.h" 265 + 266 + +// Workaround musl <--> linux conflicting definition of 'struct sysinfo' 267 + +#define _LINUX_SYSINFO_H 268 + + 269 + #if SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_MAC 270 + // Tests in this file assume that off_t-dependent data structures match the 271 + // libc ABI. For example, struct dirent here is what readdir() function (as 272 + @@ -138,12 +141,14 @@ typedef struct user_fpregs elf_fpregset_t; 273 + 274 + #if SANITIZER_LINUX && !SANITIZER_ANDROID 275 + #include <glob.h> 276 + -#include <obstack.h> 277 + +# if !SANITIZER_NONGNU 278 + +# include <obstack.h> 279 + +# endif 280 + #include <mqueue.h> 281 + -#include <net/if_ppp.h> 282 + -#include <netax25/ax25.h> 283 + -#include <netipx/ipx.h> 284 + -#include <netrom/netrom.h> 285 + +#include <linux/if_ppp.h> 286 + +#include <linux/ax25.h> 287 + +#include <linux/ipx.h> 288 + +#include <linux/netrom.h> 289 + #if HAVE_RPC_XDR_H 290 + # include <rpc/xdr.h> 291 + #elif HAVE_TIRPC_RPC_XDR_H 292 + @@ -251,7 +256,7 @@ namespace __sanitizer { 293 + unsigned struct_itimerspec_sz = sizeof(struct itimerspec); 294 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD 295 + 296 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 297 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 298 + // Use pre-computed size of struct ustat to avoid <sys/ustat.h> which 299 + // has been removed from glibc 2.28. 300 + #if defined(__aarch64__) || defined(__s390x__) || defined (__mips64) \ 301 + @@ -322,7 +327,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr)); 302 + unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); 303 + #endif 304 + 305 + -#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID 306 + +#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU 307 + int glob_nomatch = GLOB_NOMATCH; 308 + int glob_altdirfunc = GLOB_ALTDIRFUNC; 309 + #endif 310 + @@ -416,7 +421,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); 311 + unsigned struct_termios_sz = sizeof(struct termios); 312 + unsigned struct_winsize_sz = sizeof(struct winsize); 313 + 314 + -#if SANITIZER_LINUX 315 + +#if SANITIZER_LINUX && !SANITIZER_NONGNU 316 + unsigned struct_arpreq_sz = sizeof(struct arpreq); 317 + unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf); 318 + unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession); 319 + @@ -466,7 +471,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); 320 + unsigned struct_vt_mode_sz = sizeof(struct vt_mode); 321 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD 322 + 323 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 324 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 325 + unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); 326 + unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); 327 + #if EV_VERSION > (0x010000) 328 + @@ -834,7 +839,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); 329 + unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE; 330 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD 331 + 332 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 333 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 334 + unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; 335 + unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; 336 + unsigned IOCTL_CYGETMON = CYGETMON; 337 + @@ -989,7 +994,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); 338 + CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); 339 + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD 340 + 341 + -#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID 342 + +#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU 343 + CHECK_TYPE_SIZE(glob_t); 344 + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); 345 + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); 346 + @@ -1023,6 +1028,7 @@ CHECK_TYPE_SIZE(iovec); 347 + CHECK_SIZE_AND_OFFSET(iovec, iov_base); 348 + CHECK_SIZE_AND_OFFSET(iovec, iov_len); 349 + 350 + +#if !SANITIZER_NONGNU 351 + CHECK_TYPE_SIZE(msghdr); 352 + CHECK_SIZE_AND_OFFSET(msghdr, msg_name); 353 + CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen); 354 + @@ -1036,6 +1042,7 @@ CHECK_TYPE_SIZE(cmsghdr); 355 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len); 356 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level); 357 + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type); 358 + +#endif 359 + 360 + COMPILER_CHECK(sizeof(__sanitizer_dirent) <= sizeof(dirent)); 361 + CHECK_SIZE_AND_OFFSET(dirent, d_ino); 362 + @@ -1138,7 +1145,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno); 363 + 364 + CHECK_TYPE_SIZE(ether_addr); 365 + 366 + -#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID 367 + +#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU 368 + CHECK_TYPE_SIZE(ipc_perm); 369 + # if SANITIZER_FREEBSD 370 + CHECK_SIZE_AND_OFFSET(ipc_perm, key); 371 + @@ -1199,7 +1206,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); 372 + CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data); 373 + #endif 374 + 375 + -#if SANITIZER_LINUX 376 + +#if SANITIZER_LINUX && !SANITIZER_NONGNU 377 + COMPILER_CHECK(sizeof(__sanitizer_mallinfo) == sizeof(struct mallinfo)); 378 + #endif 379 + 380 + @@ -1249,7 +1256,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); 381 + COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); 382 + #endif 383 + 384 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 385 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 386 + COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE)); 387 + CHECK_SIZE_AND_OFFSET(FILE, _flags); 388 + CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr); 389 + @@ -1268,7 +1275,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain); 390 + CHECK_SIZE_AND_OFFSET(FILE, _fileno); 391 + #endif 392 + 393 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 394 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 395 + COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk)); 396 + CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit); 397 + CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev); 398 + diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc 399 + index e14d5f575..389a3bc88 100644 400 + --- a/lib/tsan/rtl/tsan_platform_linux.cc 401 + +++ b/lib/tsan/rtl/tsan_platform_linux.cc 402 + @@ -285,7 +285,7 @@ void InitializePlatform() { 403 + // This is required to properly "close" the fds, because we do not see internal 404 + // closes within glibc. The code is a pure hack. 405 + int ExtractResolvFDs(void *state, int *fds, int nfd) { 406 + -#if SANITIZER_LINUX && !SANITIZER_ANDROID 407 + +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU 408 + int cnt = 0; 409 + struct __res_state *statp = (struct __res_state*)state; 410 + for (int i = 0; i < MAXNS && cnt < nfd; i++) { 411 + -- 412 + 2.18.0 413 +
+12
pkgs/top-level/all-packages.nix
··· 6381 }; 6382 }; 6383 6384 clang_6 = llvmPackages_6.clang; 6385 clang_5 = llvmPackages_5.clang; 6386 clang_4 = llvmPackages_4.clang; ··· 6978 lld_4 = llvmPackages_4.lld; 6979 lld_5 = llvmPackages_5.lld; 6980 lld_6 = llvmPackages_6.lld; 6981 6982 lldb = llvmPackages.lldb; 6983 lldb_4 = llvmPackages_4.lldb; 6984 lldb_5 = llvmPackages_5.lldb; 6985 lldb_6 = llvmPackages_6.lldb; 6986 6987 llvm = llvmPackages.llvm; 6988 llvm-manpages = llvmPackages.llvm-manpages; 6989 6990 llvm_6 = llvmPackages_6.llvm; 6991 llvm_5 = llvmPackages_5.llvm; 6992 llvm_4 = llvmPackages_4.llvm; ··· 7047 inherit (stdenvAdapters) overrideCC; 7048 buildLlvmTools = buildPackages.llvmPackages_6.tools; 7049 targetLlvmLibraries = targetPackages.llvmPackages_6.libraries; 7050 } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { 7051 stdenv = overrideCC stdenv buildPackages.gcc6; # with gcc-7: undefined reference to `__divmoddi4' 7052 });
··· 6381 }; 6382 }; 6383 6384 + clang_7 = llvmPackages_7.clang; 6385 clang_6 = llvmPackages_6.clang; 6386 clang_5 = llvmPackages_5.clang; 6387 clang_4 = llvmPackages_4.clang; ··· 6979 lld_4 = llvmPackages_4.lld; 6980 lld_5 = llvmPackages_5.lld; 6981 lld_6 = llvmPackages_6.lld; 6982 + lld_7 = llvmPackages_7.lld; 6983 6984 lldb = llvmPackages.lldb; 6985 lldb_4 = llvmPackages_4.lldb; 6986 lldb_5 = llvmPackages_5.lldb; 6987 lldb_6 = llvmPackages_6.lldb; 6988 + lldb_7 = llvmPackages_7.lldb; 6989 6990 llvm = llvmPackages.llvm; 6991 llvm-manpages = llvmPackages.llvm-manpages; 6992 6993 + llvm_7 = llvmPackages_7.llvm; 6994 llvm_6 = llvmPackages_6.llvm; 6995 llvm_5 = llvmPackages_5.llvm; 6996 llvm_4 = llvmPackages_4.llvm; ··· 7051 inherit (stdenvAdapters) overrideCC; 7052 buildLlvmTools = buildPackages.llvmPackages_6.tools; 7053 targetLlvmLibraries = targetPackages.llvmPackages_6.libraries; 7054 + } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { 7055 + stdenv = overrideCC stdenv buildPackages.gcc6; # with gcc-7: undefined reference to `__divmoddi4' 7056 + }); 7057 + 7058 + llvmPackages_7 = callPackage ../development/compilers/llvm/7 ({ 7059 + inherit (stdenvAdapters) overrideCC; 7060 + buildLlvmTools = buildPackages.llvmPackages_7.tools; 7061 + targetLlvmLibraries = targetPackages.llvmPackages_7.libraries; 7062 } // stdenv.lib.optionalAttrs (stdenv.cc.isGNU && stdenv.hostPlatform.isi686) { 7063 stdenv = overrideCC stdenv buildPackages.gcc6; # with gcc-7: undefined reference to `__divmoddi4' 7064 });