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