about summary refs log tree commit diff
path: root/pkgs/development/compilers/gcc/builder.sh
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/gcc/builder.sh')
-rwxr-xr-xpkgs/development/compilers/gcc/builder.sh56
1 files changed, 56 insertions, 0 deletions
diff --git a/pkgs/development/compilers/gcc/builder.sh b/pkgs/development/compilers/gcc/builder.sh
new file mode 100755
index 0000000000000..15746b264399a
--- /dev/null
+++ b/pkgs/development/compilers/gcc/builder.sh
@@ -0,0 +1,56 @@
+#! /bin/sh
+
+buildinputs="$binutils"
+. $stdenv/setup || exit 1
+
+tar xvfj $src || exit 1
+
+if test "$noSysDirs" == "1"; then
+    # Disable the standard include directories.
+    cd gcc-* || exit 1
+    cat >> ./gcc/cppdefault.h <<EOF
+#undef LOCAL_INCLUDE_DIR
+#undef SYSTEM_INCLUDE_DIR
+#undef STANDARD_INCLUDE_DIR
+EOF
+    cd .. || exit 1
+fi
+
+# Configure.
+mkdir build || exit 1
+cd build || exit 1
+../gcc-*/configure --prefix=$out --enable-languages=c,c++ || exit 1
+
+if test "$noSysDirs" == "1"; then
+    # Patch some of the makefiles to force linking against our own glibc.
+    extraflags="-Wl,-s $NIX_CFLAGS_COMPILE $NIX_CFLAGS_LINK"
+    for i in $NIX_LDFLAGS; do
+        extraflags="$extraflags -Wl,$i"
+    done
+
+    mf=Makefile
+    sed \
+        -e "s^FLAGS_FOR_TARGET =\(.*\)^FLAGS_FOR_TARGET = \1 $extraflags^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+
+    mf=gcc/Makefile
+    sed \
+        -e "s^X_CFLAGS =\(.*\)^X_CFLAGS = \1 $extraflags^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+
+    # Patch gcc/Makefile to prevent fixinc.sh from "fixing" system header files
+    # from /usr/include.
+    mf=gcc/Makefile
+    sed \
+        -e "s^NATIVE_SYSTEM_HEADER_DIR =\(.*\)^NATIVE_SYSTEM_HEADER_DIR = /fixinc-disabled^" \
+        < $mf > $mf.tmp || exit 1
+    mv $mf.tmp $mf
+fi
+
+# Build and install.
+make bootstrap || exit 1
+make install || exit 1
+
+find $out -name "*.a" -exec strip -S {} \; || exit 1