-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgccWithCache.nix
49 lines (48 loc) · 1.31 KB
/
gccWithCache.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{ system ? builtins.currentSystem
, pkgs ? import <nixpkgs> { system = system; }
, gccUnwrapped ? pkgs.gcc-unwrapped
}:
let
gccPatched = pkgs.runCommand "gcc"
{
outputs = [ "out" "lib" "libgcc" ];
} ''
cp -r ${gccUnwrapped} $out
cp -a ${gccUnwrapped.lib} $lib
cp -a ${gccUnwrapped.libgcc} $libgcc
function gchgen {
echo $1 $2 $3
${gccUnwrapped}/bin/g++ -x c++-header -lm -fno-stack-limit -fdiagnostics-color=always -std=$2 -c $1 -o $1.gch/$2.gch $3
}
function ensureSingleCache {
echo "Creating cache for $1"
cd $(dirname $1)
filename=$(basename $1)
chmod 755 .
mkdir $1.gch -p
gchgen $filename c++98
gchgen $filename c++03
gchgen $filename c++11
gchgen $filename c++14
gchgen $filename c++17
gchgen $filename c++2a
gchgen $filename c++98 -O2
gchgen $filename c++03 -O2
gchgen $filename c++11 -O2
gchgen $filename c++14 -O2
gchgen $filename c++17 -O2
gchgen $filename c++2a -O2
gchgen $filename c++23 -O2
}
function ensureCache {
filename=$(basename $1)
found=$(find $out -name $filename | grep $1)
echo $found
ensureSingleCache $found
}
ensureCache bits/stdc++.h
ensureCache iostream
ensureCache cstdio
'';
in
pkgs.wrapCC gccPatched