* On Darwin, use Apple's gcc fork.
svn path=/nixpkgs/trunk/; revision=5715
This commit is contained in:
parent
4ac32aa639
commit
3defd9a3d3
87
pkgs/development/compilers/gcc-apple/builder.sh
Normal file
87
pkgs/development/compilers/gcc-apple/builder.sh
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
source $stdenv/setup
|
||||||
|
|
||||||
|
|
||||||
|
export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy
|
||||||
|
mkdir $NIX_FIXINC_DUMMY
|
||||||
|
|
||||||
|
|
||||||
|
# libstdc++ needs this; otherwise it will use /lib/cpp, which is a Bad
|
||||||
|
# Thing.
|
||||||
|
export CPP="gcc -E"
|
||||||
|
|
||||||
|
|
||||||
|
if test "$noSysDirs" = "1"; then
|
||||||
|
|
||||||
|
# Figure out what extra flags to pass to the gcc compilers being
|
||||||
|
# generated to make sure that they use our glibc.
|
||||||
|
if test -e $NIX_GCC/nix-support/orig-glibc; then
|
||||||
|
glibc=$(cat $NIX_GCC/nix-support/orig-glibc)
|
||||||
|
|
||||||
|
# Ugh. Copied from gcc-wrapper/builder.sh. We can't just
|
||||||
|
# source in $NIX_GCC/nix-support/add-flags, since that would
|
||||||
|
# cause *this* GCC to be linked against the *previous* GCC.
|
||||||
|
# Need some more modularity there.
|
||||||
|
extraCFlags="-B$glibc/lib -isystem $glibc/include"
|
||||||
|
extraLDFlags="-B$glibc/lib -L$glibc/lib -Wl,-s \
|
||||||
|
-Wl,-dynamic-linker,$glibc/lib/ld-linux.so.2"
|
||||||
|
|
||||||
|
# Oh, what a hack. I should be shot for this. In stage 1, we
|
||||||
|
# should link against the previous GCC, but not afterwards.
|
||||||
|
# Otherwise we retain a dependency. However, ld-wrapper,
|
||||||
|
# which adds the linker flags for the previous GCC, is also
|
||||||
|
# used in stage 2/3. We can prevent it from adding them by
|
||||||
|
# NIX_GLIBC_FLAGS_SET, but then gcc-wrapper will also not add
|
||||||
|
# them, thereby causing stage 1 to fail. So we use a trick to
|
||||||
|
# only set the flags in gcc-wrapper.
|
||||||
|
hook=$(pwd)/ld-wrapper-hook
|
||||||
|
echo "NIX_GLIBC_FLAGS_SET=1" > $hook
|
||||||
|
export NIX_LD_WRAPPER_START_HOOK=$hook
|
||||||
|
|
||||||
|
# Use *real* header files, otherwise a limits.h is generated
|
||||||
|
# that does not include Glibc's limits.h (notably missing
|
||||||
|
# SSIZE_MAX, which breaks the build).
|
||||||
|
export NIX_FIXINC_DUMMY=$glibc/include
|
||||||
|
fi
|
||||||
|
|
||||||
|
export NIX_EXTRA_CFLAGS=$extraCFlags
|
||||||
|
export NIX_EXTRA_LDFLAGS=$extraLDFlags
|
||||||
|
export CFLAGS=$extraCFlags
|
||||||
|
export CXXFLAGS=$extraCFlags
|
||||||
|
export LDFLAGS=$extraLDFlags
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
preConfigure=preConfigure
|
||||||
|
preConfigure() {
|
||||||
|
|
||||||
|
# Determine the frontends to build.
|
||||||
|
langs="c"
|
||||||
|
if test -n "$langCC"; then
|
||||||
|
langs="$langs,c++"
|
||||||
|
fi
|
||||||
|
if test -n "$langF77"; then
|
||||||
|
langs="$langs,f77"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Perform the build in a different directory.
|
||||||
|
mkdir ../build
|
||||||
|
cd ../build
|
||||||
|
|
||||||
|
configureScript=../$sourceRoot/configure
|
||||||
|
configureFlags="--enable-languages=$langs --disable-libstdcxx-pch"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
postInstall=postInstall
|
||||||
|
postInstall() {
|
||||||
|
# Remove precompiled headers for now. They are very big and
|
||||||
|
# probably not very useful yet.
|
||||||
|
find $out/include -name "*.gch" -exec rm -rf {} \; -prune
|
||||||
|
|
||||||
|
# Remove `fixincl' to prevent a retained dependency on the
|
||||||
|
# previous gcc.
|
||||||
|
rm -rf $out/libexec/gcc/*/*/install-tools
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
genericBuild
|
19
pkgs/development/compilers/gcc-apple/default.nix
Normal file
19
pkgs/development/compilers/gcc-apple/default.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ stdenv, fetchurl, noSysDirs
|
||||||
|
, langC ? true, langCC ? true, langF77 ? false
|
||||||
|
, profiledCompiler ? false
|
||||||
|
}:
|
||||||
|
|
||||||
|
assert langC;
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "gcc-4.0.1-apple-5341";
|
||||||
|
builder = ./builder.sh;
|
||||||
|
src = fetchurl {
|
||||||
|
url = http://www.opensource.apple.com/darwinsource/tarballs/other/gcc-5341.tar.gz;
|
||||||
|
md5 = "a135f107ddc55b773b40dfff4f049640";
|
||||||
|
};
|
||||||
|
patches =
|
||||||
|
[./pass-cxxcpp.patch]
|
||||||
|
++ (if noSysDirs then [./no-sys-dirs.patch] else []);
|
||||||
|
inherit noSysDirs langC langCC langF77 profiledCompiler;
|
||||||
|
}
|
126
pkgs/development/compilers/gcc-apple/no-sys-dirs.patch
Normal file
126
pkgs/development/compilers/gcc-apple/no-sys-dirs.patch
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
diff -ruN gcc-4.1.0/gcc/cppdefault.c gcc-4.1.0.new/gcc/cppdefault.c
|
||||||
|
--- gcc-4.1.0/gcc/cppdefault.c 2005-06-25 04:02:01.000000000 +0200
|
||||||
|
+++ gcc-4.1.0.new/gcc/cppdefault.c 2006-03-01 18:48:58.000000000 +0100
|
||||||
|
@@ -41,6 +41,10 @@
|
||||||
|
# undef CROSS_INCLUDE_DIR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#undef LOCAL_INCLUDE_DIR
|
||||||
|
+#undef SYSTEM_INCLUDE_DIR
|
||||||
|
+#undef STANDARD_INCLUDE_DIR
|
||||||
|
+
|
||||||
|
const struct default_include cpp_include_defaults[]
|
||||||
|
#ifdef INCLUDE_DEFAULTS
|
||||||
|
= INCLUDE_DEFAULTS;
|
||||||
|
diff -ruN gcc-4.1.0/gcc/Makefile.in gcc-4.1.0.new/gcc/Makefile.in
|
||||||
|
--- gcc-4.1.0/gcc/Makefile.in 2006-02-16 16:23:24.000000000 +0100
|
||||||
|
+++ gcc-4.1.0.new/gcc/Makefile.in 2006-03-01 18:55:12.000000000 +0100
|
||||||
|
@@ -219,7 +219,7 @@
|
||||||
|
CPPFLAGS = @CPPFLAGS@
|
||||||
|
|
||||||
|
# These exists to be overridden by the x-* and t-* files, respectively.
|
||||||
|
-X_CFLAGS =
|
||||||
|
+X_CFLAGS = $(NIX_EXTRA_CFLAGS) $(NIX_EXTRA_LDFLAGS)
|
||||||
|
T_CFLAGS =
|
||||||
|
|
||||||
|
X_CPPFLAGS =
|
||||||
|
@@ -383,7 +383,11 @@
|
||||||
|
MD5_H = $(srcdir)/../include/md5.h
|
||||||
|
|
||||||
|
# Default native SYSTEM_HEADER_DIR, to be overridden by targets.
|
||||||
|
-NATIVE_SYSTEM_HEADER_DIR = /usr/include
|
||||||
|
+# Nix: we override NATIVE_SYSTEM_HEADER_DIR in order to prevent
|
||||||
|
+# `fixinc' from fixing header files in /usr/include. However,
|
||||||
|
+# NATIVE_SYSTEM_HEADER_DIR must point to an existing directory, so set
|
||||||
|
+# it to some dummy directory.
|
||||||
|
+NATIVE_SYSTEM_HEADER_DIR = $(NIX_FIXINC_DUMMY)
|
||||||
|
# Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
|
||||||
|
CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
|
||||||
|
|
||||||
|
@@ -395,7 +399,7 @@
|
||||||
|
STMP_FIXINC = @STMP_FIXINC@
|
||||||
|
|
||||||
|
# Test to see whether <limits.h> exists in the system header files.
|
||||||
|
-LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
|
||||||
|
+LIMITS_H_TEST = true
|
||||||
|
|
||||||
|
# Directory for prefix to system directories, for
|
||||||
|
# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
|
||||||
|
@@ -3002,7 +3006,7 @@
|
||||||
|
-DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
|
||||||
|
-DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
|
||||||
|
-DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
|
||||||
|
- -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
|
||||||
|
+ -DLOCAL_INCLUDE_DIR=\"/no-such-dir\" \
|
||||||
|
-DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
|
||||||
|
-DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
|
||||||
|
@TARGET_SYSTEM_ROOT_DEFINE@
|
||||||
|
diff -ruN gcc-4.1.0/libstdc++-v3/include/Makefile.in gcc-4.1.0.new/libstdc++-v3/include/Makefile.in
|
||||||
|
--- gcc-4.1.0/libstdc++-v3/include/Makefile.in 2006-01-10 18:14:00.000000000 +0100
|
||||||
|
+++ gcc-4.1.0.new/libstdc++-v3/include/Makefile.in 2006-03-01 18:57:32.000000000 +0100
|
||||||
|
@@ -1257,8 +1257,8 @@
|
||||||
|
if [ ! -d "${pch_output_builddir}" ]; then \
|
||||||
|
mkdir -p ${pch_output_builddir}; \
|
||||||
|
fi; \
|
||||||
|
- $(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g.gch; \
|
||||||
|
- $(CXX) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g.gch;
|
||||||
|
+ $(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O0 -g -o ${pch_output_builddir}/O0g.gch; \
|
||||||
|
+ $(CXX) $(CFLAGS) $(PCHFLAGS) $(AM_CPPFLAGS) ${pch_source} -O2 -g -o ${pch_output_builddir}/O2g.gch;
|
||||||
|
|
||||||
|
# For robustness sake (in light of junk files or in-source
|
||||||
|
# configuration), copy from the build or source tree to the install
|
||||||
|
diff -ruN gcc-4.1.0/ltcf-cxx.sh gcc-4.1.0.new/ltcf-cxx.sh
|
||||||
|
--- gcc-4.1.0/ltcf-cxx.sh 2005-07-16 04:30:53.000000000 +0200
|
||||||
|
+++ gcc-4.1.0.new/ltcf-cxx.sh 2006-03-01 18:58:15.000000000 +0100
|
||||||
|
@@ -989,7 +989,7 @@
|
||||||
|
# the conftest object file.
|
||||||
|
pre_test_object_deps_done=no
|
||||||
|
|
||||||
|
- for p in `eval $output_verbose_link_cmd`; do
|
||||||
|
+ for p in `true`; do
|
||||||
|
|
||||||
|
case $p in
|
||||||
|
|
||||||
|
diff -ruN gcc-4.1.0/ltconfig gcc-4.1.0.new/ltconfig
|
||||||
|
--- gcc-4.1.0/ltconfig 2005-07-16 04:30:53.000000000 +0200
|
||||||
|
+++ gcc-4.1.0.new/ltconfig 2006-03-01 18:59:58.000000000 +0100
|
||||||
|
@@ -2322,6 +2322,11 @@
|
||||||
|
# A language-specific compiler.
|
||||||
|
CC=$CC
|
||||||
|
|
||||||
|
+# Ugly hack to get libmudflap (and possibly other libraries) to build.
|
||||||
|
+# Libtool filters out \`-B' flags when linking (why?), so the \`-B' flag
|
||||||
|
+# to Glibc gets lost. Here we forcibly add it to any invocation.
|
||||||
|
+CC="\$CC $NIX_EXTRA_LDFLAGS"
|
||||||
|
+
|
||||||
|
# Is the compiler the GNU C compiler?
|
||||||
|
with_gcc=$with_gcc
|
||||||
|
|
||||||
|
diff -ruN gcc-4.1.0/Makefile.in gcc-4.1.0.new/Makefile.in
|
||||||
|
--- gcc-4.1.0/Makefile.in 2005-12-15 15:02:02.000000000 +0100
|
||||||
|
+++ gcc-4.1.0.new/Makefile.in 2006-03-01 19:41:04.000000000 +0100
|
||||||
|
@@ -286,7 +286,7 @@
|
||||||
|
WINDRES = @WINDRES@
|
||||||
|
|
||||||
|
CFLAGS = @CFLAGS@
|
||||||
|
-LDFLAGS =
|
||||||
|
+LDFLAGS = $(NIX_EXTRA_LDFLAGS)
|
||||||
|
LIBCFLAGS = $(CFLAGS)
|
||||||
|
CXXFLAGS = @CXXFLAGS@
|
||||||
|
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
|
||||||
|
@@ -329,12 +329,12 @@
|
||||||
|
# CFLAGS will be just -g. We want to ensure that TARGET libraries
|
||||||
|
# (which we know are built with gcc) are built with optimizations so
|
||||||
|
# prepend -O2 when setting CFLAGS_FOR_TARGET.
|
||||||
|
-CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
|
||||||
|
+CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) $(NIX_EXTRA_CFLAGS)
|
||||||
|
SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
|
||||||
|
-CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET)
|
||||||
|
+CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) $(NIX_EXTRA_CFLAGS)
|
||||||
|
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
|
||||||
|
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
|
||||||
|
-LDFLAGS_FOR_TARGET =
|
||||||
|
+LDFLAGS_FOR_TARGET = $(NIX_EXTRA_LDFLAGS)
|
||||||
|
PICFLAG_FOR_TARGET =
|
||||||
|
|
||||||
|
# ------------------------------------
|
21
pkgs/development/compilers/gcc-apple/pass-cxxcpp.patch
Normal file
21
pkgs/development/compilers/gcc-apple/pass-cxxcpp.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
diff -rc gcc-orig/Makefile.in gcc-4.1.1/Makefile.in
|
||||||
|
*** gcc-orig/Makefile.in Wed Jun 21 13:40:23 2006
|
||||||
|
--- gcc-4.1.1/Makefile.in Wed Jun 21 14:19:44 2006
|
||||||
|
***************
|
||||||
|
*** 213,219 ****
|
||||||
|
RAW_CXX_TARGET_EXPORTS = \
|
||||||
|
$(BASE_TARGET_EXPORTS) \
|
||||||
|
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
||||||
|
! CXX="$(RAW_CXX_FOR_TARGET)"; export CXX;
|
||||||
|
|
||||||
|
NORMAL_TARGET_EXPORTS = \
|
||||||
|
$(BASE_TARGET_EXPORTS) \
|
||||||
|
--- 213,220 ----
|
||||||
|
RAW_CXX_TARGET_EXPORTS = \
|
||||||
|
$(BASE_TARGET_EXPORTS) \
|
||||||
|
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
||||||
|
! CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; \
|
||||||
|
! CXXCPP="$(RAW_CXX_FOR_TARGET) $(CFLAGS_FOR_BUILD) -E"; export CXXCPP;
|
||||||
|
|
||||||
|
NORMAL_TARGET_EXPORTS = \
|
||||||
|
$(BASE_TARGET_EXPORTS) \
|
@ -22,10 +22,10 @@ let {
|
|||||||
inherit param1 param2 param3 param4 param5;
|
inherit param1 param2 param3 param4 param5;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add a utility function to produce derivations that use this
|
|
||||||
# stdenv and its shell.
|
|
||||||
// {
|
// {
|
||||||
|
|
||||||
|
# Add a utility function to produce derivations that use this
|
||||||
|
# stdenv and its shell.
|
||||||
mkDerivation = attrs:
|
mkDerivation = attrs:
|
||||||
(derivation (
|
(derivation (
|
||||||
(removeAttrs attrs ["meta"])
|
(removeAttrs attrs ["meta"])
|
||||||
@ -46,6 +46,9 @@ let {
|
|||||||
# queries.
|
# queries.
|
||||||
{ meta = if attrs ? meta then attrs.meta else {}; };
|
{ meta = if attrs ? meta then attrs.meta else {}; };
|
||||||
|
|
||||||
|
# Utility value: is this a Darwin system?
|
||||||
|
isDarwin = body.system == "i686-darwin" || body.system == "powerpc-darwin";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Propagate any extra attributes. For instance, we use this to
|
# Propagate any extra attributes. For instance, we use this to
|
||||||
|
@ -12,11 +12,11 @@ import ../generic {
|
|||||||
nativeGlibc = true;
|
nativeGlibc = true;
|
||||||
inherit stdenv;
|
inherit stdenv;
|
||||||
binutils =
|
binutils =
|
||||||
if stdenv.system == "i686-darwin" || stdenv.system == "powerpc-darwin" then
|
if stdenv.isDarwin then
|
||||||
import ../../build-support/native-darwin-cctools-wrapper {inherit stdenv;}
|
import ../../build-support/native-darwin-cctools-wrapper {inherit stdenv;}
|
||||||
else
|
else
|
||||||
pkgs.binutils;
|
pkgs.binutils;
|
||||||
gcc = pkgs.gcc.gcc;
|
gcc = if stdenv.isDarwin then pkgs.gccApple.gcc else pkgs.gcc.gcc;
|
||||||
shell = pkgs.bash ~ /bin/sh;
|
shell = pkgs.bash ~ /bin/sh;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -625,6 +625,11 @@ rec {
|
|||||||
profiledCompiler = true;
|
profiledCompiler = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
gccApple = wrapGCC (import ../development/compilers/gcc-apple {
|
||||||
|
inherit fetchurl stdenv noSysDirs;
|
||||||
|
profiledCompiler = true;
|
||||||
|
});
|
||||||
|
|
||||||
gcc40sparc = (import ../build-support/gcc-cross-wrapper) {
|
gcc40sparc = (import ../build-support/gcc-cross-wrapper) {
|
||||||
nativeTools = false;
|
nativeTools = false;
|
||||||
nativeGlibc = false;
|
nativeGlibc = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user