parent
8ef1d4ecdb
commit
a3b1f48c5d
@ -0,0 +1,245 @@ |
||||
source $stdenv/setup |
||||
|
||||
|
||||
export NIX_FIXINC_DUMMY=$NIX_BUILD_TOP/dummy |
||||
mkdir $NIX_FIXINC_DUMMY |
||||
|
||||
|
||||
if test "$staticCompiler" = "1"; then |
||||
EXTRA_LDFLAGS="-static" |
||||
else |
||||
EXTRA_LDFLAGS="" |
||||
fi |
||||
|
||||
# GCC interprets empty paths as ".", which we don't want. |
||||
if test -z "$CPATH"; then unset CPATH; fi |
||||
if test -z "$LIBRARY_PATH"; then unset LIBRARY_PATH; fi |
||||
echo "\$CPATH is \`$CPATH'" |
||||
echo "\$LIBRARY_PATH is \`$LIBRARY_PATH'" |
||||
|
||||
if test "$noSysDirs" = "1"; then |
||||
|
||||
if test -e $NIX_GCC/nix-support/orig-libc; then |
||||
|
||||
# Figure out what extra flags to pass to the gcc compilers |
||||
# being generated to make sure that they use our glibc. |
||||
extraFlags="$(cat $NIX_GCC/nix-support/libc-cflags)" |
||||
extraLDFlags="$(cat $NIX_GCC/nix-support/libc-ldflags) $(cat $NIX_GCC/nix-support/libc-ldflags-before)" |
||||
|
||||
# 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=$(cat $NIX_GCC/nix-support/orig-libc)/include |
||||
|
||||
# The path to the Glibc binaries such as `crti.o'. |
||||
glibc_libdir="$(cat $NIX_GCC/nix-support/orig-libc)/lib" |
||||
|
||||
else |
||||
# Hack: support impure environments. |
||||
extraFlags="-isystem /usr/include" |
||||
extraLDFlags="-L/usr/lib64 -L/usr/lib" |
||||
glibc_libdir="/usr/lib" |
||||
export NIX_FIXINC_DUMMY=/usr/include |
||||
fi |
||||
|
||||
extraFlags="-I$NIX_FIXINC_DUMMY $extraFlags" |
||||
extraLDFlags="-L$glibc_libdir -rpath $glibc_libdir $extraLDFlags" |
||||
|
||||
# BOOT_CFLAGS defaults to `-g -O2'; since we override it below, |
||||
# make sure to explictly add them so that files compiled with the |
||||
# bootstrap compiler are optimized and (optionally) contain |
||||
# debugging information (info "(gccinstall) Building"). |
||||
if test -n "$dontStrip"; then |
||||
extraFlags="-O2 -g $extraFlags" |
||||
else |
||||
# Don't pass `-g' at all; this saves space while building. |
||||
extraFlags="-O2 $extraFlags" |
||||
fi |
||||
|
||||
EXTRA_FLAGS="$extraFlags" |
||||
for i in $extraLDFlags; do |
||||
EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,$i" |
||||
done |
||||
|
||||
if test -n "$targetConfig"; then |
||||
# Cross-compiling, we need gcc not to read ./specs in order to build |
||||
# the g++ compiler (after the specs for the cross-gcc are created). |
||||
# Having LIBRARY_PATH= makes gcc read the specs from ., and the build |
||||
# breaks. Having this variable comes from the default.nix code to bring |
||||
# gcj in. |
||||
unset LIBRARY_PATH |
||||
unset CPATH |
||||
if test -z "$crossStageStatic"; then |
||||
EXTRA_TARGET_CFLAGS="-B${libcCross}/lib -idirafter ${libcCross}/include" |
||||
EXTRA_TARGET_LDFLAGS="-Wl,-L${libcCross}/lib -Wl,-rpath,${libcCross}/lib -Wl,-rpath-link,${libcCross}/lib" |
||||
fi |
||||
else |
||||
if test -z "$NIX_GCC_CROSS"; then |
||||
EXTRA_TARGET_CFLAGS="$EXTRA_FLAGS" |
||||
EXTRA_TARGET_CXXFLAGS="$EXTRA_FLAGS" |
||||
EXTRA_TARGET_LDFLAGS="$EXTRA_LDFLAGS" |
||||
else |
||||
# This the case of cross-building the gcc. |
||||
# We need special flags for the target, different than those of the build |
||||
# Assertion: |
||||
test -e $NIX_GCC_CROSS/nix-support/orig-libc |
||||
|
||||
# Figure out what extra flags to pass to the gcc compilers |
||||
# being generated to make sure that they use our glibc. |
||||
extraFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-cflags)" |
||||
extraLDFlags="$(cat $NIX_GCC_CROSS/nix-support/libc-ldflags) $(cat $NIX_GCC_CROSS/nix-support/libc-ldflags-before)" |
||||
|
||||
# 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). |
||||
NIX_FIXINC_DUMMY_CROSS=$(cat $NIX_GCC_CROSS/nix-support/orig-libc)/include |
||||
|
||||
# The path to the Glibc binaries such as `crti.o'. |
||||
glibc_dir="$(cat $NIX_GCC_CROSS/nix-support/orig-libc)" |
||||
glibc_libdir="$glibc_dir/lib" |
||||
configureFlags="$configureFlags --with-native-system-header-dir=$glibc_dir/include" |
||||
|
||||
extraFlags="-I$NIX_FIXINC_DUMMY_CROSS $extraFlags" |
||||
extraLDFlags="-L$glibc_libdir -rpath $glibc_libdir $extraLDFlags" |
||||
|
||||
EXTRA_TARGET_CFLAGS="$extraFlags" |
||||
for i in $extraLDFlags; do |
||||
EXTRA_TARGET_LDFLAGS="$EXTRA_TARGET_LDFLAGS -Wl,$i" |
||||
done |
||||
fi |
||||
fi |
||||
|
||||
|
||||
# CFLAGS_FOR_TARGET are needed for the libstdc++ configure script to find |
||||
# the startfiles. |
||||
# FLAGS_FOR_TARGET are needed for the target libraries to receive the -Bxxx |
||||
# for the startfiles. |
||||
makeFlagsArray=( \ |
||||
"${makeFlagsArray[@]}" \ |
||||
NATIVE_SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ |
||||
SYSTEM_HEADER_DIR="$NIX_FIXINC_DUMMY" \ |
||||
CFLAGS_FOR_BUILD="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ |
||||
CXXFLAGS_FOR_BUILD="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ |
||||
CFLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ |
||||
CXXFLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ |
||||
FLAGS_FOR_TARGET="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ |
||||
LDFLAGS_FOR_BUILD="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ |
||||
LDFLAGS_FOR_TARGET="$EXTRA_TARGET_LDFLAGS $EXTRA_TARGET_LDFLAGS" \ |
||||
) |
||||
|
||||
if test -z "$targetConfig"; then |
||||
makeFlagsArray=( \ |
||||
"${makeFlagsArray[@]}" \ |
||||
BOOT_CFLAGS="$EXTRA_FLAGS $EXTRA_LDFLAGS" \ |
||||
BOOT_LDFLAGS="$EXTRA_TARGET_CFLAGS $EXTRA_TARGET_LDFLAGS" \ |
||||
) |
||||
fi |
||||
|
||||
if test -n "$targetConfig" -a "$crossStageStatic" == 1; then |
||||
# We don't want the gcc build to assume there will be a libc providing |
||||
# limits.h in this stagae |
||||
makeFlagsArray=( \ |
||||
"${makeFlagsArray[@]}" \ |
||||
LIMITS_H_TEST=false \ |
||||
) |
||||
else |
||||
makeFlagsArray=( \ |
||||
"${makeFlagsArray[@]}" \ |
||||
LIMITS_H_TEST=true \ |
||||
) |
||||
fi |
||||
fi |
||||
|
||||
if test -n "$targetConfig"; then |
||||
# The host strip will destroy some important details of the objects |
||||
dontStrip=1 |
||||
fi |
||||
|
||||
providedPreConfigure="$preConfigure"; |
||||
preConfigure() { |
||||
if test -n "$newlibSrc"; then |
||||
tar xvf "$newlibSrc" -C .. |
||||
ln -s ../newlib-*/newlib newlib |
||||
# Patch to get armvt5el working: |
||||
sed -i -e 's/ arm)/ arm*)/' newlib/configure.host |
||||
fi |
||||
# Bug - they packaged zlib |
||||
if test -d "zlib"; then |
||||
# This breaks the build without-headers, which should build only |
||||
# the target libgcc as target libraries. |
||||
# See 'configure:5370' |
||||
rm -Rf zlib |
||||
fi |
||||
|
||||
if test -f "$NIX_GCC/nix-support/orig-libc"; then |
||||
# Patch the configure script so it finds glibc headers. It's |
||||
# important for example in order not to get libssp built, |
||||
# because its functionality is in glibc already. |
||||
glibc_headers="$(cat $NIX_GCC/nix-support/orig-libc)/include" |
||||
sed -i \ |
||||
-e "s,glibc_header_dir=/usr/include,glibc_header_dir=$glibc_headers", \ |
||||
gcc/configure |
||||
fi |
||||
|
||||
if test -n "$crossMingw" -a -n "$crossStageStatic"; then |
||||
mkdir -p ../mingw |
||||
# --with-build-sysroot expects that: |
||||
cp -R $libcCross/include ../mingw |
||||
configureFlags="$configureFlags --with-build-sysroot=`pwd`/.." |
||||
fi |
||||
|
||||
# Eval the preConfigure script from nix expression. |
||||
eval $providedPreConfigure; |
||||
env; |
||||
# Perform the build in a different directory. |
||||
mkdir ../build |
||||
cd ../build |
||||
configureScript=../$sourceRoot/configure |
||||
} |
||||
|
||||
|
||||
postConfigure() { |
||||
# Don't store the configure flags in the resulting executables. |
||||
sed -e '/TOPLEVEL_CONFIGURE_ARGUMENTS=/d' -i Makefile |
||||
} |
||||
|
||||
|
||||
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 |
||||
rm -rf $out/lib/gcc/*/*/install-tools |
||||
|
||||
# More dependencies with the previous gcc or some libs (gccbug stores the build command line) |
||||
rm -rf $out/bin/gccbug |
||||
# Take out the bootstrap-tools from the rpath, as it's not needed at all having $out |
||||
for i in $out/libexec/gcc/*/*/*; do |
||||
if PREV_RPATH=`patchelf --print-rpath $i`; then |
||||
patchelf --set-rpath `echo $PREV_RPATH | sed 's,:[^:]*bootstrap-tools/lib,,'` $i |
||||
fi |
||||
done |
||||
|
||||
# Get rid of some "fixed" header files |
||||
rm -rf $out/lib/gcc/*/*/include/root |
||||
|
||||
# Replace hard links for i686-pc-linux-gnu-gcc etc. with symlinks. |
||||
for i in $out/bin/*-gcc*; do |
||||
if cmp -s $out/bin/gcc $i; then |
||||
ln -sfn gcc $i |
||||
fi |
||||
done |
||||
|
||||
for i in $out/bin/c++ $out/bin/*-c++* $out/bin/*-g++*; do |
||||
if cmp -s $out/bin/g++ $i; then |
||||
ln -sfn g++ $i |
||||
fi |
||||
done |
||||
|
||||
eval "$postInstallGhdl" |
||||
} |
||||
|
||||
genericBuild |
@ -0,0 +1,530 @@ |
||||
{ stdenv, fetchurl, noSysDirs |
||||
, langC ? true, langCC ? true, langFortran ? false |
||||
, langJava ? false |
||||
, langAda ? false |
||||
, langVhdl ? false |
||||
, langGo ? false |
||||
, profiledCompiler ? false |
||||
, staticCompiler ? false |
||||
, enableShared ? true |
||||
, texinfo ? null |
||||
, perl ? null # optional, for texi2pod (then pod2man); required for Java |
||||
, gmp, mpfr, mpc, gettext, which |
||||
, libelf # optional, for link-time optimizations (LTO) |
||||
, ppl ? null, cloog ? null, isl ? null # optional, for the Graphite optimization framework. |
||||
, zlib ? null, boehmgc ? null |
||||
, zip ? null, unzip ? null, pkgconfig ? null, gtk ? null, libart_lgpl ? null |
||||
, libX11 ? null, libXt ? null, libSM ? null, libICE ? null, libXtst ? null |
||||
, libXrender ? null, xproto ? null, renderproto ? null, xextproto ? null |
||||
, libXrandr ? null, libXi ? null, inputproto ? null, randrproto ? null |
||||
, gnatboot ? null |
||||
, enableMultilib ? false |
||||
, enablePlugin ? true # whether to support user-supplied plug-ins |
||||
, name ? "gcc" |
||||
, cross ? null |
||||
, binutilsCross ? null |
||||
, libcCross ? null |
||||
, crossStageStatic ? true |
||||
, gnat ? null |
||||
, libpthread ? null, libpthreadCross ? null # required for GNU/Hurd |
||||
, stripped ? true |
||||
, gnused ? null |
||||
}: |
||||
|
||||
assert langJava -> zip != null && unzip != null |
||||
&& zlib != null && boehmgc != null |
||||
&& perl != null; # for `--enable-java-home' |
||||
assert langAda -> gnatboot != null; |
||||
assert langVhdl -> gnat != null; |
||||
|
||||
# We enable the isl cloog backend. |
||||
assert cloog != null -> isl != null; |
||||
|
||||
# LTO needs libelf and zlib. |
||||
assert libelf != null -> zlib != null; |
||||
|
||||
# Make sure we get GNU sed. |
||||
assert stdenv.isDarwin -> gnused != null; |
||||
|
||||
# The go frontend is written in c++ |
||||
assert langGo -> langCC; |
||||
|
||||
with stdenv.lib; |
||||
with builtins; |
||||
|
||||
let version = "4.9.0"; |
||||
|
||||
# Whether building a cross-compiler for GNU/Hurd. |
||||
crossGNU = cross != null && cross.config == "i586-pc-gnu"; |
||||
|
||||
/* gccinstall.info says that "parallel make is currently not supported since |
||||
collisions in profile collecting may occur". |
||||
*/ |
||||
enableParallelBuilding = !profiledCompiler; |
||||
|
||||
patches = [ ] |
||||
++ optional enableParallelBuilding ./parallel-bconfig.patch |
||||
++ optional (cross != null) ./libstdc++-target.patch |
||||
# ++ optional noSysDirs ./no-sys-dirs.patch |
||||
# The GNAT Makefiles did not pay attention to CFLAGS_FOR_TARGET for its |
||||
# target libraries and tools. |
||||
++ optional langAda ./gnat-cflags.patch |
||||
++ optional langFortran ./gfortran-driving.patch; |
||||
|
||||
javaEcj = fetchurl { |
||||
# The `$(top_srcdir)/ecj.jar' file is automatically picked up at |
||||
# `configure' time. |
||||
|
||||
# XXX: Eventually we might want to take it from upstream. |
||||
url = "ftp://sourceware.org/pub/java/ecj-4.3.jar"; |
||||
sha256 = "0jz7hvc0s6iydmhgh5h2m15yza7p2rlss2vkif30vm9y77m97qcx"; |
||||
}; |
||||
|
||||
# Antlr (optional) allows the Java `gjdoc' tool to be built. We want a |
||||
# binary distribution here to allow the whole chain to be bootstrapped. |
||||
javaAntlr = fetchurl { |
||||
url = http://www.antlr.org/download/antlr-3.1.3.jar; |
||||
sha256 = "1f41j0y4kjydl71lqlvr73yagrs2jsg1fjymzjz66mjy7al5lh09"; |
||||
}; |
||||
|
||||
xlibs = [ |
||||
libX11 libXt libSM libICE libXtst libXrender libXrandr libXi |
||||
xproto renderproto xextproto inputproto randrproto |
||||
]; |
||||
|
||||
javaAwtGtk = langJava && gtk != null; |
||||
|
||||
/* Platform flags */ |
||||
platformFlags = let |
||||
gccArch = stdenv.platform.gcc.arch or null; |
||||
gccCpu = stdenv.platform.gcc.cpu or null; |
||||
gccAbi = stdenv.platform.gcc.abi or null; |
||||
gccFpu = stdenv.platform.gcc.fpu or null; |
||||
gccFloat = stdenv.platform.gcc.float or null; |
||||
gccMode = stdenv.platform.gcc.mode or null; |
||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else ""; |
||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else ""; |
||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else ""; |
||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else ""; |
||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else ""; |
||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else ""; |
||||
in |
||||
withArch + |
||||
withCpu + |
||||
withAbi + |
||||
withFpu + |
||||
withFloat + |
||||
withMode; |
||||
|
||||
/* Cross-gcc settings */ |
||||
crossMingw = cross != null && cross.libc == "msvcrt"; |
||||
crossDarwin = cross != null && cross.libc == "libSystem"; |
||||
crossConfigureFlags = let |
||||
gccArch = stdenv.cross.gcc.arch or null; |
||||
gccCpu = stdenv.cross.gcc.cpu or null; |
||||
gccAbi = stdenv.cross.gcc.abi or null; |
||||
gccFpu = stdenv.cross.gcc.fpu or null; |
||||
gccFloat = stdenv.cross.gcc.float or null; |
||||
gccMode = stdenv.cross.gcc.mode or null; |
||||
withArch = if gccArch != null then " --with-arch=${gccArch}" else ""; |
||||
withCpu = if gccCpu != null then " --with-cpu=${gccCpu}" else ""; |
||||
withAbi = if gccAbi != null then " --with-abi=${gccAbi}" else ""; |
||||
withFpu = if gccFpu != null then " --with-fpu=${gccFpu}" else ""; |
||||
withFloat = if gccFloat != null then " --with-float=${gccFloat}" else ""; |
||||
withMode = if gccMode != null then " --with-mode=${gccMode}" else ""; |
||||
in |
||||
"--target=${cross.config}" + |
||||
withArch + |
||||
withCpu + |
||||
withAbi + |
||||
withFpu + |
||||
withFloat + |
||||
withMode + |
||||
(if crossMingw && crossStageStatic then |
||||
" --with-headers=${libcCross}/include" + |
||||
" --with-gcc" + |
||||
" --with-gnu-as" + |
||||
" --with-gnu-ld" + |
||||
" --with-gnu-ld" + |
||||
" --disable-shared" + |
||||
" --disable-nls" + |
||||
" --disable-debug" + |
||||
" --enable-sjlj-exceptions" + |
||||
" --enable-threads=win32" + |
||||
" --disable-win32-registry" |
||||
else if crossStageStatic then |
||||
" --disable-libssp --disable-nls" + |
||||
" --without-headers" + |
||||
" --disable-threads " + |
||||
" --disable-libmudflap " + |
||||
" --disable-libgomp " + |
||||
" --disable-libquadmath" + |
||||
" --disable-shared" + |
||||
" --disable-decimal-float" # libdecnumber requires libc |
||||
else |
||||
(if crossDarwin then " --with-sysroot=${libcCross}/share/sysroot" |
||||
else " --with-headers=${libcCross}/include") + |
||||
# Ensure that -print-prog-name is able to find the correct programs. |
||||
(stdenv.lib.optionalString (crossMingw || crossDarwin) ( |
||||
" --with-as=${binutilsCross}/bin/${cross.config}-as" + |
||||
" --with-ld=${binutilsCross}/bin/${cross.config}-ld" |
||||
)) + |
||||
" --enable-__cxa_atexit" + |
||||
" --enable-long-long" + |
||||
(if crossMingw then |
||||
" --enable-threads=win32" + |
||||
" --enable-sjlj-exceptions" + |
||||
" --enable-hash-synchronization" + |
||||
" --disable-libssp" + |
||||
" --disable-nls" + |
||||
" --with-dwarf2" + |
||||
# I think noone uses shared gcc libs in mingw, so we better do the same. |
||||
# In any case, mingw32 g++ linking is broken by default with shared libs, |
||||
# unless adding "-lsupc++" to any linking command. I don't know why. |
||||
" --disable-shared" + |
||||
# To keep ABI compatibility with upstream mingw-w64 |
||||
" --enable-fully-dynamic-string" |
||||
else (if cross.libc == "uclibc" then |
||||
# In uclibc cases, libgomp needs an additional '-ldl' |
||||
# and as I don't know how to pass it, I disable libgomp. |
||||
" --disable-libgomp" else "") + |
||||
" --enable-threads=posix" + |
||||
" --enable-nls" + |
||||
" --disable-decimal-float") # No final libdecnumber (it may work only in 386) |
||||
); |
||||
stageNameAddon = if crossStageStatic then "-stage-static" else "-stage-final"; |
||||
crossNameAddon = if cross != null then "-${cross.config}" + stageNameAddon else ""; |
||||
|
||||
bootstrap = cross == null && !stdenv.isArm && !stdenv.isMips; |
||||
|
||||
in |
||||
|
||||
# We need all these X libraries when building AWT with GTK+. |
||||
assert gtk != null -> (filter (x: x == null) xlibs) == []; |
||||
|
||||
stdenv.mkDerivation ({ |
||||
name = "${name}${if stripped then "" else "-debug"}-${version}" + crossNameAddon; |
||||
|
||||
builder = ./builder.sh; |
||||
|
||||
src = fetchurl { |
||||
url = "mirror://gnu/gcc/gcc-${version}/gcc-${version}.tar.bz2"; |
||||
sha256 = "0mqjxpw2klskls00lwx1k24pnyzm3whqxg3hk74c3sddgfllgc5r"; |
||||
}; |
||||
|
||||
inherit patches; |
||||
|
||||
postPatch = |
||||
if (stdenv.isGNU |
||||
|| (libcCross != null # e.g., building `gcc.crossDrv' |
||||
&& libcCross ? crossConfig |
||||
&& libcCross.crossConfig == "i586-pc-gnu") |
||||
|| (crossGNU && libcCross != null)) |
||||
then |
||||
# On GNU/Hurd glibc refers to Hurd & Mach headers and libpthread is not |
||||
# in glibc, so add the right `-I' flags to the default spec string. |
||||
assert libcCross != null -> libpthreadCross != null; |
||||
let |
||||
libc = if libcCross != null then libcCross else stdenv.glibc; |
||||
gnu_h = "gcc/config/gnu.h"; |
||||
extraCPPDeps = |
||||
libc.propagatedBuildInputs |
||||
++ stdenv.lib.optional (libpthreadCross != null) libpthreadCross |
||||
++ stdenv.lib.optional (libpthread != null) libpthread; |
||||
extraCPPSpec = |
||||
concatStrings (intersperse " " |
||||
(map (x: "-I${x}/include") extraCPPDeps)); |
||||
extraLibSpec = |
||||
if libpthreadCross != null |
||||
then "-L${libpthreadCross}/lib ${libpthreadCross.TARGET_LDFLAGS}" |
||||
else "-L${libpthread}/lib"; |
||||
in |
||||
'' echo "augmenting \`CPP_SPEC' in \`${gnu_h}' with \`${extraCPPSpec}'..." |
||||
sed -i "${gnu_h}" \ |
||||
-es'|CPP_SPEC *"\(.*\)$|CPP_SPEC "${extraCPPSpec} \1|g' |
||||
|
||||
echo "augmenting \`LIB_SPEC' in \`${gnu_h}' with \`${extraLibSpec}'..." |
||||
sed -i "${gnu_h}" \ |
||||
-es'|LIB_SPEC *"\(.*\)$|LIB_SPEC "${extraLibSpec} \1|g' |
||||
|
||||
echo "setting \`NATIVE_SYSTEM_HEADER_DIR' and \`STANDARD_INCLUDE_DIR' to \`${libc}/include'..." |
||||
sed -i "${gnu_h}" \ |
||||
-es'|#define STANDARD_INCLUDE_DIR.*$|#define STANDARD_INCLUDE_DIR "${libc}/include"|g' |
||||
'' |
||||
else if cross != null || stdenv.gcc.libc != null then |
||||
# On NixOS, use the right path to the dynamic linker instead of |
||||
# `/lib/ld*.so'. |
||||
let |
||||
libc = if libcCross != null then libcCross else stdenv.gcc.libc; |
||||
in |
||||
'' echo "fixing the \`GLIBC_DYNAMIC_LINKER' and \`UCLIBC_DYNAMIC_LINKER' macros..." |
||||
for header in "gcc/config/"*-gnu.h "gcc/config/"*"/"*.h |
||||
do |
||||
grep -q LIBC_DYNAMIC_LINKER "$header" || continue |
||||
echo " fixing \`$header'..." |
||||
sed -i "$header" \ |
||||
-e 's|define[[:blank:]]*\([UCG]\+\)LIBC_DYNAMIC_LINKER\([0-9]*\)[[:blank:]]"\([^\"]\+\)"$|define \1LIBC_DYNAMIC_LINKER\2 "${libc}\3"|g' |
||||
done |
||||
'' |
||||
else null; |
||||
|
||||
inherit noSysDirs staticCompiler langJava crossStageStatic |
||||
libcCross crossMingw; |
||||
|
||||
nativeBuildInputs = [ texinfo which gettext ] |
||||
++ (optional (perl != null) perl) |
||||
++ (optional javaAwtGtk pkgconfig); |
||||
|
||||
buildInputs = [ gmp mpfr mpc libelf ] |
||||
++ (optional (ppl != null) ppl) |
||||
++ (optional (cloog != null) cloog) |
||||
++ (optional (isl != null) isl) |
||||
++ (optional (zlib != null) zlib) |
||||
++ (optionals langJava [ boehmgc zip unzip ]) |
||||
++ (optionals javaAwtGtk ([ gtk libart_lgpl ] ++ xlibs)) |
||||
++ (optionals (cross != null) [binutilsCross]) |
||||
++ (optionals langAda [gnatboot]) |
||||
++ (optionals langVhdl [gnat]) |
||||
|
||||
# The builder relies on GNU sed (for instance, Darwin's `sed' fails with |
||||
# "-i may not be used with stdin"), and `stdenvNative' doesn't provide it. |
||||
++ (optional stdenv.isDarwin gnused) |
||||
; |
||||
|
||||
NIX_LDFLAGS = stdenv.lib.optionalString stdenv.isSunOS "-lm -ldl"; |
||||
|
||||
preConfigure = '' |
||||
configureFlagsArray=( |
||||
${stdenv.lib.optionalString (ppl != null && ppl ? dontDisableStatic && ppl.dontDisableStatic) |
||||
"'--with-host-libstdcxx=-lstdc++ -lgcc_s'"} |
||||
${stdenv.lib.optionalString (ppl != null && stdenv.isSunOS) |
||||
"\"--with-host-libstdcxx=-Wl,-rpath,\$prefix/lib/amd64 -lstdc++\" |
||||
\"--with-boot-ldflags=-L../prev-x86_64-pc-solaris2.11/libstdc++-v3/src/.libs\""} |
||||
); |
||||
${stdenv.lib.optionalString (stdenv.isSunOS && stdenv.is64bit) |
||||
'' |
||||
export NIX_LDFLAGS=`echo $NIX_LDFLAGS | sed -e s~$prefix/lib~$prefix/lib/amd64~g` |
||||
export LDFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $LDFLAGS_FOR_TARGET" |
||||
export CXXFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CXXFLAGS_FOR_TARGET" |
||||
export CFLAGS_FOR_TARGET="-Wl,-rpath,$prefix/lib/amd64 $CFLAGS_FOR_TARGET" |
||||
''} |
||||
''; |
||||
|
||||
dontDisableStatic = true; |
||||
|
||||
configureFlags = " |
||||
${if stdenv.isSunOS then |
||||
" --enable-long-long --enable-libssp --enable-threads=posix --disable-nls --enable-__cxa_atexit " + |
||||
# On Illumos/Solaris GNU as is preferred |
||||
" --with-gnu-as --without-gnu-ld " |
||||
else ""} |
||||
--enable-lto |
||||
${if enableMultilib then "--disable-libquadmath" else "--disable-multilib"} |
||||
${if enableShared then "" else "--disable-shared"} |
||||
${if enablePlugin then "--enable-plugin" else "--disable-plugin"} |
||||
${if ppl != null then "--with-ppl=${ppl} --disable-ppl-version-check" else ""} |
||||
${optionalString (isl != null) "--with-isl=${isl}"} |
||||
${optionalString (cloog != null) "--with-cloog=${cloog} --disable-cloog-version-check --enable-cloog-backend=isl"} |
||||
${if langJava then |
||||
"--with-ecj-jar=${javaEcj} " + |
||||
|
||||
# Follow Sun's layout for the convenience of IcedTea/OpenJDK. See |
||||
# <http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-April/008888.html>. |
||||
"--enable-java-home --with-java-home=\${prefix}/lib/jvm/jre " |
||||
else ""} |
||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""} |
||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr}" else ""} |
||||
--with-gmp=${gmp} |
||||
--with-mpfr=${mpfr} |
||||
--with-mpc=${mpc} |
||||
${if libelf != null then "--with-libelf=${libelf}" else ""} |
||||
--disable-libstdcxx-pch |
||||
--without-included-gettext |
||||
--with-system-zlib |
||||
--enable-static |
||||
--enable-languages=${ |
||||
concatStrings (intersperse "," |
||||
( optional langC "c" |
||||
++ optional langCC "c++" |
||||
++ optional langFortran "fortran" |
||||
++ optional langJava "java" |
||||
++ optional langAda "ada" |
||||
++ optional langVhdl "vhdl" |
||||
++ optional langGo "go" |
||||
++ optionals crossDarwin [ "objc" "obj-c++" ] |
||||
) |
||||
) |
||||
} |
||||
${if (stdenv ? glibc && cross == null) |
||||
then " --with-native-system-header-dir=${stdenv.glibc}/include" |
||||
else ""} |
||||
${if langAda then " --enable-libada" else ""} |
||||
${if cross == null && stdenv.isi686 then "--with-arch=i686" else ""} |
||||
${if cross != null then crossConfigureFlags else ""} |
||||
${if !bootstrap then "--disable-bootstrap" else ""} |
||||
${if cross == null then platformFlags else ""} |
||||
"; |
||||
|
||||
targetConfig = if cross != null then cross.config else null; |
||||
|
||||
buildFlags = if bootstrap then |
||||
(if profiledCompiler then "profiledbootstrap" else "bootstrap") |
||||
else ""; |
||||
|
||||
installTargets = |
||||
if stripped |
||||
then "install-strip" |
||||
else "install"; |
||||
|
||||
crossAttrs = let |
||||
xgccArch = stdenv.cross.gcc.arch or null; |
||||
xgccCpu = stdenv.cross.gcc.cpu or null; |
||||
xgccAbi = stdenv.cross.gcc.abi or null; |
||||
xgccFpu = stdenv.cross.gcc.fpu or null; |
||||
xgccFloat = stdenv.cross.gcc.float or null; |
||||
xwithArch = if xgccArch != null then " --with-arch=${xgccArch}" else ""; |
||||
xwithCpu = if xgccCpu != null then " --with-cpu=${xgccCpu}" else ""; |
||||
xwithAbi = if xgccAbi != null then " --with-abi=${xgccAbi}" else ""; |
||||
xwithFpu = if xgccFpu != null then " --with-fpu=${xgccFpu}" else ""; |
||||
xwithFloat = if xgccFloat != null then " --with-float=${xgccFloat}" else ""; |
||||
in { |
||||
AR = "${stdenv.cross.config}-ar"; |
||||
LD = "${stdenv.cross.config}-ld"; |
||||
CC = "${stdenv.cross.config}-gcc"; |
||||
CXX = "${stdenv.cross.config}-gcc"; |
||||
AR_FOR_TARGET = "${stdenv.cross.config}-ar"; |
||||
LD_FOR_TARGET = "${stdenv.cross.config}-ld"; |
||||
CC_FOR_TARGET = "${stdenv.cross.config}-gcc"; |
||||
NM_FOR_TARGET = "${stdenv.cross.config}-nm"; |
||||
CXX_FOR_TARGET = "${stdenv.cross.config}-g++"; |
||||
# If we are making a cross compiler, cross != null |
||||
NIX_GCC_CROSS = if cross == null then "${stdenv.gccCross}" else ""; |
||||
dontStrip = true; |
||||
configureFlags = '' |
||||
${if enableMultilib then "" else "--disable-multilib"} |
||||
${if enableShared then "" else "--disable-shared"} |
||||
${if ppl != null then "--with-ppl=${ppl.crossDrv}" else ""} |
||||
${if cloog != null then "--with-cloog=${cloog.crossDrv} --enable-cloog-backend=isl" else ""} |
||||
${if langJava then "--with-ecj-jar=${javaEcj.crossDrv}" else ""} |
||||
${if javaAwtGtk then "--enable-java-awt=gtk" else ""} |
||||
${if langJava && javaAntlr != null then "--with-antlr-jar=${javaAntlr.crossDrv}" else ""} |
||||
--with-gmp=${gmp.crossDrv} |
||||
--with-mpfr=${mpfr.crossDrv} |
||||
--disable-libstdcxx-pch |
||||
--without-included-gettext |
||||
--with-system-zlib |
||||
--enable-languages=${ |
||||
concatStrings (intersperse "," |
||||
( optional langC "c" |
||||
++ optional langCC "c++" |
||||
++ optional langFortran "fortran" |
||||
++ optional langJava "java" |
||||
++ optional langAda "ada" |
||||
++ optional langVhdl "vhdl" |
||||
++ optional langGo "go" |
||||
) |
||||
) |
||||
} |
||||
${if langAda then " --enable-libada" else ""} |
||||
--target=${stdenv.cross.config} |
||||
${xwithArch} |
||||
${xwithCpu} |
||||
${xwithAbi} |
||||
${xwithFpu} |
||||
${xwithFloat} |
||||
''; |
||||
buildFlags = ""; |
||||
}; |
||||
|
||||
|
||||
# Needed for the cross compilation to work |
||||
AR = "ar"; |
||||
LD = "ld"; |
||||
# http://gcc.gnu.org/install/specific.html#x86-64-x-solaris210 |
||||
CC = if stdenv.system == "x86_64-solaris" then "gcc -m64" else "gcc"; |
||||
|
||||
# Setting $CPATH and $LIBRARY_PATH to make sure both `gcc' and `xgcc' find |
||||
# the library headers and binaries, regarless of the language being |
||||
# compiled. |
||||
|
||||
# Note: When building the Java AWT GTK+ peer, the build system doesn't |
||||
# honor `--with-gmp' et al., e.g., when building |
||||
# `libjava/classpath/native/jni/java-math/gnu_java_math_GMP.c', so we just |
||||
# add them to $CPATH and $LIBRARY_PATH in this case. |
||||
# |
||||
# Likewise, the LTO code doesn't find zlib. |
||||
|
||||
CPATH = concatStrings |
||||
(intersperse ":" (map (x: x + "/include") |
||||
(optionals (zlib != null) [ zlib ] |
||||
++ optionals langJava [ boehmgc ] |
||||
++ optionals javaAwtGtk xlibs |
||||
++ optionals javaAwtGtk [ gmp mpfr ] |
||||
++ optional (libpthread != null) libpthread |
||||
++ optional (libpthreadCross != null) libpthreadCross |
||||
|
||||
# On GNU/Hurd glibc refers to Mach & Hurd |
||||
# headers. |
||||
++ optionals (libcCross != null && libcCross ? "propagatedBuildInputs" ) |
||||
libcCross.propagatedBuildInputs))); |
||||
|
||||
LIBRARY_PATH = concatStrings |
||||
(intersperse ":" (map (x: x + "/lib") |
||||
(optionals (zlib != null) [ zlib ] |
||||
++ optionals langJava [ boehmgc ] |
||||
++ optionals javaAwtGtk xlibs |
||||
++ optionals javaAwtGtk [ gmp mpfr ] |
||||
++ optional (libpthread != null) libpthread))); |
||||
|
||||
EXTRA_TARGET_CFLAGS = |
||||
if cross != null && libcCross != null |
||||
then "-idirafter ${libcCross}/include" |
||||
else null; |
||||
|
||||
EXTRA_TARGET_LDFLAGS = |
||||
if cross != null && libcCross != null |
||||
then "-B${libcCross}/lib -Wl,-L${libcCross}/lib" + |
||||
(optionalString (libpthreadCross != null) |
||||
" -L${libpthreadCross}/lib -Wl,${libpthreadCross.TARGET_LDFLAGS}") |
||||
else null; |
||||
|
||||
passthru = |
||||
{ inherit langC langCC langAda langFortran langVhdl langGo enableMultilib version; }; |
||||
|
||||
inherit enableParallelBuilding; |
||||
|
||||
meta = { |
||||
homepage = http://gcc.gnu.org/; |
||||
license = "GPLv3+"; # runtime support libraries are typically LGPLv3+ |
||||
description = "GNU Compiler Collection, version ${version}" |
||||
+ (if stripped then "" else " (with debugging info)"); |
||||
|
||||
longDescription = '' |
||||
The GNU Compiler Collection includes compiler front ends for C, C++, |
||||
Objective-C, Fortran, OpenMP for C/C++/Fortran, Java, and Ada, as well |
||||
as libraries for these languages (libstdc++, libgcj, libgomp,...). |
||||
|
||||
GCC development is a part of the GNU Project, aiming to improve the |
||||
compiler used in the GNU system including the GNU/Linux variant. |
||||
''; |
||||
|
||||
maintainers = with stdenv.lib.maintainers; [ ludo viric shlevy simons ]; |
||||
|
||||
# Volunteers needed for the {Cyg,Dar}win ports of *PPL. |
||||
# gnatboot is not available out of linux platforms, so we disable the darwin build |
||||
# for the gnat (ada compiler). |
||||
platforms = |
||||
stdenv.lib.platforms.linux ++ |
||||
stdenv.lib.platforms.freebsd ++ |
||||
optionals (langAda == false) stdenv.lib.platforms.darwin; |
||||
}; |
||||
} |
||||
|
||||
// optionalAttrs (cross != null && cross.libc == "msvcrt" && crossStageStatic) { |
||||
makeFlags = [ "all-gcc" "all-target-libgcc" ]; |
||||
installTargets = "install-gcc install-target-libgcc"; |
||||
} |
||||
|
||||
# Strip kills static libs of other archs (hence cross != null) |
||||
// optionalAttrs (!stripped || cross != null) { dontStrip = true; NIX_STRIP_DEBUG = 0; } |
||||
) |
@ -0,0 +1,20 @@ |
||||
This patch fixes interaction with Libtool.
|
||||
See <http://thread.gmane.org/gmane.comp.gcc.patches/258777>, for details.
|
||||
|
||||
--- a/gcc/fortran/gfortranspec.c
|
||||
+++ b/gcc/fortran/gfortranspec.c
|
||||
@@ -461,8 +461,15 @@ For more information about these matters, see the file named COPYING\n\n"));
|
||||
{
|
||||
fprintf (stderr, _("Driving:"));
|
||||
for (i = 0; i < g77_newargc; i++)
|
||||
+ {
|
||||
+ if (g77_new_decoded_options[i].opt_index == OPT_l)
|
||||
+ /* Make sure no white space is inserted after `-l'. */
|
||||
+ fprintf (stderr, " -l%s",
|
||||
+ g77_new_decoded_options[i].canonical_option[1]);
|
||||
+ else
|
||||
fprintf (stderr, " %s",
|
||||
g77_new_decoded_options[i].orig_option_with_args_text);
|
||||
+ }
|
||||
fprintf (stderr, "\n");
|
||||
}
|
@ -0,0 +1,33 @@ |
||||
diff --git a/libada/Makefile.in b/libada/Makefile.in
|
||||
index f5057a0..337e0c6 100644
|
||||
--- a/libada/Makefile.in
|
||||
+++ b/libada/Makefile.in
|
||||
@@ -55,7 +55,7 @@ GCC_WARN_CFLAGS = $(LOOSE_WARN)
|
||||
WARN_CFLAGS = @warn_cflags@
|
||||
|
||||
TARGET_LIBGCC2_CFLAGS=
|
||||
-GNATLIBCFLAGS= -g -O2
|
||||
+GNATLIBCFLAGS= -g -O2 $(CFLAGS)
|
||||
GNATLIBCFLAGS_FOR_C = $(GNATLIBCFLAGS) $(TARGET_LIBGCC2_CFLAGS) -fexceptions \
|
||||
-DIN_RTS @have_getipinfo@
|
||||
|
||||
--- a/gcc/ada/gcc-interface/Makefile.in
|
||||
+++ b/gcc/ada/gcc-interface/Makefile.in
|
||||
@@ -105,7 +105,7 @@ ADAFLAGS = -W -Wall -gnatpg -gnata
|
||||
SOME_ADAFLAGS =-gnata
|
||||
FORCE_DEBUG_ADAFLAGS = -g
|
||||
GNATLIBFLAGS = -gnatpg -nostdinc
|
||||
-GNATLIBCFLAGS = -g -O2
|
||||
+GNATLIBCFLAGS = -g -O2 $(CFLAGS_FOR_TARGET)
|
||||
# Pretend that _Unwind_GetIPInfo is available for the target by default. This
|
||||
# should be autodetected during the configuration of libada and passed down to
|
||||
# here, but we need something for --disable-libada and hope for the best.
|
||||
@@ -193,7 +193,7 @@ RTSDIR = rts$(subst /,_,$(MULTISUBDIR))
|
||||
# Link flags used to build gnat tools. By default we prefer to statically
|
||||
# link with libgcc to avoid a dependency on shared libgcc (which is tricky
|
||||
# to deal with as it may conflict with the libgcc provided by the system).
|
||||
-GCC_LINK_FLAGS=-static-libgcc
|
||||
+GCC_LINK_FLAGS=-static-libgcc $(CFLAGS_FOR_TARGET)
|
||||
|
||||
# End of variables for you to override.
|
||||
|
@ -0,0 +1,32 @@ |
||||
Patch to make the target libraries 'configure' scripts find the proper CPP.
|
||||
I noticed that building the mingw32 cross compiler.
|
||||
Looking at the build script for mingw in archlinux, I think that only nixos
|
||||
needs this patch. I don't know why.
|
||||
diff --git a/Makefile.in b/Makefile.in
|
||||
index 93f66b6..d691917 100644
|
||||
--- a/Makefile.in
|
||||
+++ b/Makefile.in
|
||||
@@ -266,6 +266,7 @@ BASE_TARGET_EXPORTS = \
|
||||
AR="$(AR_FOR_TARGET)"; export AR; \
|
||||
AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
|
||||
CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
|
||||
+ CPP="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CC; \
|
||||
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
|
||||
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
||||
CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
|
||||
@@ -291,11 +292,13 @@ BASE_TARGET_EXPORTS = \
|
||||
RAW_CXX_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
||||
- CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
NORMAL_TARGET_EXPORTS = \
|
||||
$(BASE_TARGET_EXPORTS) \
|
||||
- CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
||||
+ CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; \
|
||||
+ CXXCPP="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS -E"; export CXX;
|
||||
|
||||
# Where to find GMP
|
||||
HOST_GMPLIBS = @gmplibs@
|
@ -0,0 +1,41 @@ |
||||
diff -ru gcc-4.3.1-orig/gcc/cppdefault.c gcc-4.3.1/gcc/cppdefault.c
|
||||
--- gcc-4.3.1-orig/gcc/cppdefault.c 2007-07-26 10:37:01.000000000 +0200
|
||||
+++ gcc-4.3.1/gcc/cppdefault.c 2008-06-25 17:48:23.000000000 +0200
|
||||
@@ -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 -ru gcc-4.3.1-orig/gcc/gcc.c gcc-4.3.1/gcc/gcc.c
|
||||
--- gcc-4.3.1-orig/gcc/gcc.c 2008-03-02 23:55:19.000000000 +0100
|
||||
+++ gcc-4.3.1/gcc/gcc.c 2008-06-25 17:52:53.000000000 +0200
|
||||
@@ -1478,10 +1478,10 @@
|
||||
/* Default prefixes to attach to command names. */
|
||||
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_1
|
||||
-#define STANDARD_STARTFILE_PREFIX_1 "/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_1 ""
|
||||
#endif
|
||||
#ifndef STANDARD_STARTFILE_PREFIX_2
|
||||
-#define STANDARD_STARTFILE_PREFIX_2 "/usr/lib/"
|
||||
+#define STANDARD_STARTFILE_PREFIX_2 ""
|
||||
#endif
|
||||
|
||||
#ifdef CROSS_DIRECTORY_STRUCTURE /* Don't use these prefixes for a cross compiler. */
|
||||
--- gcc-4.3.1-orig/gcc/Makefile.in 2008-05-11 20:54:15.000000000 +0200
|
||||
+++ gcc-4.3.1/gcc/Makefile.in 2008-06-25 17:48:23.000000000 +0200
|
||||
@@ -3277,7 +3281,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\" \
|
||||
-DPREFIX=\"$(prefix)/\" \
|
@ -0,0 +1,32 @@ |
||||
Hacky work-around for highly parallel builds.
|
||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57125
|
||||
|
||||
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
|
||||
index aad927c..182f666 100644
|
||||
--- a/gcc/Makefile.in
|
||||
+++ b/gcc/Makefile.in
|
||||
@@ -3908,21 +3908,21 @@ build/gengtype-lex.o: $(BCONFIG_H)
|
||||
|
||||
gengtype-parse.o build/gengtype-parse.o : gengtype-parse.c gengtype.h \
|
||||
$(SYSTEM_H)
|
||||
-gengtype-parse.o: $(CONFIG_H)
|
||||
+gengtype-parse.o: $(CONFIG_H) $(BCONFIG_H)
|
||||
CFLAGS-gengtype-parse.o += -DGENERATOR_FILE
|
||||
build/gengtype-parse.o: $(BCONFIG_H)
|
||||
|
||||
gengtype-state.o build/gengtype-state.o: gengtype-state.c $(SYSTEM_H) \
|
||||
gengtype.h errors.h double-int.h version.h $(HASHTAB_H) $(OBSTACK_H) \
|
||||
$(XREGEX_H)
|
||||
-gengtype-state.o: $(CONFIG_H)
|
||||
+gengtype-state.o: $(CONFIG_H) $(BCONFIG_H)
|
||||
CFLAGS-gengtype-state.o += -DGENERATOR_FILE
|
||||
build/gengtype-state.o: $(BCONFIG_H)
|
||||
|
||||
gengtype.o build/gengtype.o : gengtype.c $(SYSTEM_H) gengtype.h \
|
||||
rtl.def insn-notes.def errors.h double-int.h version.h $(HASHTAB_H) \
|
||||
$(OBSTACK_H) $(XREGEX_H)
|
||||
-gengtype.o: $(CONFIG_H)
|
||||
+gengtype.o: $(CONFIG_H) $(BCONFIG_H)
|
||||
CFLAGS-gengtype.o += -DGENERATOR_FILE
|
||||
build/gengtype.o: $(BCONFIG_H)
|
||||
|
Loading…
Reference in new issue