--- gcc/local-alloc.c.orig 2010-01-08 11:32:10.000000000 -0800 +++ gcc/local-alloc.c 2013-01-11 01:18:55.000000000 -0800 @@ -899,7 +899,7 @@ update_equiv_regs (void) /* APPLE LOCAL begin 5695218 */ if (reg_inheritance_matrix) { - int dstregno; + long dstregno; if (REG_P (dest)) { dstregno = REGNO (dest); @@ -2676,9 +2676,9 @@ static int reg_inheritance_1 (rtx *px, void *data) { rtx x = *px; - unsigned int srcregno, dstregno; + unsigned long srcregno, dstregno; - dstregno = (int)data; + dstregno = (long)data; #ifdef TARGET_386 /* Ugly special case: When moving a DI/SI/mode constant into an FP --- gcc/c-incpath.c.orig 2009-02-14 20:17:54.000000000 -0800 +++ gcc/c-incpath.c 2013-01-11 01:23:23.000000000 -0800 @@ -179,7 +179,7 @@ add_standard_paths (const char *sysroot, char *str; /* Should this directory start with the sysroot? */ - if (sysroot && p->add_sysroot) + if (sysroot && p->add_sysroot && strstr(p->fname, "llvm-gcc42") == NULL) /* LLVM LOCAL begin sysroot */ #ifdef ENABLE_LLVM str = TARGET_BUILD_SYSROOT_PATH(sysroot, p->fname); --- driverdriver.c.orig 2012-03-30 15:23:03.000000000 -0700 +++ driverdriver.c 2012-03-30 15:43:40.000000000 -0700 @@ -1599,7 +1599,7 @@ main (int argc, const char **argv) /* If more than one input files are supplied but only one output filename is present then IMA will be used. */ - if (num_infiles > 1 && !compile_only_request) + if (num_infiles != 1 && !compile_only_request) ima_is_used = 1; /* Linker wants to know this in case of multiple -arch. */ --- driverdriver.c.orig 2011-04-25 21:09:34.000000000 -0700 +++ driverdriver.c 2013-01-11 01:14:57.000000000 -0800 @@ -123,12 +123,14 @@ struct arch_config_guess_map arch_config {"ppc", "powerpc"}, {"ppc64", "powerpc"}, {"x86_64", "i686"}, +#ifdef CPU_TYPE_ARM {"arm", "arm"}, {"armv4t", "arm"}, {"armv5", "arm"}, {"xscale", "arm"}, {"armv6", "arm"}, {"armv7", "arm"}, +#endif {NULL, NULL} }; @@ -772,6 +774,7 @@ add_arch_options (int index, const char current_argv[arch_index] = "-march=pentium2"; else if (!strcmp (arches[index], "x86_64")) current_argv[arch_index] = "-m64"; +#ifdef CPU_TYPE_ARM else if (!strcmp (arches[index], "arm")) current_argv[arch_index] = "-march=armv4t"; else if (!strcmp (arches[index], "armv4t")) @@ -784,6 +787,7 @@ add_arch_options (int index, const char current_argv[arch_index] = "-march=armv6k"; else if (!strcmp (arches[index], "armv7")) current_argv[arch_index] = "-march=armv7a"; +#endif else count = 0; --- /dev/null 2013-07-06 17:06:23.000000000 -0400 +++ build_gcc.fink 2013-07-06 17:13:36.000000000 -0400 @@ -0,0 +1,902 @@ +#!/bin/sh +# APPLE LOCAL file B&I +set -x +export MAKEINFO=@@FINKPREFIX@@/opt/texinfo-legacy/bin/makeinfo +export PATH=@@FINKPREFIX@@/opt/texinfo-legacy/bin/:$PATH +# -arch arguments are different than configure arguments. We need to +# translate them. + +TRANSLATE_ARCH="sed -e s/ppc/powerpc/ -e s/i386/i686/ -e s/armv6/arm/" +OMIT_X86_64="sed -e s/x86_64//" + +# Build GCC the "Apple way". +# Parameters: + +# The first parameter is a space-separated list of the architectures +# the compilers will run on. For instance, "ppc i386". If the +# current machine isn't in the list, it will (effectively) be added. +HOSTS=`echo $1 | $TRANSLATE_ARCH ` + +# The second parameter is a space-separated list of the architectures the +# compilers will generate code for. If the current machine isn't in +# the list, a compiler for it will get built anyway, but won't be +# installed. +TARGETS=`echo $2 | $TRANSLATE_ARCH | $OMIT_X86_64 | sed -e s,\\',,g` + +# The GNU makefile target ('bootstrap' by default). +BOOTSTRAP=${BOOTSTRAP-bootstrap} +if [ "$BOOTSTRAP" != bootstrap ]; then + bootstrap=--disable-bootstrap +fi + +# Language front-ends to build. This also affects +# whether the C++ driver and driver-driver are installed +LANGUAGES=${LANGUAGES-c,objc,c++,obj-c++} + +# The B&I build script (~rc/bin/buildit) accepts an '-othercflags' +# command-line flag, and captures the argument to that flag in +# $RC_NONARCH_CFLAGS (and mysteriously prepends '-pipe' thereto). +# We will allow this to override the default $CFLAGS and $CXXFLAGS. + +# LLVM LOCAL begin +if [ "x$LLVM_DEBUG" == "x" ]; then + CFLAGS="-g -O2 ${RC_NONARCH_CFLAGS/-pipe/}" +else + CFLAGS="-g" +fi +# LLVM LOCAL end + +# This isn't a parameter; it is the architecture of the current machine. +BUILD=`echo x86_64 | $TRANSLATE_ARCH` + +# The third parameter is the path to the compiler sources. There should +# be a shell script named 'configure' in this directory. This script +# makes a copy... +ORIG_SRC_DIR="$3" + +# The fourth parameter is the location where the compiler will be installed, +# normally "/usr". You can move it once it's built, so this mostly controls +# the layout of $DEST_DIR. +DEST_ROOT="$4" + +# The fifth parameter is the place where the compiler will be copied once +# it's built. +DEST_DIR="$5" + +# The sixth parameter is a directory in which to place information (like +# unstripped executables and generated source files) helpful in debugging +# the resulting compiler. +SYM_DIR="$6" + +# LLVM LOCAL begin +# The seventh parameter is a yes/no that indicates whether libLTO.dylib +# should be installed from LLVMCORE_PATH. +INSTALL_LIBLTO="$7" + +# The eighth parameter is a yes/no that indicates whether assertions should be +# enabled in the LLVM libs/tools. +LLVM_ASSERTIONS="$8" + +# The nineth parameter indicates llvmCore location. +LLVMCORE_PATH="$9" + +# The tenth parameter is the version number of the submission, e.g. 1007. +LLVM_SUBMIT_VERSION="${10}" + +# The eleventh parameter is the subversion number of the submission, e.g. 03. +LLVM_SUBMIT_SUBVERSION="${11}" + +ENABLE_LLVM=true + +# LLVM LOCAL end + +# The current working directory is where the build will happen. +# It may already contain a partial result of an interrupted build, +# in which case this script will continue where it left off. +DIR=`pwd` + +# This isn't a parameter; it's the version of the compiler that we're +# about to build. It's included in the names of various files and +# directories in the installed image. +VERS=`cat $ORIG_SRC_DIR/gcc/BASE-VER` +if [ -z "$VERS" ]; then + exit 1 +fi + +# This isn't a parameter either, it's the major version of the compiler +# to be built. It's VERS but only up to the second '.' (if there is one). +MAJ_VERS=`echo $VERS | sed 's/\([0-9]*\.[0-9]*\)[.-].*/\1/'` + +# This is the libstdc++ version to use. +LIBSTDCXX_VERSION=4.2.1 +# LLVM LOCAL begin +# DO NOT USE $DEST_ROOT to check LIBSTDCXX_VERSION here. Directly use /usr here. +# $DEST_ROOT is /Developer for llvm-gcc +if [ ! -d "/usr/include/c++/$LIBSTDCXX_VERSION" ]; then + LIBSTDCXX_VERSION=4.2.1 +fi +NON_ARM_CONFIGFLAGS="--with-gxx-include-dir=/usr/include/c++/$LIBSTDCXX_VERSION" +# LLVM LOCAL end + +# Build against the MacOSX10.5 SDK for PowerPC. +PPC_SYSROOT=/Developer/SDKs/MacOSX10.5.sdk +PPC_CONFIGFLAGS="$NON_ARM_CONFIGFLAGS --with-build-sysroot=\"$PPC_SYSROOT\"" + +DARWIN_VERS=`uname -r | sed 's/\..*//'` +echo DARWIN_VERS = $DARWIN_VERS + +# APPLE LOCAL begin ARM +ARM_LIBSTDCXX_VERSION=4.2.1 +ARM_CONFIGFLAGS="--with-gxx-include-dir=/usr/include/c++/$ARM_LIBSTDCXX_VERSION" + +# When building for a non-embedded train, ARM defaults to MacOSX, just like +# x86 and ppc. +if [ "x$RC_TARGET_CONFIG" = "xiPhone" ]; then + ARM_DARWIN_TARGET_IPHONEOS="YES" +fi + +if [ -n "$ARM_SDK" ]; then + ARM_PLATFORM=`xcodebuild -version -sdk $ARM_SDK PlatformPath` + ARM_SYSROOT=`xcodebuild -version -sdk $ARM_SDK Path` +else + # Use bootstrap SDK if it is available. + # FIXME: This can be removed once all builds set ARM_SDK. + if [ -d /Developer/SDKs/Extra ]; then + ARM_SYSROOT=/Developer/SDKs/Extra + else + ARM_SYSROOT=/ + fi + ARM_PLATFORM=/ +fi +ARM_CONFIGFLAGS="$ARM_CONFIGFLAGS --with-build-sysroot=\"$ARM_SYSROOT\"" + +# If it's being built for iPhoneOS, assume the llvmCore bits are under +# iPhoneOS platform directory. +if [ "x$RC_ProjectName" = "xllvmgcc42_Embedded" ]; then + LLVMCORE_PATH="${ARM_PLATFORM}${LLVMCORE_PATH}" + DEST_ROOT="${ARM_PLATFORM}${DEST_ROOT}" +fi + +# If building an ARM target, check that the required directories exist +# and query the libSystem arm slices to determine which multilibs we should +# build. +if echo $TARGETS | grep arm; then + if [ ! -d $ARM_SYSROOT ]; then + echo "Error: cannot find ARM SDK to build ARM target" + exit 1 + fi + if [ "x$ARM_MULTILIB_ARCHS" = "x" ] ; then + ARM_MULTILIB_ARCHS=`/usr/bin/lipo -info $ARM_SYSROOT/usr/lib/libSystem.dylib | cut -d':' -f 3 | sed -e 's/x86_64//' -e 's/i386//' -e 's/ppc7400//' -e 's/ppc64//' -e 's/^ *//' -e 's/ $//'` + fi; + if [ "x$ARM_MULTILIB_ARCHS" == "x" ] ; then + echo "Error: missing ARM slices in $ARM_SYSROOT" + exit 1 + else + export ARM_MULTILIB_ARCHS + fi +fi +# APPLE LOCAL end ARM + +# LLVM LOCAL begin +RANLIB=${RANLIB_FOR_HOST-ranlib} +STRIP=${STRIP_FOR_HOST-strip} +DSYMUTIL=${DSYMUTIL_FOR_HOST-dsymutil} +# LLVM LOCAL end + +######################################## +# Run the build. + +# Create the source tree we'll actually use to build, deleting +# tcl since it doesn't actually build properly in a cross environment +# and we don't really need it. +SRC_DIR=$DIR/src +rm -rf $SRC_DIR || exit 1 +mkdir $SRC_DIR || exit 1 +ln -s $ORIG_SRC_DIR/* $SRC_DIR/ || exit 1 +rm -rf $SRC_DIR/tcl $SRC_DIR/expect $SRC_DIR/dejagnu || exit 1 +# Also remove libstdc++ since it is built from a separate project. +# LLVM LOCAL: The following line was commented out; uncomment it. +rm -rf $SRC_DIR/libstdc++-v3 || exit 1 +# Clean out old specs files +#rm -f /usr/lib/gcc/*/4.0.0/specs + +# These are the configure and build flags that are used. +# LLVM LOCAL begin +if [ "x$LLVM_DEBUG" == "x" ]; then + CHECKING_FLAGS="--disable-checking --enable-werror" +else + CHECKING_FLAGS="--enable-checking" +fi + +CONFIGFLAGS="$CHECKING_FLAGS \ + --prefix=$DEST_ROOT --infodir=\${prefix}/lib/llvm-gcc42/info \ + --mandir=\${prefix}/share/man \ + --enable-languages=$LANGUAGES \ + --libexecdir=$DEST_ROOT/lib/llvm-gcc42 \ + --libdir=$DEST_ROOT/lib/llvm-gcc42 \ + --includedir=$DEST_ROOT/include/llvm-gcc42 \ + --program-prefix=llvm- --with-libiconv-prefix=@@FINKPREFIX@@ \ + --program-suffix=-$MAJ_VERS \ + --with-system-zlib \ + --disable-nls --without-gmp --without-mpfr \ + --with-slibdir=/usr/lib \ + --build=$BUILD-apple-darwin$DARWIN_VERS" + +if [ "$ENABLE_LLVM" == true ]; then + CONFIGFLAGS="$CONFIGFLAGS --enable-llvm=$LLVMCORE_PATH" +fi +# LLVM LOCAL end + +# Figure out how many make processes to run. +SYSCTL=`sysctl -n hw.activecpu` + +# hw.activecpu only available in 10.2.6 and later +if [ -z "$SYSCTL" ]; then + SYSCTL=`sysctl -n hw.ncpu` +fi + +# sysctl -n hw.* does not work when invoked via B&I chroot /BuildRoot. +# Builders can default to 2, since even if they are single processor, +# nothing else is running on the machine. +if [ -z "$SYSCTL" ]; then + SYSCTL=2 +fi + +# The $LOCAL_MAKEFLAGS variable can be used to override $MAKEFLAGS. +MAKEFLAGS=${LOCAL_MAKEFLAGS-""} + +BUILD_CXX=0 +for lang in `echo $LANGUAGES | sed 's/,/ /g'`; do + if [ $lang = "c++" -o $lang = "obj-c++" ]; then + BUILD_CXX=1 + break + fi +done + +BUILD_JAVA=0 +for lang in `echo $LANGUAGES | sed 's/,/ /g'`; do + if [ $lang = "java" ]; then + BUILD_JAVA=1 + break + fi +done + +BUILD_FORTRAN=0 +for lang in `echo $LANGUAGES | sed 's/,/ /g'`; do + if [ $lang = "fortran" ]; then + BUILD_FORTRAN=1 + break + fi +done + +# Unset this, because GCC uses this variable in its makefiles +unset LANGUAGES + +# LLVM LOCAL begin +if [ "$ENABLE_LLVM" == true ]; then + # Indicate the llvm-gcc is being built "Apple style". + MAKEFLAGS="$MAKEFLAGS BUILD_LLVM_APPLE_STYLE=1" + # Build llvm-gcc in 'dylib mode'. + MAKEFLAGS="$MAKEFLAGS BUILD_LLVM_INTO_A_DYLIB=1" + if [ x$LLVM_SUBMIT_SUBVERSION == x ]; then + MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION" + else + MAKEFLAGS="$MAKEFLAGS LLVM_VERSION_INFO=$LLVM_SUBMIT_VERSION.$LLVM_SUBMIT_SUBVERSION" + fi +fi +# LLVM LOCAL end + +# If the user has set CC or CXX, respect their wishes. If not, +# compile with clang/clang++ if available; if LLVM is not +# available, fall back to usual GCC/G++ default. +XTMPCC=`xcrun -find clang` +if [ x"$CC" = x -a x"$XTMPCC" != x ] ; then export CC="$XTMPCC" forcedCC=1 ; fi +XTMPCC=`xcrun -find clang++` +if [ x"$CXX" = x -a x"$XTMPCC" != x ] ; then export CXX="$XTMPCC" forcedCXX=1 ; fi +unset XTMPCC + +# Build the native GCC. Do this even if the user didn't ask for it +# because it'll be needed for the bootstrap. +mkdir -p $DIR/obj-$BUILD-$BUILD $DIR/dst-$BUILD-$BUILD || exit 1 +cd $DIR/obj-$BUILD-$BUILD || exit 1 +if [ \! -f Makefile ]; then + $SRC_DIR/configure $bootstrap $CONFIGFLAGS $NON_ARM_CONFIGFLAGS \ + --host=$BUILD-apple-darwin$DARWIN_VERS \ + --target=$BUILD-apple-darwin$DARWIN_VERS || exit 1 +fi + +# Unset RC_DEBUG_OPTIONS because it causes the bootstrap to fail. +# Also keep unset for cross compilers so that the cross built libraries are +# comparable to the native built libraries. +unset RC_DEBUG_OPTIONS +/usr/bin/make $MAKEFLAGS -j $SYSCTL CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 +# The version check for makeinfo is broken in all the configure scripts, +# and building documentation which is already available online isn't worth +# the effort in fixing it +#make $MAKEFLAGS html CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 +/usr/bin/make $MAKEFLAGS -j 1 DESTDIR=$DIR/dst-$BUILD-$BUILD install-gcc install-target \ + CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 + +# Now that we've built a native compiler, un-kludge these so that +# subsequent cross-hosted compilers can be found normally. +if [ x$forcedCC != x ] ; then unset CC forcedCC ; fi +if [ x$forcedCXX != x ] ; then unset CXX forcedCXX ; fi + +# Add the compiler we just built to the path, giving it appropriate names. +# LLVM LOCAL begin Support for non /usr $DEST_ROOT +D=$DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin +ln -f $D/llvm-gcc-$MAJ_VERS $D/gcc || exit 1 +ln -f $D/gcc $D/$BUILD-apple-darwin$DARWIN_VERS-gcc || exit 1 +PATH=$DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin:$PATH +# LLVM LOCAL end Support for non /usr $DEST_ROOT + +# Set CC to our bootstrap CC +export CC=$D/gcc + +# The cross-tools' build process expects to find certain programs +# under names like 'i386-apple-darwin$DARWIN_VERS-ar'; so make them. +# Annoyingly, ranlib changes behaviour depending on what you call it, +# so we have to use a shell script for indirection, grrr. +rm -rf $DIR/bin || exit 1 +mkdir $DIR/bin || exit 1 +for prog in ar nm ranlib strip lipo ld ; do + for t in `echo $TARGETS $HOSTS | tr ' ' '\n' | sort -u`; do + P=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-${prog} + # Use the specified ARM_SDK for arm, but otherwise force the SDK to / for + # now, since SDKROOT may be set to an SDK that does not include support + # for all the targets being built (i.e., ppc). + if [ "$t" = "arm" -a -n "$ARM_SDK" ]; then + sdkoption="-sdk $ARM_SDK" + else + sdkoption="-sdk /" + fi + progpath=`xcrun $sdkoption -find $prog` + echo '#!/bin/sh' > $P || exit 1 + echo 'exec '${progpath}' "$@"' >> $P || exit 1 + chmod a+x $P || exit 1 + done +done +# The "as" script adds a default "-arch" option. Iterate over the lists of +# untranslated HOSTS and TARGETS in $1 and $2 so those names can be used as +# the arguments for "-arch" in the scripts. +for t in `echo $1 $2 | tr ' ' '\n' | sort -u`; do + gt=`echo $t | $TRANSLATE_ARCH` + P=$DIR/bin/${gt}-apple-darwin$DARWIN_VERS-as + if [ "$gt" = "arm" -a -n "$ARM_SDK" ]; then + sdkoption="-sdk $ARM_SDK" + else + sdkoption="-sdk /" + fi + progpath=`xcrun $sdkoption -find as` + echo '#!/bin/sh' > $P || exit 1 + echo 'for a; do case $a in -arch) exec '${progpath}' "$@";; esac; done' >> $P || exit 1 + echo 'exec '${progpath}' -arch '${t}' "$@"' >> $P || exit 1 + chmod a+x $P || exit 1 +done +PATH=$DIR/bin:$PATH + +# Determine which cross-compilers we should build. If our build architecture is +# one of our hosts, add all of the targets to the list. +if echo $HOSTS | grep $BUILD +then + CROSS_TARGETS=`echo $TARGETS $HOSTS | tr ' ' '\n' | sort -u` +else + CROSS_TARGETS="$HOSTS" +fi + +# Build the cross-compilers, using the compiler we just built. +for t in $CROSS_TARGETS ; do + if [ $t != $BUILD ] ; then + mkdir -p $DIR/obj-$BUILD-$t $DIR/dst-$BUILD-$t || exit 1 + cd $DIR/obj-$BUILD-$t || exit 1 + if [ \! -f Makefile ]; then + # APPLE LOCAL begin ARM ARM_CONFIGFLAGS + T_CONFIGFLAGS="$CONFIGFLAGS --enable-werror-always \ + --program-prefix=$t-apple-darwin$DARWIN_VERS- \ + --host=$BUILD-apple-darwin$DARWIN_VERS \ + --target=$t-apple-darwin$DARWIN_VERS" + if [ $t = 'arm' ] ; then + # Explicitly set AS_FOR_TARGET and LD_FOR_TARGET to avoid picking up + # older versions from the gcc installed in /usr. Radar 7230843. + AS_FOR_TARGET=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-as \ + LD_FOR_TARGET=$DIR/bin/${t}-apple-darwin$DARWIN_VERS-ld \ + $SRC_DIR/configure $T_CONFIGFLAGS $ARM_CONFIGFLAGS || exit 1 + elif [ $t = 'powerpc' ] ; then + $SRC_DIR/configure $T_CONFIGFLAGS $PPC_CONFIGFLAGS || exit 1 + else + $SRC_DIR/configure $T_CONFIGFLAGS $NON_ARM_CONFIGFLAGS || exit 1 + fi + # APPLE LOCAL end ARM ARM_CONFIGFLAGS + fi + if [ $t = 'arm' ] ; then + if [ $ARM_DARWIN_TARGET_IPHONEOS = 'YES' ] ; then + DEFAULT_TARGET="-DDEFAULT_TARGET_OS=DARWIN_VERSION_IPHONEOS" + else + DEFAULT_TARGET="-DDEFAULT_TARGET_OS=DARWIN_VERSION_MACOSX" + fi + else + DEFAULT_TARGET="" + fi + /usr/bin/make $MAKEFLAGS -j $SYSCTL all CFLAGS="$CFLAGS $DEFAULT_TARGET" \ + CXXFLAGS="$CFLAGS $DEFAULT_TARGET" || exit 1 + /usr/bin/make $MAKEFLAGS -j 1 DESTDIR=$DIR/dst-$BUILD-$t install-gcc install-target \ + CFLAGS="$CFLAGS $DEFAULT_TARGET" \ + CXXFLAGS="$CFLAGS $DEFAULT_TARGET" || exit 1 + + # Add the compiler we just built to the path. + # LLVM LOCAL Support for non /usr $DEST_ROOT + PATH=$DIR/dst-$BUILD-$t/$DEST_ROOT/bin:$PATH + fi +done + +# Rearrange various libraries, for no really good reason. +for t in $CROSS_TARGETS ; do + DT=$DIR/dst-$BUILD-$t + # LLVM LOCAL Support for non /usr $DEST_ROOT + D=`echo $DT/$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS` + mv $D/static/libgcc.a $D/libgcc_static.a || exit 1 + mv $D/kext/libgcc.a $D/libcc_kext.a || exit 1 + rm -r $D/static $D/kext || exit 1 + # glue together kext64 stuff + if [ -e $D/kext64/libgcc.a ]; then + libtool -static $D/{kext64/libgcc.a,libcc_kext.a} -o $D/libcc_kext1.a 2>&1 | grep -v 'has no symbols' + mv $D/libcc_kext1.a $D/libcc_kext.a + rm -rf $D/kext64 + fi +done + +# Build the cross-hosted compilers. +for h in $HOSTS ; do + if [ $h != $BUILD ] ; then + for t in $TARGETS ; do + mkdir -p $DIR/obj-$h-$t $DIR/dst-$h-$t || exit 1 + cd $DIR/obj-$h-$t || exit 1 + if [ $h = $t ] ; then + pp= + else + pp=$t-apple-darwin$DARWIN_VERS- + fi + + if [ \! -f Makefile ]; then + # APPLE LOCAL begin ARM ARM_CONFIGFLAGS + T_CONFIGFLAGS="$CONFIGFLAGS --program-prefix=$pp \ + --host=$h-apple-darwin$DARWIN_VERS \ + --target=$t-apple-darwin$DARWIN_VERS" + if [ $t = 'arm' ] && [ $h != 'arm' ] ; then + T_CONFIGFLAGS="$T_CONFIGFLAGS $ARM_CONFIGFLAGS" + elif [ $t = 'powerpc' ] && [ $h != 'powerpc' ] ; then + T_CONFIGFLAGS="$T_CONFIGFLAGS $PPC_CONFIGFLAGS" + else + T_CONFIGFLAGS="$T_CONFIGFLAGS $NON_ARM_CONFIGFLAGS" + fi + + # http://trac.macports.org/ticket/31603 + if [ $h = "i686" ] && [ $BUILD = "x86_64" ] ; then + T_CONFIGFLAGS="$T_CONFIGFLAGS --build=$h-apple-darwin$DARWIN_VERS" + fi + + $SRC_DIR/configure $T_CONFIGFLAGS || exit 1 + # APPLE LOCAL end ARM ARM_CONFIGFLAGS + fi + + # For ARM, we need to make sure it picks up the correct versions + # of the linker and cctools. + if [ $t = 'arm' ] ; then + if [ -n "$ARM_SDK" ]; then + sdkoption="-sdk $ARM_SDK" + else + sdkoption="-sdk /" + fi + progpath=`xcrun $sdkoption -find ld` + comppath=`dirname $progpath` + ORIG_COMPILER_PATH=$COMPILER_PATH + export COMPILER_PATH=$comppath:$COMPILER_PATH + fi + + if [ $h = $t ] ; then + /usr/bin/make $MAKEFLAGS -j $SYSCTL all CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 + /usr/bin/make $MAKEFLAGS -j 1 DESTDIR=$DIR/dst-$h-$t install-gcc install-target \ + CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 + else + /usr/bin/make $MAKEFLAGS -j $SYSCTL all-gcc CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 + /usr/bin/make $MAKEFLAGS -j 1 DESTDIR=$DIR/dst-$h-$t install-gcc \ + CFLAGS="$CFLAGS" CXXFLAGS="$CFLAGS" || exit 1 + fi + + if [ $t = 'arm' ] ; then + export COMPILER_PATH=$ORIG_COMPILER_PATH + unset ORIG_COMPILER_PATH + fi + done + fi +done + +######################################## +# Construct the actual destination root, by copying stuff from +# $DIR/dst-* to $DEST_DIR, with occasional 'lipo' commands. + +cd $DEST_DIR || exit 1 + +# Clean out DEST_DIR in case -noclean was passed to buildit. +rm -rf * || exit 1 + +# LLVM LOCAL begin Don't install HTML docs. +if [ "$ENABLE_LLVM" == false ]; then + # HTML documentation + HTMLDIR="/Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/DeveloperTools" + mkdir -p ".$HTMLDIR" || exit 1 + cp -Rp $DIR/obj-$BUILD-$BUILD/gcc/HTML/* ".$HTMLDIR/" || exit 1 +fi +# LLVM LOCAL end Don't install docs. + +# Manual pages +mkdir -p .$DEST_ROOT/share || exit 1 +cp -Rp $DIR/dst-$BUILD-$BUILD$DEST_ROOT/share/man .$DEST_ROOT/share/ \ + || exit 1 +# exclude fsf-funding.7 gfdl.7 gpl.7 as they are currently built in +# the gcc project +rm -rf .$DEST_ROOT/share/man/man7 + +# libexec +cd $DIR/dst-$BUILD-$BUILD$DEST_ROOT/lib/llvm-gcc42/gcc/$BUILD-apple-darwin$DARWIN_VERS/$VERS \ + || exit 1 +LIBEXEC_FILES=`/usr/bin/find . -type f -print || exit 1` +LIBEXEC_DIRS=`/usr/bin/find . -type d -print || exit 1` +cd $DEST_DIR || exit 1 +for t in $TARGETS ; do + DL=$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS + for d in $LIBEXEC_DIRS ; do + mkdir -p .$DL/$d || exit 1 + done + for f in $LIBEXEC_FILES ; do + # LLVM LOCAL + if file $DIR/dst-*-$t$DL/$f | grep -q -E 'Mach-O (executable|dynamically linked shared library)' ; then + lipo -output .$DL/$f -create $DIR/dst-*-$t$DL/$f || exit 1 + else + cp -p $DIR/dst-$BUILD-$t$DL/$f .$DL/$f || exit 1 + fi + done + # LLVM LOCAL begin fix broken link + ln -s ../../../../../bin/as .$DL/as + ln -s ../../../../../bin/ld .$DL/ld + ln -s ../../../../../bin/dsymutil .$DL/dsymutil + # LLVM LOCAL end fix broken link +done + +# bin +# The native drivers ('native' is different in different architectures). +BIN_FILES=`ls $DIR/dst-$BUILD-$BUILD$DEST_ROOT/bin | grep '^[^-]*-apple-[0-9.]*$' \ + | grep -v gccbug | grep -v gcov || exit 1` +mkdir .$DEST_ROOT/bin +for f in $BIN_FILES ; do + lipo -output .$DEST_ROOT/bin/$f -create $DIR/dst-*$DEST_ROOT/bin/$f || exit 1 +done +# gcov, which is special only because it gets built multiple times and lipo +# will complain if we try to add two architectures into the same output. +TARG0=`echo $TARGETS | cut -d ' ' -f 1` +lipo -output .$DEST_ROOT/bin/llvm-gcov-$MAJ_VERS -create \ + $DIR/dst-*-$TARG0$DEST_ROOT/bin/*gcov* || exit 1 +# The fully-named drivers, which have the same target on every host. +for t in $TARGETS ; do + # The gcc build system has some crazy pattern for how it names files, subvert it. + for h in $HOSTS ; do + for c in gcc cpp g++ ; do + if [ ! -f $DIR/dst-$h-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-$c-$MAJ_VERS ] ; then + for a in $t-apple-darwin$DARWIN_VERS-$c-$VERS $t-apple-darwin$DARWIN_VERS-llvm-$c-$VERS $t-apple-darwin$DARWIN_VERS-llvm-$c-$MAJ_VERS llvm-$c-$VERS llvm-$c-$MAJ_VERS ; do + if [ -f $DIR/dst-$h-$t/$DEST_ROOT/bin/$a ] ; then + cp $DIR/dst-$h-$t/$DEST_ROOT/bin/$a $DIR/dst-$h-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-$c-$MAJ_VERS + break + fi + done + fi + done + done + +# LLVM LOCAL build_gcc bug with non-/usr $DEST_ROOT + lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS -create \ + $DIR/dst-*-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-gcc-$MAJ_VERS || exit 1 + lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-llvm-cpp-$MAJ_VERS -create \ + $DIR/dst-*-$t$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-cpp-$MAJ_VERS || exit 1 +# LLVM LOCAL build_gcc bug with non-/usr $DEST_ROOT + lipo -output .$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS -create \ + $DIR/dst-*-$t/$DEST_ROOT/bin/$t-apple-darwin$DARWIN_VERS-g++* || exit 1 +done + +# lib +mkdir -p .$DEST_ROOT/lib/llvm-gcc42/gcc || exit 1 +for t in $TARGETS ; do + # LLVM LOCAL build_gcc bug with non-/usr $DEST_ROOT + cp -Rp $DIR/dst-$BUILD-$t/$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS \ + .$DEST_ROOT/lib/llvm-gcc42/gcc || exit 1 +done + +# APPLE LOCAL begin native compiler support +# libgomp is not built for ARM +LIBGOMP_TARGETS=`echo $TARGETS | sed -E -e 's/(^|[[:space:]])arm($|[[:space:]])/ /'` +LIBGOMP_HOSTS=`echo $HOSTS | $OMIT_X86_64 | sed -E -e 's/(^|[[:space:]])arm($|[[:space:]])/ /'` + +# And copy libgomp stuff by hand... +for t in $LIBGOMP_TARGETS ; do + for h in $LIBGOMP_HOSTS ; do + if [ $h = $t ] ; then + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/libgomp.a \ + .$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ || exit 1 + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/libgomp.spec \ + .$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ || exit 1 + if [ $h = 'powerpc' ] ; then + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/ppc64/libgomp.a \ + .$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ppc64/ + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/ppc64/libgomp.spec \ + .$DEST_ROOT/lib/llvm-gcc42/v$t-apple-darwin$DARWIN_VERS/$VERS/ppc64/ + elif [ $h = 'i686' ] ; then + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/x86_64/libgomp.a \ + .$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/x86_64/ || exit 1 + cp -p $DIR/dst-$h-$t$DEST_ROOT/lib/llvm-gcc42/x86_64/libgomp.spec \ + .$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/x86_64/ || exit 1 + fi + fi + done +done +# APPLE LOCAL end native compiler support + +# LLVM LOCAL remove libstdc++ copying + + +# include +HEADERPATH=$DEST_ROOT/include/gcc/darwin/llvm-gcc42 +mkdir -p .$HEADERPATH || exit 1 + +# Some headers are installed from more-hdrs/. They all share +# one common feature: they shouldn't be installed here. Sometimes, +# they should be part of FSF GCC and installed from there; sometimes, +# they should be installed by some completely different package; sometimes, +# they only exist for codewarrior compatibility and codewarrior should provide +# its own. We take care not to install the headers if Libc is already +# providing them. +cd $SRC_DIR/more-hdrs +for h in `echo *.h` ; do + if [ ! -f /usr/include/$h -o -L /usr/include/$h ] ; then + cp -R $h $DEST_DIR$HEADERPATH/$h || exit 1 + for t in $TARGETS ; do + THEADERPATH=$DEST_DIR$DEST_ROOT/lib/llvm-gcc42/gcc/${t}-apple-darwin$DARWIN_VERS/$VERS/include + [ -f $THEADERPATH/$h ] || \ + ln -s ../../../../../include/gcc/darwin/llvm-gcc42/$h $THEADERPATH/$h || \ + exit 1 + done + fi +done + +# Add extra man page symlinks for 'c++' and for arch-specific names. +MDIR=$DEST_DIR$DEST_ROOT/share/man/man1 +if [ $BUILD_CXX -eq 1 ]; then + # LLVM LOCAL + ln -f $MDIR/llvm-g++-4.2.1 $MDIR/llvm-c++-4.2.1 || exit 1 +fi +for t in $TARGETS ; do + # LLVM LOCAL begin + ln -f $MDIR/llvm-gcc-4.2.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-gcc-4.2.1 \ + || exit 1 + if [ $BUILD_CXX -eq 1 ]; then + ln -f $MDIR/llvm-g++-4.2.1 $MDIR/$t-apple-darwin$DARWIN_VERS-llvm-g++-4.2.1 \ + || exit 1 + fi + # LLVM LOCAL end +done + +# LLVM LOCAL begin +#if [ "x$RC_ProjectName" = "xllvmgcc42_Embedded" ]; then +#MAN1_DIR=${DEST_DIR}${ARM_PLATFORM}/Developer/usr/share/man/man1 +#else +#MAN1_DIR=$DEST_DIR$DEST_ROOT/../share/man/man1 +#fi +#mkdir -p ${MAN1_DIR} +#for i in gcc.1 g++.1 cpp.1 gcov.1 ; do +# cp $DIR/obj-$BUILD-$BUILD/gcc/doc/$i ${MAN1_DIR}/$i +#done +#cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-gcc.1 +## llvm-g++ manpage is a dup of llvm-gcc manpage +#cp $ORIG_SRC_DIR/gcc/doc/llvm-gcc.1 ${MAN1_DIR}/llvm-g++.1 +## Compress manpages +#gzip -f $MDIR/* ${MAN1_DIR}/* +## LLVM LOCAL end + +# Build driver-driver using fully-named drivers +for h in $HOSTS ; do + # LLVM LOCAL begin + $DIR/dst-$BUILD-$h$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-gcc-$VERS \ + $ORIG_SRC_DIR/driverdriver.c \ + -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS\"" \ + -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ + -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ + -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ + -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ + -L$DIR/obj-$h-$BUILD/libiberty/ \ + -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-llvm-gcc-$MAJ_VERS || exit 1 + + $DIR/dst-$BUILD-$h$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-gcc-$VERS \ + $ORIG_SRC_DIR/driverdriver.c \ + -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-cpp-$MAJ_VERS\"" \ + -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ + -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ + -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ + -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ + -L$DIR/obj-$h-$BUILD/libiberty/ \ + -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-llvm-cpp-$MAJ_VERS || exit 1 + + if [ $BUILD_CXX -eq 1 ]; then + $DIR/dst-$BUILD-$h$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-gcc-$VERS \ + $ORIG_SRC_DIR/driverdriver.c \ + -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS\"" \ + -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ + -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ + -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ + -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ + -L$DIR/obj-$h-$BUILD/libiberty/ \ + -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-llvm-g++-$MAJ_VERS || exit 1 + fi + + if [ $BUILD_JAVA -eq 1 ]; then + $DIR/dst-$BUILD-$h$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-gcc-$VERS \ + $ORIG_SRC_DIR/driverdriver.c \ + -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-gcj-$MAJ_VERS\"" \ + -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ + -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ + -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ + -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ + -L$DIR/obj-$h-$BUILD/libiberty/ \ + -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-llvm-gcj-$MAJ_VERS || exit 1 + fi + + if [ $BUILD_FORTRAN -eq 1 ]; then + $DIR/dst-$BUILD-$h$DEST_ROOT/bin/$h-apple-darwin$DARWIN_VERS-gcc-$VERS \ + $ORIG_SRC_DIR/driverdriver.c \ + -DPDN="\"-apple-darwin$DARWIN_VERS-llvm-gfortran-$MAJ_VERS\"" \ + -DIL="\"$DEST_ROOT/bin/\"" -I $ORIG_SRC_DIR/include \ + -I $ORIG_SRC_DIR/gcc -I $ORIG_SRC_DIR/gcc/config \ + -liberty -L$DIR/dst-$BUILD-$h$DEST_ROOT/lib/ \ + -L$DIR/dst-$BUILD-$h$DEST_ROOT/$h-apple-darwin$DARWIN_VERS/lib/ \ + -L$DIR/obj-$h-$BUILD/libiberty/ \ + -o $DEST_DIR/$DEST_ROOT/bin/tmp-$h-llvm-gfortran-$MAJ_VERS || exit 1 + fi + # LLVM LOCAL end +done + +# LLVM LOCAL begin +lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-gcc-$MAJ_VERS -create \ + $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1 +rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-gcc-$MAJ_VERS || exit 1 + +lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-cpp-$MAJ_VERS -create \ + $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-cpp-$MAJ_VERS || exit 1 +rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-cpp-$MAJ_VERS || exit 1 + +if [ $BUILD_CXX -eq 1 ]; then + lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-g++-$MAJ_VERS -create \ + $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-g++-$MAJ_VERS || exit 1 + ln -f $DEST_DIR/$DEST_ROOT/bin/llvm-g++-$MAJ_VERS $DEST_DIR/$DEST_ROOT/bin/llvm-c++-$MAJ_VERS || exit 1 + rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-llvm-g++-$MAJ_VERS || exit 1 +fi + +if [ $BUILD_JAVA -eq 1 ]; then + lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-gcj-$MAJ_VERS -create \ + $DEST_DIR/$DEST_ROOT/bin/tmp-*-gcj-$MAJ_VERS || exit 1 + rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-gcj-$MAJ_VERS || exit 1 +fi + +if [ $BUILD_FORTRAN -eq 1 ]; then + lipo -output $DEST_DIR/$DEST_ROOT/bin/llvm-gfortran-$MAJ_VERS -create \ + $DEST_DIR/$DEST_ROOT/bin/tmp-*-gfortran-$MAJ_VERS || exit 1 + rm $DEST_DIR/$DEST_ROOT/bin/tmp-*-gfortran-$MAJ_VERS || exit 1 +fi +# LLVM LOCAL end + +######################################## +# Create SYM_DIR with information required for debugging. + +cd $SYM_DIR || exit 1 + +# Clean out SYM_DIR in case -noclean was passed to buildit. +rm -rf * || exit 1 + +# Generate .dSYM files +/usr/bin/find $DEST_DIR -perm -0111 \! -name fixinc.sh \ + \! -name mkheaders -type f -print | /usr/bin/xargs -n 1 ${DSYMUTIL} + +# Save .dSYM files and .a archives +cd $DEST_DIR || exit 1 +/usr/bin/find . \( -path \*.dSYM/\* -or -name \*.a \) -print \ + | cpio -pdml $SYM_DIR || exit 1 +# Save source files. +mkdir $SYM_DIR/src || exit 1 +cd $DIR || exit 1 +/usr/bin/find obj-* -name \*.\[chy\] -print | cpio -pdml $SYM_DIR/src || exit 1 + +######################################## +# Remove debugging information from DEST_DIR. + +if [ "x$LLVM_DEBUG" != "x1" ]; then + # LLVM LOCAL begin - don't strip dSYM objects + /usr/bin/find $DEST_DIR -perm -0111 \! -path '*DWARF*' \! -name \*.dylib \ + \! -name fixinc.sh \! -name mkheaders \! -name libstdc++.dylib \ + -type f -print \ + | /usr/bin/xargs ${STRIP} || exit 1 + # LLVM LOCAL begin - Strip with -Sx instead of -SX + # Ignore errors from this next one due to possible issues on Tiger + /usr/bin/find $DEST_DIR \! -path '*DWARF*' \( -name \*.a -or -name \*.dylib \) \ + \! -name libgcc_s.10.*.dylib \! -name libstdc++.dylib -type f \ + -print \ + | /usr/bin/xargs ${STRIP} -SX + # LLVM LOCAL end - Strip with -Sx instead of -SX + /usr/bin/find $DEST_DIR \! -path '*DWARF*' -name \*.a -type f -print \ + | /usr/bin/xargs ${RANLIB} || exit 1 + # LLVM LOCAL end - don't strip dSYM objects +fi + +# LLVM LOCAL begin +# Set up the llvm-gcc/llvm-g++ symlinks. + +# LLVM_BIN_DIR - This is the place where llvm-gcc/llvm-g++ symlinks get installed. +#LLVM_BIN_DIR=$DEST_ROOT/../bin +# +#mkdir -p $DEST_DIR$LLVM_BIN_DIR +#cd $DEST_DIR$LLVM_BIN_DIR +#ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-gcc-$MAJ_VERS llvm-gcc-$MAJ_VERS || exit 1 +#ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-g++-$MAJ_VERS llvm-g++-$MAJ_VERS || exit 1 +#ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-cpp-$MAJ_VERS llvm-cpp-$MAJ_VERS || exit 1 +#ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-gcc-$MAJ_VERS llvm-gcc || exit 1 +#ln -s -f ../llvm-gcc-$MAJ_VERS/bin/llvm-g++-$MAJ_VERS llvm-g++ || exit 1 + +# FIXME: This is a hack to get things working. +#for t in $TARGETS ; do +# ln -s -f ../llvm-gcc-$MAJ_VERS/bin/$t-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS $t-apple-darwin$DARWIN_VERS-llvm-gcc-$MAJ_VERS || exit 1 +# ln -s -f ../llvm-gcc-$MAJ_VERS/bin/$t-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS $t-apple-darwin$DARWIN_VERS-llvm-g++-$MAJ_VERS || exit 1 +#done + +# Copy one of the libllvmgcc.dylib's up to lib/llvm-gcc42. +#cp $DEST_DIR/$DEST_ROOT/lib/llvm-gcc42/gcc/$BUILD-apple-darwin$DARWIN_VERS/$VERS/libllvmgcc.dylib \ +# $DEST_DIR/$DEST_ROOT/lib/llvm-gcc42/gcc/ || exit 1 + +# Replace the installed ones with symlinks to the common one. +#for t in $TARGETS ; do +# cd $DEST_DIR/$DEST_ROOT/lib/llvm-gcc42/gcc/$t-apple-darwin$DARWIN_VERS/$VERS/ || exit 1 +# rm libllvmgcc.dylib || exit 1 +# ln -s ../../libllvmgcc.dylib || exit 1 +#done + +# Remove unwind.h from the install directory for > 10.6 +if [ $DARWIN_VERS -gt 10 ]; then + /usr/bin/find $DEST_DIR -name "unwind.h" -print | /usr/bin/xargs rm || exit 1 +fi + +# Install libLTO.dylib +if [ "$INSTALL_LIBLTO" == yes ]; then + LTO=$LLVMCORE_PATH/lib/libLTO.dylib + if [ ! -r $LTO ]; then + LTO=$LLVMCORE_PATH/../lib/libLTO.dylib + if [ ! -r $LTO ]; then + echo "Error: llvmCore installation is missing libLTO.dylib" + exit 1 + fi + fi + mkdir -p $DEST_DIR/Developer/usr/lib + cp $LTO $DEST_DIR/Developer/usr/lib/libLTO.dylib + strip -S $DEST_DIR/Developer/usr/lib/libLTO.dylib + + # Add a symlink in /usr/lib for B&I. + mkdir -p $DEST_DIR/usr/lib/ + cd $DEST_DIR/usr/lib && \ + ln -s ../../Developer/usr/lib/libLTO.dylib ./libLTO.dylib +fi + +# Remove lto.h from the install directory; clang will supply. +# Also remove ppc_intrinsics.h. Note that this breaks PPC support. +/usr/bin/find $DEST_DIR \( -name lto.h -o -name ppc_intrinsics.h \) -delete -print || exit 1 + +# LLVM LOCAL end + +/usr/bin/find $DEST_DIR -name \*.dSYM -print | /usr/bin/xargs rm -r || exit 1 +# chgrp -h -R wheel $DEST_DIR +# chgrp -R wheel $DEST_DIR + +# Done! +exit 0 --- build_gcc.fink.orig 2013-07-07 15:10:20.000000000 -0400 +++ build_gcc.fink 2013-07-07 15:17:23.000000000 -0400 @@ -574,8 +574,8 @@ # gcov, which is special only because it gets built multiple times and lipo # will complain if we try to add two architectures into the same output. TARG0=`echo $TARGETS | cut -d ' ' -f 1` -lipo -output .$DEST_ROOT/bin/llvm-gcov-$MAJ_VERS -create \ - $DIR/dst-*-$TARG0$DEST_ROOT/bin/*gcov* || exit 1 +#lipo -output .$DEST_ROOT/bin/llvm-gcov-$MAJ_VERS -create \ +# $DIR/dst-*-$TARG0$DEST_ROOT/bin/*gcov* || exit 1 # The fully-named drivers, which have the same target on every host. for t in $TARGETS ; do # The gcc build system has some crazy pattern for how it names files, subvert it.