blob: 30a8c9457337d1fbdff5570fe80ae5138cb71b94 [file] [log] [blame]
#!/bin/bash
set -e # Terminate script at the first line that fails.
set -o pipefail # Return the first non-zero pipe command error.
set -x # Print commands as they are executed
# This script performs an automated build on i686-pc-mingw32 of
# cross llvm-gcc for arm-eabi-hard-float. It assumes the valid native
# compiler for i686-pc-mingw32 is in place and available as well as
# cross libraries and headers for arm-eabi.
# --build=i686-pc-mingw32
# --host=i686-pc-mingw32
# --target=arm-none-linux-gnueabi
# The usage:
# Run this build from the build from the build root directory as
# llvm-gcc-mingw32-cross-arm-linux-gnueabi-hard-float [<step>] [<extra args>]
# Expected project tree structure:
# <build root>
# +-- ${LLVM_src}
# +-- ${LLVM_GCC_src}
# +-- ${LLVM_obj}
# +-- ${LLVM_GCC_obj}
# +-- ${INSTALL}
LLVM_src=llvm.src # The LLVM source code root directory name.
LLVM_GCC_src=llvm-gcc.src # The LLVM-GCC source code root directory name.
LLVM_obj=llvm.obj # The LLVM build root directory name.
LLVM_GCC_obj=llvm-gcc.obj # The LLVM-GCC build root directory name.
INSTALL=install # Where the result will be installed.
BUILD_ROOT=$PWD # Where build happens.
PRIVATE_INSTALL=${BUILD_ROOT}/${INSTALL} # Where the result will be installed.
#------------------------------------------------------------------------------
# Define build steps, parse and validate input parameters
#------------------------------------------------------------------------------
# This script supports the following steps:
do_clean=no # Clean up the build directory.
do_copy_cross_tools=no # Copy cross-tools.
do_configure_llvm=no # Configure LLVM.
do_make_llvm=no # Make LLVM.
do_install_llvm=no # Install LLVM-GCC.
do_test_llvm=no # Test LLVM.
do_configure_llvmgcc=no # Configure LLVM-GCC.
do_make_llvmgcc=no # Make LLVM-GCC.
do_install_llvmgcc=no # Install LLVM-GCC.
do_all=no # Runs all steps at once when requested.
# Set step parameter
if (( $# == 0 )) ; then
do_all=yes
fi
# else
if (( ! $# == 0 )) ; then
# First check that the parameter actually defines a step.
case $1 in
clean | \
copy_cross_tools | \
configure_llvm | \
make_llvm | \
install_llvm | \
test_llvm | \
configure_llvmgcc | \
make_llvmgcc | \
install_llvmgcc | \
all)
eval do_$1=yes # Set the flag for the requested step .
shift # Remove it since is is ours and already precessed.
;;
*)
# Not our parameter. Pass it as is.
esac
fi
# Set all steps if do_all requested
if [ "$do_all" == "yes" ] ; then
# Set all steps to yes
do_clean=yes
do_copy_cross_tools=yes
do_configure_llvm=yes
do_make_llvm=yes
do_install_llvm=yes
do_test_llvm=yes
do_configure_llvmgcc=yes
do_make_llvmgcc=yes
do_install_llvmgcc=yes
fi
#------------------------------------------------------------------------------
# Step: Clean up.
#------------------------------------------------------------------------------
if [ "$do_clean" == "yes" ] ; then
# Remove everything from where we will be installing the result.
rm -rf ${PRIVATE_INSTALL}
mkdir -p ${PRIVATE_INSTALL}
chmod a+rx ${PRIVATE_INSTALL}
fi
#------------------------------------------------------------------------------
# Step: Copy cross-tools
#------------------------------------------------------------------------------
if [ "$do_copy_cross_tools" == "yes" ] ; then
# We need a local copy of binutils, system libraries and headers,
# since we will be installing there.
cp -Ru /c/cross-h/* ${PRIVATE_INSTALL}
fi
#------------------------------------------------------------------------------
# Step: Configure LLVM.
#------------------------------------------------------------------------------
if [ "$do_configure_llvm" == "yes" ] ; then
# Remove previously build files if any.
rm -rf ${BUILD_ROOT}/${LLVM_obj}
mkdir -p ${BUILD_ROOT}/${LLVM_obj}
chmod a+rx ${BUILD_ROOT}/${LLVM_obj}
cd ${BUILD_ROOT}/${LLVM_obj}
../${LLVM_src}/configure --prefix=${PRIVATE_INSTALL} \
--with-sysroot=${PRIVATE_INSTALL} \
--with-lib-path=${PRIVATE_INSTALL}/lib \
--build=i686-pc-mingw32 \
--host=i686-pc-mingw32 \
--target=arm-none-linux-gnueabi \
--disable-shared \
--disable-multilib \
--disable-nls \
--disable-sjlj-exceptions \
--with-cpu=cortex-a9 \
--with-fpu=neon \
--with-abi=aapcs \
--with-float=hard \
--disable-bootstrap \
--with-gcc \
--with-gnu-as \
--with-gnu-ld \
--disable-werror \
$@ # Extra args if any
fi
#------------------------------------------------------------------------------
# Step: Make LLVM.
#------------------------------------------------------------------------------
if [ "$do_make_llvm" == "yes" ] ; then
cd ${BUILD_ROOT}/${LLVM_obj}
# NOTE: Do not build with ENABLE_OPTIMIZED=1 - some test fail after it.
nice -n 20 make all VERBOSE=1 \
$@ # Extra args if any, like -j16 for example.
fi
#------------------------------------------------------------------------------
# Step: Install LLVM.
#------------------------------------------------------------------------------
if [ "$do_install_llvm" == "yes" ] ; then
cd ${BUILD_ROOT}/${LLVM_obj}
# NOTE: Do not build with ENABLE_OPTIMIZED=1 - some test fail after it.
nice -n 20 make install VERBOSE=1 \
$@ # Extra args if any, like -j16 for example.
fi
#------------------------------------------------------------------------------
# Step: Test LLVM.
#------------------------------------------------------------------------------
if [ "$do_test_llvm" == "yes" ] ; then
cd ${BUILD_ROOT}/${LLVM_obj}
make check-lit VERBOSE=1 \
$@ # Extra args if any, like -j16 for example.
fi
#------------------------------------------------------------------------------
# Step: Configure LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_configure_llvmgcc" == "yes" ] ; then
# Remove previously build files if any.
rm -rf ${BUILD_ROOT}/${LLVM_GCC_obj}
mkdir -p ${BUILD_ROOT}/${LLVM_GCC_obj}
chmod a+rx ${BUILD_ROOT}/${LLVM_GCC_obj}
cd ${BUILD_ROOT}/${LLVM_GCC_obj}
../${LLVM_GCC_src}/configure --prefix=${PRIVATE_INSTALL} \
--build=i686-pc-mingw32 \
--host=i686-pc-mingw32 \
--target=arm-none-linux-gnueabi \
--disable-nls \
--enable-languages=c,c++ \
--enable-llvm=${BUILD_ROOT}/${LLVM_obj} \
--enable-checking \
--program-prefix=llvm- \
--disable-bootstrap \
--with-cpu=cortex-a9 \
--with-fpu=neon \
--with-float=hard \
--with-abi=aapcs \
--disable-shared \
$@ # Extra args if any
fi
#------------------------------------------------------------------------------
# Step: Make LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_make_llvmgcc" == "yes" ] ; then
cd ${BUILD_ROOT}/${LLVM_GCC_obj}
nice -n 20 make all \
$@ # Extra args if any
fi
#------------------------------------------------------------------------------
# Step: Install LLVM-GCC.
#------------------------------------------------------------------------------
if [ "$do_install_llvmgcc" == "yes" ] ; then
cd ${BUILD_ROOT}/${LLVM_GCC_obj}
nice -n 20 make install \
$@ # Extra args if any
fi