Update Apple's build script for llvmCore. <rdar://problem/12914321>

This change is basically just copying changes that we've used for Apple's
clang builds to the script used for building llvmCore. Besides cleaning it
up to use xcrun to locate the proper versions of tools, especially for cross
compiling, it fixes the build to work with newer versions of clang that
honor SDKROOT settings in the environment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172138 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Bob Wilson 2013-01-10 22:59:51 +00:00
parent 5d0f061779
commit 1b8eeb327e

View File

@ -77,6 +77,37 @@ rm $SRC_DIR/Makefile || exit 1
# Now create our own by editing the top-level Makefile, deleting every line marked "Apple-style": # Now create our own by editing the top-level Makefile, deleting every line marked "Apple-style":
sed -e '/[Aa]pple-style/d' -e '/include.*GNUmakefile/d' $ORIG_SRC_DIR/Makefile > $SRC_DIR/Makefile || exit 1 sed -e '/[Aa]pple-style/d' -e '/include.*GNUmakefile/d' $ORIG_SRC_DIR/Makefile > $SRC_DIR/Makefile || exit 1
SUBVERSION=`echo $RC_ProjectSourceVersion | sed -e 's/.*\.\([0-9]*\).*/\1/'`
if [ "x$SUBVERSION" != "x$RC_ProjectSourceVersion" ]; then
LLVM_SUBMIT_SUBVERSION=`printf "%02d" $SUBVERSION`
RC_ProjectSourceVersion=`echo $RC_ProjectSourceVersion | sed -e 's/\..*//'`
LLVM_SUBMIT_VERSION=$RC_ProjectSourceVersion
fi
if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then
LLVM_VERSION="$LLVM_SUBMIT_VERSION"
else
LLVM_VERSION="$LLVM_SUBMIT_VERSION-$LLVM_SUBMIT_SUBVERSION"
fi
LLVM_VERSION_INFO="'\" Apple Build #$LLVM_VERSION\"'"
# Figure out how many make processes to run.
SYSCTL=`sysctl -n hw.activecpu`
# 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
JOBS_FLAG="-j $SYSCTL"
COMMON_CONFIGURE_OPTS="\
--prefix=$DEST_DIR$DEST_ROOT \
--enable-assertions=$LLVM_ASSERTIONS \
--enable-optimized=$LLVM_OPTIMIZED \
--disable-bindings"
COMMON_MAKEFLAGS=$JOBS_FLAG $OPTIMIZE_OPTS UNIVERSAL=1 UNIVERSAL_ARCH="$HOSTS" UNIVERSAL_SDK_PATH=$SDKROOT NO_RUNTIME_LIBS=1 DISABLE_EDIS=1 REQUIRES_RTTI=1 DEBUG_SYMBOLS=1 LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION CXXFLAGS=-DLLVM_VERSION_INFO="$LLVM_VERSION_INFO" VERBOSE=1
# Build the LLVM tree universal. # Build the LLVM tree universal.
mkdir -p $DIR/obj-llvm || exit 1 mkdir -p $DIR/obj-llvm || exit 1
cd $DIR/obj-llvm || exit 1 cd $DIR/obj-llvm || exit 1
@ -89,6 +120,7 @@ if [ "$ARM_HOSTED_BUILD" = yes ]; then
for prog in ar nm ranlib strip lipo ld as ; do for prog in ar nm ranlib strip lipo ld as ; do
P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog} P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
T=`xcrun -sdk $SDKROOT -find ${prog}` T=`xcrun -sdk $SDKROOT -find ${prog}`
ln -s $T $DIR/bin/$prog
echo '#!/bin/sh' > $P || exit 1 echo '#!/bin/sh' > $P || exit 1
echo 'exec '$T' "$@"' >> $P || exit 1 echo 'exec '$T' "$@"' >> $P || exit 1
chmod a+x $P || exit 1 chmod a+x $P || exit 1
@ -97,80 +129,56 @@ if [ "$ARM_HOSTED_BUILD" = yes ]; then
for prog in clang clang++ ; do for prog in clang clang++ ; do
P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog} P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
T=`xcrun -sdk $SDKROOT -find ${prog}` T=`xcrun -sdk $SDKROOT -find ${prog}`
ln -s $T $DIR/bin/$prog
echo '#!/bin/sh' > $P || exit 1 echo '#!/bin/sh' > $P || exit 1
echo 'exec '$T' -arch armv7 -isysroot '${SDKROOT}' "$@"' >> $P || exit 1 echo 'exec '$T' -arch armv7 -isysroot '${SDKROOT}' "$@"' >> $P || exit 1
chmod a+x $P || exit 1 chmod a+x $P || exit 1
done done
PATH=$DIR/bin:$PATH PATH=$DIR/bin:$PATH
fi
if [ "$ARM_HOSTED_BUILD" = yes ]; then unset SDKROOT && \
configure_opts="--enable-targets=arm --host=arm-apple-darwin10 \ $SRC_DIR/configure $COMMON_CONFIGURE_OPTS \
--target=arm-apple-darwin10 --build=i686-apple-darwin10" --enable-targets=arm \
elif [ "$IOS_SIM_BUILD" = yes ]; then --host=arm-apple-darwin10 \
# Use a non-standard "darwin_sim" host triple to trigger a cross-build. --target=arm-apple-darwin10 \
configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \ --build=i686-apple-darwin10 \
--build=i686-apple-darwin10" --program-prefix="" \
|| exit 1
make $COMMON_MAKEFLAGS SDKROOT=
if [ $? != 0 ] ; then
echo "error: LLVM 'make' failed!"
exit 1
fi
else else
configure_opts="--enable-targets=arm,x86" # not $ARM_HOSTED_BUILD
fi
if [ "$IOS_SIM_BUILD" = yes ]; then
# Use a non-standard "darwin_sim" host triple to trigger a cross-build.
configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \
--build=i686-apple-darwin10"
else
configure_opts="--enable-targets=arm,x86"
fi
if [ "$ARM_HOSTED_BUILD" != yes ]; then
if [ $SDKROOT ]; then if [ $SDKROOT ]; then
CPPFLAGS="$CPPFLAGS -isysroot $SDKROOT" CPPFLAGS="$CPPFLAGS -isysroot $SDKROOT"
fi fi
for host in $HOSTS; do :; done for host in $HOSTS; do :; done
CPPFLAGS="$CPPFLAGS -arch $host" CPPFLAGS="$CPPFLAGS -arch $host"
fi
if [ \! -f Makefile.config ]; then $SRC_DIR/configure $COMMON_CONFIGURE_OPTS $configure_opts \
$SRC_DIR/configure --prefix=$DEST_DIR$DEST_ROOT $configure_opts \ --program-prefix="" \
--enable-assertions=$LLVM_ASSERTIONS \
--enable-optimized=$LLVM_OPTIMIZED \
--disable-bindings \
CPPFLAGS="$CPPFLAGS" \ CPPFLAGS="$CPPFLAGS" \
|| exit 1 || exit 1
fi
SUBVERSION=`echo $RC_ProjectSourceVersion | sed -e 's/.*\.\([0-9]*\).*/\1/'` make $COMMON_MAKEFLAGS
if [ $? != 0 ] ; then
if [ "x$SUBVERSION" != "x$RC_ProjectSourceVersion" ]; then
LLVM_SUBMIT_SUBVERSION=`printf "%02d" $SUBVERSION`
RC_ProjectSourceVersion=`echo $RC_ProjectSourceVersion | sed -e 's/\..*//'`
LLVM_SUBMIT_VERSION=$RC_ProjectSourceVersion
fi
if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then
LLVM_VERSION="$LLVM_SUBMIT_VERSION"
else
LLVM_VERSION="$LLVM_SUBMIT_VERSION-$LLVM_SUBMIT_SUBVERSION"
fi
# Figure out how many make processes to run.
SYSCTL=`sysctl -n hw.activecpu`
# 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
JOBS_FLAG="-j $SYSCTL"
make $JOBS_FLAG $OPTIMIZE_OPTS UNIVERSAL=1 UNIVERSAL_ARCH="$HOSTS" \
UNIVERSAL_SDK_PATH=$SDKROOT \
NO_RUNTIME_LIBS=1 \
DISABLE_EDIS=1 \
REQUIRES_RTTI=1 \
DEBUG_SYMBOLS=1 \
LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION \
LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION \
CXXFLAGS="-DLLVM_VERSION_INFO='\" Apple Build #$LLVM_VERSION\"'" \
VERBOSE=1
if [ $? != 0 ] ; then
echo "error: LLVM 'make' failed!" echo "error: LLVM 'make' failed!"
exit 1 exit 1
fi
fi fi
################################################################################ ################################################################################
@ -185,14 +193,7 @@ rm -rf * || exit 1
cd $DIR/obj-llvm || exit 1 cd $DIR/obj-llvm || exit 1
# Install the tree into the destination directory. # Install the tree into the destination directory.
make $LOCAL_MAKEFLAGS $OPTIMIZE_OPTS UNIVERSAL=1 UNIVERSAL_ARCH="$HOSTS" \ make $COMMON_MAKEFLAGS install
NO_RUNTIME_LIBS=1 \
DISABLE_EDIS=1 \
DEBUG_SYMBOLS=1 \
LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION \
LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION \
OPTIMIZE_OPTION='-O3' VERBOSE=1 install
if ! test $? == 0 ; then if ! test $? == 0 ; then
echo "error: LLVM 'make install' failed!" echo "error: LLVM 'make install' failed!"
exit 1 exit 1
@ -263,9 +264,10 @@ cd $SYM_DIR || exit 1
rm -rf * || exit 1 rm -rf * || exit 1
# Generate .dSYM files # Generate .dSYM files
DSYMUTIL=`xcrun -find dsymutil`
find $DEST_DIR -perm -0111 -type f \ find $DEST_DIR -perm -0111 -type f \
! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config -o -name '*.a' \) \ ! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config -o -name '*.a' \) \
-print | xargs -n 1 -P ${SYSCTL} dsymutil -print | xargs -n 1 -P ${SYSCTL} ${DSYMUTIL}
# Save .dSYM files and .a archives # Save .dSYM files and .a archives
cd $DEST_DIR || exit 1 cd $DEST_DIR || exit 1