nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at netboot-syslinux-multiplatform 140 lines 4.2 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 = "6.0.1"; 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" "1w8ml7fyn4vyxmy59n2qm4r1k1kgwgwkaldp6m45fdv4g0kkfbhd"; 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 enableSharedLibraries = false; 71 python3 = pkgs.python3; # don't use python-boot 72 }); 73 74 clang-manpages = lowPrio (tools.libclang.override { 75 enableManpages = true; 76 python3 = pkgs.python3; # don't use python-boot 77 }); 78 79 # pick clang appropriate for package set we are targeting 80 clang = 81 /**/ if stdenv.targetPlatform.libc == null then tools.clangNoLibc 82 else if stdenv.targetPlatform.useLLVM or false then tools.clangUseLLVM 83 else if (pkgs.targetPackages.stdenv or stdenv).cc.isGNU then tools.libstdcxxClang 84 else tools.libcxxClang; 85 86 libstdcxxClang = wrapCCWith rec { 87 cc = tools.clang-unwrapped; 88 # libstdcxx is taken from gcc in an ad-hoc way in cc-wrapper. 89 libcxx = null; 90 extraPackages = [ 91 targetLlvmLibraries.compiler-rt 92 ]; 93 extraBuildCommands = mkExtraBuildCommands cc; 94 }; 95 96 libcxxClang = wrapCCWith rec { 97 cc = tools.clang-unwrapped; 98 libcxx = targetLlvmLibraries.libcxx; 99 extraPackages = [ 100 libcxx.cxxabi 101 targetLlvmLibraries.compiler-rt 102 ]; 103 extraBuildCommands = mkExtraBuildCommands cc; 104 }; 105 106 lld = callPackage ./lld { 107 inherit llvm_meta; 108 }; 109 110 lldb = callPackage ./lldb { 111 inherit llvm_meta; 112 }; 113 }); 114 115 libraries = lib.makeExtensible (libraries: let 116 callPackage = newScope (libraries // buildLlvmTools // { inherit stdenv cmake libxml2 python3 isl release_version version fetch; }); 117 in { 118 119 compiler-rt = callPackage ./compiler-rt { 120 inherit llvm_meta; 121 }; 122 123 stdenv = overrideCC stdenv buildLlvmTools.clang; 124 125 libcxxStdenv = overrideCC stdenv buildLlvmTools.libcxxClang; 126 127 libcxx = callPackage ./libcxx { 128 inherit llvm_meta; 129 }; 130 131 libcxxabi = callPackage ./libcxxabi { 132 inherit llvm_meta; 133 }; 134 135 openmp = callPackage ./openmp { 136 inherit llvm_meta targetLlvm; 137 }; 138 }); 139 140in { inherit tools libraries release_version; } // libraries // tools