1source $stdenv/setup
2
3
4export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy
5mkdir $NIX_FIXINC_DUMMY
6
7
8# libstdc++ needs this; otherwise it will use /lib/cpp, which is a Bad
9# Thing.
10export CPP="gcc -E"
11
12
13if test "$noSysDirs" = "1"; then
14
15 if test -e $NIX_CC/nix-support/orig-libc; then
16
17 # Figure out what extra flags to pass to the gcc compilers
18 # being generated to make sure that they use our glibc.
19 extraCFlags="$(cat $NIX_CC/nix-support/libc-cflags)"
20 extraLDFlags="$(cat $NIX_CC/nix-support/libc-ldflags) $(cat $NIX_CC/nix-support/libc-ldflags-before)"
21
22 # Use *real* header files, otherwise a limits.h is generated
23 # that does not include Glibc's limits.h (notably missing
24 # SSIZE_MAX, which breaks the build).
25 export NIX_FIXINC_DUMMY=$(cat $NIX_CC/nix-support/orig-libc)/include
26
27 else
28 # Hack: support impure environments.
29 extraCFlags="-isystem /usr/include"
30 extraLDFlags="-L/usr/lib64 -L/usr/lib"
31 export NIX_FIXINC_DUMMY=/usr/include
32 fi
33
34
35 extraCFlags="-g0 -I$gmp/include -I$mpfr/include $extraCFlags"
36 extraLDFlags="--strip-debug $extraLDFlags"
37
38 export NIX_EXTRA_CFLAGS=$extraCFlags
39 for i in $extraLDFlags; do
40 export NIX_EXTRA_LDFLAGS="$NIX_EXTRA_LDFLAGS -Wl,$i"
41 done
42
43 if test -n "$targetConfig"; then
44 if test -z "$crossStageStatic"; then
45 extraXCFlags="-B${libcCross}/lib -idirafter ${libcCross}/include"
46 extraXLDFlags="-L${libcCross}/lib"
47 export NIX_EXTRA_CFLAGS_TARGET=$extraXCFlags
48 for i in $extraXLDFlags; do
49 export NIX_EXTRA_LDFLAGS_TARGET="$NIX_EXTRA_LDFLAGS_TARGET -Wl,$i"
50 done
51 fi
52
53 makeFlagsArray=( \
54 "${makeFlagsArray[@]}" \
55 NATIVE_SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \
56 SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \
57 CFLAGS_FOR_TARGET="$NIX_EXTRA_CFLAGS_TARGET $NIX_EXTRA_LDFLAGS_TARGET" \
58 LDFLAGS_FOR_TARGET="$NIX_EXTRA_CFLAGS_TARGET $NIX_EXTRA_LDFLAGS_TARGET" \
59 )
60 else
61 export NIX_EXTRA_CFLAGS_TARGET=$NIX_EXTRA_CFLAGS
62 export NIX_EXTRA_LDFLAGS_TARGET=$NIX_EXTRA_LDFLAGS
63 makeFlagsArray=( \
64 "${makeFlagsArray[@]}" \
65 NATIVE_SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \
66 SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \
67 CFLAGS_FOR_BUILD="$NIX_EXTRA_CFLAGS $NIX_EXTRA_LDFLAGS" \
68 CFLAGS_FOR_TARGET="$NIX_EXTRA_CFLAGS $NIX_EXTRA_LDFLAGS" \
69 LDFLAGS_FOR_BUILD="$NIX_EXTRA_CFLAGS $NIX_EXTRA_LDFLAGS" \
70 LDFLAGS_FOR_TARGET="$NIX_EXTRA_CFLAGS $NIX_EXTRA_LDFLAGS" \
71 )
72 fi
73
74 if test -n "$targetConfig" -a "$crossStageStatic" == 1; then
75 # We don't want the gcc build to assume there will be a libc providing
76 # limits.h in this stagae
77 makeFlagsArray=( \
78 "${makeFlagsArray[@]}" \
79 LIMITS_H_TEST=false \
80 )
81 else
82 makeFlagsArray=( \
83 "${makeFlagsArray[@]}" \
84 LIMITS_H_TEST=true \
85 )
86 fi
87fi
88
89if test -n "$targetConfig"; then
90 # The host strip will destroy everything in the target binaries otherwise
91 dontStrip=1
92fi
93
94preConfigure() {
95 # Perform the build in a different directory.
96 mkdir ../build
97 cd ../build
98 configureScript=../$sourceRoot/configure
99}
100
101
102postInstall() {
103 # Remove precompiled headers for now. They are very big and
104 # probably not very useful yet.
105 find $out/include -name "*.gch" -exec rm -rf {} \; -prune
106
107 # Remove `fixincl' to prevent a retained dependency on the
108 # previous gcc.
109 rm -rf $out/libexec/gcc/*/*/install-tools
110 rm -rf $out/lib/gcc/*/*/install-tools
111
112 # Get rid of some "fixed" header files
113 rm -rf $out/lib/gcc/*/*/include/root
114
115 # Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks.
116 for i in $out/bin/*-gcc*; do
117 if cmp -s $out/bin/gcc $i; then
118 ln -sfn gcc $i
119 fi
120 done
121
122 for i in $out/bin/*-c++* $out/bin/*-g++*; do
123 if cmp -s $out/bin/g++ $i; then
124 ln -sfn g++ $i
125 fi
126 done
127
128 eval "$postInstallGhdl"
129}
130
131
132if test -z "$targetConfig"; then
133 if test -z "$profiledCompiler"; then
134 buildFlags="bootstrap $buildFlags"
135 else
136 buildFlags="profiledbootstrap $buildFlags"
137 fi
138else
139:
140# buildFlags="all-gcc all-target-libgcc $buildFlags"
141# installTargets="install-gcc install-target-libgcc"
142fi
143
144genericBuild