| #!/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 cross build on x86_64-apple-darwin10 of |
| # self-hosted llvm-gcc for i686-pc-mingw32. It assumes the valid native |
| # cross compiler for i686-pc-mingw32 is in place and available as well as |
| # cross libraries and headers. |
| |
| # --build=x86_64-apple-darwin10 |
| # --host=i686-pc-mingw32 |
| # --target=i686-pc-mingw32 |
| |
| # The usage: |
| # Run this build from the build from the build root directory as |
| # build-4-mingw32 [<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. |
| |
| # CFLAGS and CXXFLAGS must not be set during the building of cross-tools. |
| unset CFLAGS |
| unset CXXFLAGS |
| |
| export PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin |
| export PATH=$PATH:/mingw_build_tools/install_with_gcc/bin |
| |
| 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_configure_llvm=no # Configure LLVM. |
| do_make_llvm=no # Make 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 | \ |
| configure_llvm | \ |
| make_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_configure_llvm=yes |
| do_make_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: 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} \ |
| --build=x86_64-apple-darwin10 --host=i686-pc-mingw32 \ |
| --target=i686-pc-mingw32 \ |
| --enable-optimize \ |
| $@ # Extra args if any |
| |
| fi |
| |
| #------------------------------------------------------------------------------ |
| # Step: Make LLVM. |
| #------------------------------------------------------------------------------ |
| if [ "$do_make_llvm" == "yes" ] ; then |
| |
| cd ${BUILD_ROOT}/${LLVM_obj} |
| nice -n 20 make 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=x86_64-apple-darwin10 --host=i686-pc-mingw32 \ |
| --target=i686-pc-mingw32 \ |
| --program-prefix=llvm- \ |
| --enable-llvm=${BUILD_ROOT}/${LLVM_obj} \ |
| --enable-languages=c,c++ \ |
| --disable-multilib --disable-nls --disable-shared \ |
| --disable-sjlj-exceptions --disable-__cxa_atexit \ |
| $@ # 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 \ |
| $@ # 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 |