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,18 +129,33 @@ 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
unset SDKROOT && \
$SRC_DIR/configure $COMMON_CONFIGURE_OPTS \
--enable-targets=arm \
--host=arm-apple-darwin10 \
--target=arm-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 fi
if [ "$ARM_HOSTED_BUILD" = yes ]; then else
configure_opts="--enable-targets=arm --host=arm-apple-darwin10 \ # not $ARM_HOSTED_BUILD
--target=arm-apple-darwin10 --build=i686-apple-darwin10"
elif [ "$IOS_SIM_BUILD" = yes ]; then if [ "$IOS_SIM_BUILD" = yes ]; then
# Use a non-standard "darwin_sim" host triple to trigger a cross-build. # Use a non-standard "darwin_sim" host triple to trigger a cross-build.
configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \ configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \
--build=i686-apple-darwin10" --build=i686-apple-darwin10"
@ -116,62 +163,23 @@ else
configure_opts="--enable-targets=arm,x86" configure_opts="--enable-targets=arm,x86"
fi 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/'`
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
make $COMMON_MAKEFLAGS
if [ $? != 0 ] ; then if [ $? != 0 ] ; then
echo "error: LLVM 'make' failed!" echo "error: LLVM 'make' failed!"
exit 1 exit 1
fi fi
fi
################################################################################ ################################################################################
# Construct the actual destination root, by copying stuff from $DIR/dst-* to # Construct the actual destination root, by copying stuff from $DIR/dst-* to
@ -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