nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at netboot-syslinux-multiplatform 139 lines 4.1 kB view raw
1{ lowPrio, newScope, pkgs, lib, stdenv, cmake, gccForLibs 2, libxml2, python3, 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, targetLlvm 6}: 7 8let 9 release_version = "5.0.2"; 10 version = release_version; # differentiating these is important for rc's 11 targetConfig = stdenv.targetPlatform.config; 12 13 fetch = name: sha256: fetchurl { 14 url = "https://releases.llvm.org/${release_version}/${name}-${version}.src.tar.xz"; 15 inherit sha256; 16 }; 17 18 clang-tools-extra_src = fetch "clang-tools-extra" "018b3fiwah8f8br5i26qmzh6sjvzchpn358sn8v079m49f2jldm3"; 19 20 llvm_meta = { 21 license = lib.licenses.ncsa; 22 maintainers = lib.teams.llvm.members; 23 24 # See llvm/cmake/config-ix.cmake. 25 platforms = 26 lib.platforms.aarch64 ++ 27 lib.platforms.arm ++ 28 lib.platforms.mips ++ 29 lib.platforms.power ++ 30 lib.platforms.s390x ++ 31 lib.platforms.wasi ++ 32 lib.platforms.x86; 33 }; 34 35 tools = lib.makeExtensible (tools: let 36 callPackage = newScope (tools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch buildLlvmTools; }); 37 mkExtraBuildCommands = cc: '' 38 rsrc="$out/resource-root" 39 mkdir "$rsrc" 40 ln -s "${cc.lib}/lib/clang/${release_version}/include" "$rsrc" 41 echo "-resource-dir=$rsrc" >> $out/nix-support/cc-cflags 42 ln -s "${targetLlvmLibraries.compiler-rt.out}/lib" "$rsrc/lib" 43 ''; 44 45 in { 46 47 libllvm = callPackage ./llvm { 48 inherit llvm_meta; 49 }; 50 51 # `llvm` historically had the binaries. When choosing an output explicitly, 52 # we need to reintroduce `outputSpecified` to get the expected behavior e.g. of lib.get* 53 llvm = tools.libllvm; 54 55 libllvm-polly = callPackage ./llvm { 56 inherit llvm_meta; 57 enablePolly = true; 58 }; 59 60 llvm-polly = tools.libllvm-polly.lib // { outputSpecified = false; }; 61 62 libclang = callPackage ./clang { 63 inherit clang-tools-extra_src llvm_meta; 64 }; 65 66 clang-unwrapped = tools.libclang; 67 68 llvm-manpages = lowPrio (tools.libllvm.override { 69 enableManpages = true; 70 python3 = pkgs.python3; # don't use python-boot 71 }); 72 73 clang-manpages = lowPrio (tools.libclang.override { 74 enableManpages = true; 75 python3 = pkgs.python3; # don't use python-boot 76 }); 77 78 # pick clang appropriate for package set we are targeting 79 clang = 80 /**/ if stdenv.targetPlatform.libc == null then tools.clangNoLibc 81 else if stdenv.targetPlatform.useLLVM or false then tools.clangUseLLVM 82 else if (pkgs.targetPackages.stdenv or stdenv).cc.isGNU then tools.libstdcxxClang 83 else tools.libcxxClang; 84 85 libstdcxxClang = wrapCCWith rec { 86 cc = tools.clang-unwrapped; 87 # libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper. 88 libcxx = null; 89 extraPackages = [ 90 targetLlvmLibraries.compiler-rt 91 ]; 92 extraBuildCommands = mkExtraBuildCommands cc; 93 }; 94 95 libcxxClang = wrapCCWith rec { 96 cc = tools.clang-unwrapped; 97 libcxx = targetLlvmLibraries.libcxx; 98 extraPackages = [ 99 libcxx.cxxabi 100 targetLlvmLibraries.compiler-rt 101 ]; 102 extraBuildCommands = mkExtraBuildCommands cc; 103 }; 104 105 lld = callPackage ./lld { 106 inherit llvm_meta; 107 }; 108 109 lldb = callPackage ./lldb { 110 inherit llvm_meta; 111 }; 112 }); 113 114 libraries = lib.makeExtensible (libraries: let 115 callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch; }); 116 in { 117 118 compiler-rt = callPackage ./compiler-rt { 119 inherit llvm_meta; 120 }; 121 122 stdenv = overrideCC stdenv buildLlvmTools.clang; 123 124 libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang; 125 126 libcxx = callPackage ./libcxx { 127 inherit llvm_meta; 128 }; 129 130 libcxxabi = callPackage ./libcxxabi { 131 inherit llvm_meta; 132 }; 133 134 openmp = callPackage ./openmp { 135 inherit llvm_meta targetLlvm; 136 }; 137 }); 138 139in { inherit tools libraries release_version; } // libraries // tools