#! /bin/sh # # Shell script to configure and build rtems # # build-${CPU}-rtems is created as the build tree # usage() { echo "usage: $0 CPU [BSP]" print_rtems_cpus } my_exit() { exit $0 } #if [ $# -ne 1 ]; then # usage # exit 1 #fi CPU=$1 shift if [ $# -eq 1 ] ; then BSP_ARG=$1 BSP_TO_TEST=$1 shift fi args=$* # The argument to the "--target" argument of configure. BUILD_PIECE=rtems # Include shared setup if [ ! -r ./common.sh ] ; then echo "Cannot find shared shell script support (common.sh)" exit 1 fi . `echo $0 | sed -e 's/bit_rtems/common.sh/'` # Include user configurable information test -r ./user.cfg || \ check_fatal 1 "Cannot find user configuration (user.cfg)" . ./user.cfg # Now set some internal variables based on the user configuration verbose=yes testing=no if [ "X${INSTALL_RTEMS}" = "Xno" ] ; then do_install=no else do_install=yes fi export PATH=$PATH:${INSTALL_POINT}/bin echo $PATH # # Remove the build directory # BUILDDIR=build-${CPU}-${BSP_TO_TEST}-rtems echo "Removing build directory ${BUILDDIR} ..." if [ ${testing} = no ] ; then rm -rf ${BUILDDIR} mkdir ${BUILDDIR} cd ${BUILDDIR} fi # # Configure_rtems # conf_rtems() { echo "../${RTEMS}/configure $* ${BARE_CPU}${BARE_MODEL_ARG} \ ${BARE_CFLAGS}${BARE_CFLAGS_ARG}" if [ ${testing} = no ] ; then if [ "X${BARE_MODEL_ARG}" != "X" ] ; then ../${RTEMS}/configure $* ${BARE_CPU}"${BARE_MODEL_ARG}" \ ${BARE_CFLAGS}"${BARE_CFLAGS_ARG}" else ../${RTEMS}/configure $* fi else echo "In test mode: Not actually configuring" echo fi if [ $? -eq 0 ] ; then echo "${BUILDDIR} has been successfully prepared" else echo "Could not successfully configure into ${BUILDDIR}!" exit 1 fi } # enable-gcc28 # --enable-libcdir=${INSTALL_POINT} doing_bare_bsp=no if [ x${BSP_TO_TEST} != x ] ; then if [ `echo ${BSP_TO_TEST} | cut -d'-' -f1` != bare ]; then ENABLE_BSP=--enable-rtemsbsp="${BSP_TO_TEST}" case ${BSP_TO_TEST} in all) ;; multilib) ENABLE_BSP="--enable-multilib" ;; bf537Stamp) ENABLE_BSP="${ENABLE_BSP} BFIN_ON_SKYEYE=1" ;; eZKit533) ENABLE_BSP="${ENABLE_BSP} BFIN_ON_SKYEYE=1" ;; edb7312) ENABLE_BSP="${ENABLE_BSP} ON_SKYEYE=1" ;; gumstix) ENABLE_BSP="${ENABLE_BSP} ON_SKYEYE=1" ;; lm32_evr) ENABLE_BSP="${ENABLE_BSP} ON_SIMULATOR=1" ;; csb637) ENABLE_BSP="${ENABLE_BSP} ENABLE_LCD=1" ENABLE_BSP="${ENABLE_BSP} ENABLE_LCD_MIRRORING=1" ;; qemu) ENABLE_BSP="--enable-rtemsbsp=pc386" ENABLE_BSP="${ENABLE_BSP} USE_COM1_AS_CONSOLE=1" ENABLE_BSP="${ENABLE_BSP} BSP_PRESS_KEY_FOR_RESET=0" BSP_TO_TEST=pc386 ;; psim | *qemu) ENABLE_BSP="${ENABLE_BSP} CLOCK_DRIVER_USE_FAST_IDLE=1" ;; #pc386) # ENABLE_BSP="--enable-rtemsbsp=pc386" # ENABLE_BSP="${ENABLE_BSP} USE_COM1_AS_CONSOLE=1" # ENABLE_BSP="${ENABLE_BSP} IDE_USE_SECONDARY_INTERFACE=1" # ENABLE_BSP="${ENABLE_BSP} BSP_VIDEO_80x50=1" # ;; pc386) ENABLE_BSP="--enable-rtemsbsp=pc386 BSP_VIDEO_80x50=1" ;; # sis) ENABLE_BSP="${ENABLE_BSP} CONSOLE_USE_INTERRUPTS=1" ;; sis) ENABLE_BSP="${ENABLE_BSP} SIMSPARC_FAST_IDLE=1" ;; *) ENABLE_BSP=--enable-rtemsbsp="${BSP_TO_TEST}" ;; esac else doing_bare_bsp=yes ENABLE_BSP=--enable-rtemsbsp="bare" BARE_CPU="--enable-bare-cpu-model=" BARE_CFLAGS="--enable-bare-cpu-cflags=" case ${BSP_TO_TEST} in # Hitachi SH family bare-sh7032) BARE_MODEL_ARG=sh7032 BARE_CFLAGS_ARG="-Wall -m1 -DMHZ=20 -DCPU_CONSOLE_DEVNAME="\\\"/dev/null\\\""" ;; # Intel i386 family bare-i386_fp) BARE_MODEL_ARG=i386_fp BARE_CFLAGS_ARG="-m386" ;; bare-i386_nofp) BARE_MODEL_ARG=i386_nofp BARE_CFLAGS_ARG="-m386 -msoft-float" ;; bare-i486dx) BARE_MODEL_ARG=i486dx BARE_CFLAGS_ARG="-m486" ;; bare-i486sx) BARE_MODEL_ARG=i486sx BARE_CFLAGS_ARG="-m486 -msoft-float" ;; bare-pentium) BARE_MODEL_ARG=pentium BARE_CFLAGS_ARG="-mpentium" ;; # Motorola m68xxx and Coldfire family bare-m68000) BARE_MODEL_ARG=m68000 BARE_CFLAGS_ARG="-m68000 -msoft-float" ;; bare-m68020) BARE_MODEL_ARG=m68020 BARE_CFLAGS_ARG="-m68020" ;; bare-m68020nofp) BARE_MODEL_ARG=m68020 BARE_CFLAGS_ARG="-m68020 -msoft-float" ;; bare-m68040) BARE_MODEL_ARG=m68040 BARE_CFLAGS_ARG="-m68040" ;; bare-m68040nofp) BARE_MODEL_ARG=m68040 BARE_CFLAGS_ARG="-m68040 -msoft-float" ;; bare-m68060) BARE_MODEL_ARG=m68060 BARE_CFLAGS_ARG="-m68060" ;; bare-m68060nofp) BARE_MODEL_ARG=m68060 BARE_CFLAGS_ARG="-m68060 -msoft-float" ;; bare-m68302) BARE_MODEL_ARG=m68302 BARE_CFLAGS_ARG="-m68302 -msoft-float" ;; bare-cpu32) BARE_MODEL_ARG=cpu32 BARE_CFLAGS_ARG="-mcpu32" ;; bare-cpu32+) BARE_MODEL_ARG=cpu32+ BARE_CFLAGS_ARG="-mcpu32 -DRTEMS__mcpu32p__" ;; bare-m5200) BARE_MODEL_ARG=m5200 BARE_CFLAGS_ARG="-m5200" ;; # Motorola PowerPC Family bare-ppc403) BARE_MODEL_ARG=ppc403 BARE_CFLAGS_ARG="-mcpu=403" ;; bare-ppc603e) BARE_MODEL_ARG=ppc603e BARE_CFLAGS_ARG="-m60e" ;; # ARM Family bare-arm9tdmi) BARE_MODEL_ARG=arm9tdmi BARE_CFLAGS_ARG="-mcpu=arm9tdmi" ;; # Unknown CPU family *) echo This script does not know how to build ${BSP_TO_TEST} yet. echo usage exit 1 ;; esac BSP_TO_TEST=bare fi fi # # Convert user.cfg variables into RTEMS configuration options # case ${ENABLE_RTEMS_TESTS} in samples) RTEMS_TESTS_FLAG="--enable-tests=samples" ;; yes) RTEMS_TESTS_FLAG="--enable-tests" ;; *) RTEMS_TESTS_FLAG="--disable-tests" ;; esac if [ ${ENABLE_BSP_DIRTY_MEMORY} = yes ] ; then # Not all BSPs support this ENABLE_BSP="${ENABLE_BSP} BSP_DIRTY_MEMORY=1" fi if [ ${ENABLE_RTEMS_TCPIP} = yes ] ; then case ${CPU} in avr) TCPIP_FLAG="--disable-networking" ;; *) TCPIP_FLAG="--enable-networking" ;; esac else TCPIP_FLAG="--disable-networking" fi # --disable-rtems-inlines if [ x${DISABLE_INLINES} = xyes ] ; then DISABLE_INLINES_FLAG="--disable-rtems-inlines" fi if [ ${ENABLE_RTEMS_POSIX} = yes ] ; then POSIX_FLAG="--enable-posix" else POSIX_FLAG="--disable-posix" fi if [ ${ENABLE_RTEMS_SMP} = yes ] ; then SMP_FLAG="--enable-smp" else SMP_FLAG="--disable-smp" fi if [ ${ENABLE_RTEMS_ITRON} = yes ] ; then ITRON_FLAG="--enable-itron" else ITRON_FLAG="--disable-itron" fi ADA_FLAG="--disable-ada" ADA_TESTS_FLAG="--disable-expada" case ${target} in sparc*|powerpc*|i386*) if [ ${ENABLE_RTEMS_ADA} = yes ] ; then ADA_FLAG="--enable-ada" fi if [ ${ENABLE_RTEMS_ADA_TESTS} = yes ] ; then ADA_TESTS_FLAG="--enable-expada" fi ;; *) ;; esac # Only a few BSPs really support MP if [ ${ENABLE_RTEMS_MP} = yes ] ; then case ${BSP_TO_TEST} in simhppa|cvme961|mvme147s|psim|posix|multilib|leon3) ENABLE_MP_FLAG="--enable-multiprocessing" ;; *) echo "AUTOMATICALLY DISABLING MULTIPROCESSING!!!" ENABLE_MP_FLAG="--disable-multiprocessing" ;; esac else ENABLE_MP_FLAG="--disable-multiprocessing" fi # Some CPUs do not have C++ support if [ ${ENABLE_RTEMS_CXX} = yes ] ; then case ${CPU} in lm32) # RTEMS PR XXX ENABLE_RTEMS_CXX="--disable-cxx" ;; nios2) # GCC PR XXX ENABLE_RTEMS_CXX="--disable-cxx" ;; #or1k) # RTEMS PR XXX # ENABLE_RTEMS_CXX="--disable-cxx" ;; avr|bfin|m32c|m32r|tic4x) ENABLE_RTEMS_CXX="--disable-cxx" ;; *) ENABLE_RTEMS_CXX="--enable-cxx" ;; esac else ENABLE_RTEMS_CXX="--disable-cxx" fi if [ ${ENABLE_RTEMS_RDBG} = yes ] ; then ENABLE_RTEMS_RDBG="--enable-rdbg" else ENABLE_RTEMS_RDBG="--disable-rdbg" fi if [ ${ENABLE_RTEMS_MAINTAINER_MODE} = yes ] ; then ENABLE_RTEMS_MAINTAINER_MODE="--enable-maintainer-mode" else ENABLE_RTEMS_MAINTAINER_MODE="" fi ENABLE_DEPRECATED_HEADERS="--disable-deprecated" if [ ${BUILD_RTEMS_DEBUG} = "yes" ] ; then ENABLE_RTEMS_DEBUG="--enable-rtems-debug" else ENABLE_RTEMS_DEBUG="" fi ENABLE_ARGS="\ --prefix=${INSTALL_POINT} \ ${DISABLE_INLINES_FLAG} ${ENABLE_MP_FLAG} ${ENABLE_SMP_FLAG} \ ${ENABLE_RTEMS_DEBUG} ${ENABLE_RTEMS_CXX} \ ${ENABLE_RTEMS_RDBG} ${ENABLE_RTEMS_MAINTAINER_MODE} \ ${RTEMS_TESTS_FLAG} ${TCPIP_FLAG} \ ${POSIX_FLAG} ${ITRON_FLAG} ${ENABLE_DEPRECATED_HEADERS} \ ${ADA_FLAG} ${ADA_TESTS_FLAG}" if [ $CPU != unix ] ; then TARGET_ARG=--target=${target} #ENABLE_BSP= fi conf_rtems ${TARGET_ARG} ${ENABLE_ARGS} ${ENABLE_BSP} $args if [ $? -ne 0 ] ; then echo "Unable to configure successfully" exit 1 fi build_status=0 if [ ${verbose} = yes ]; then echo "Initiating ${MAKE} .." fi if [ ${BUILD_RTEMS_DEBUG} = "yes" ] ; then MAKE_DEBUG_ARG="VARIANT=DEBUG" fi # Calculate number of jobs as 1.5*ncpus + 1 ncpus=`/usr/bin/getconf _NPROCESSORS_ONLN 2>/dev/null` if [ $? -ne 0 ] ; then ncpus=2 fi njobs=`expr ${ncpus} / 2 + 1 + ${ncpus}` echo "Using make ${njobs} parallel jobs" if [ ${ENABLE_KEEP_BUILDING} = "yes" ] ; then MAKE_KEEP_GOING_ARG="-k" else MAKE_KEEP_GOING_ARG="" fi case ${BSP_TO_TEST} in multilib) echo "Executing ${MAKE} ${MAKE_DEBUG_ARG} ..." ${MAKE} -j${njobs} ${MAKE_KEEP_GOING_ARG} ${MAKE_DEBUG_ARG} \ RTEMS_BSP= build_status=$? check_fatal ${build_status} "failed ${MAKE} ${MAKE_DEBUG_ARG}." BSP_TO_TEST= ;; *) echo "Executing ${MAKE} ${MAKE_DEBUG_ARG} ..." ${MAKE} -j${njobs} ${MAKE_KEEP_GOING_ARG} ${MAKE_DEBUG_ARG} \ RTEMS_BSP=${BSP_TO_TEST} build_status=$? check_fatal ${build_status} "failed ${MAKE} ${MAKE_DEBUG_ARG}." ;; esac case $CPU in unix) ;; *) if [ ${do_install} = "yes" ] ; then echo "Executing ${MAKE} install ..." if [ X${BSP_TO_TEST} = X ] ; then ${MAKE} RTEMS_BSP= ${MAKE_DEBUG_ARG} install else find ${INSTALL_POINT}/${target} -name "*.h" -o -name "*.a" | \ while read f do rpm -qf $f >/dev/null 2>&1 test $? -eq 1 && (echo $f ; rm -f $f) done ${MAKE} RTEMS_BSP=${BSP_TO_TEST} ${MAKE_DEBUG_ARG} install fi check_fatal $? "failed ${MAKE} ${MAKE_DEBUG_ARG} install." fi ;; esac case ${target} in *4.6*|*4.7*|*4.8*) exeext=exe ;; *) exeext=ralf ;; esac case ${BSP_ARG} in multilib) # should be in build-CPU-multilib-rtems pwd cd .. rm -rf ${BUILDDIR}-bsps mkdir ${BUILDDIR}-bsps cd ${BUILDDIR}-bsps # same configure but this time we build the BSPs conf_rtems ${TARGET_ARG} ${ENABLE_ARGS} $args check_fatal $? "Unable to configure BSP step successfully" echo "Executing multilib BSP: ${MAKE} ${MAKE_DEBUG_ARG} ..." ${MAKE} -k -j${njobs} ${MAKE_DEBUG_ARG} status=$? # clean up install point find ${INSTALL_POINT}/${target}/lib -name "*rtems*.a" | xargs -e rm -f rm -rf ${INSTALL_POINT}/${target}/lib/include mkdir -p ../ticker-executables find . -name ticker.${exeext} | while read f do bsp=`echo $f | cut -d'/' -f4` cp $f ../ticker-executables/${CPU}-${bsp}-multilib-ticker.${exeext} done check_fatal $status "failed BSP ${MAKE} ${MAKE_DEBUG_ARG}." exit 0 ;; *) ;; esac # If we were installing a bare BSP, then we must fix the install point if [ ${do_install} = yes -a ${doing_bare_bsp} = yes ] ; then echo "Moving the RTEMS bare bsp directory to ${BSP_TO_TEST} ... " test -d ${INSTALL_POINT}/${target}/bare check_fatal $? "${INSTALL_POINT}/${target}/bare does not exist" mv ${INSTALL_POINT}/${target}/bare ${INSTALL_POINT}/${target}/${BSP_TO_TEST} check_fatal $? "failed to move the bare bsp directory to ${BSP_TO_TEST}." fi # gather size info of executables case ${target} in unix) sizecmd=size ; searchtestdir="NOT_SET";; *) sizecmd=${target}-size ; searchtestdir=${target}/${BSP_TO_TEST} ;; esac ext=exe count=`find . -name "*.nxe" | wc -l` if [ ${count} -ne 0 ] ; then ext=nxe fi ${sizecmd} `find . -name "*.${ext}"` | sed -e '1,1d' -e 's/^/SIZE:/' # Can we run the tests on a simulator? if [ ${ENABLE_RTEMS_TESTS} = "samples" -o \ ${ENABLE_RTEMS_TESTS} = "yes" ] ; then if [ ${RUN_RTEMS_TESTS} = yes ] ; then case ${BSP_TO_TEST} in realview_pbx_a9_qemu*) testable=yes ;; # arm/realview_pbx_a9_qemu* xilinx_zynq_a9_qemu) testable=yes ;; # arm/xilinx_zynq_a9_qemu edb7312) testable=yes ;; # arm/edb7312 rtl22xx) testable=yes ;; # arm/rtl22xx jmr3904) testable=yes ;; # mips/jmr3904 psim) testable=yes ;; # powerpc/psim sis) testable=yes ;; # sparc/sis erc32|leon2|leon3) # sparc using tsim case `uname -n` in england*|iceland*) testable=yes ;; *) testable=no ;; esac ;; posix) testable=yes ;; # unix/posix *) testable=no ;; esac else # Running tests disabled by user testable=no fi # If not multilib, grab the ticker.${exeext} and save it out if [ X${BSP_TO_TEST} != X ] ; then mkdir -p ../ticker-executables cp `find . -name ticker.${exeext}` \ ../ticker-executables/${CPU}-${BSP_TO_TEST}-ticker.${exeext} fi if [ ${testable} = yes ] ; then echo TESTING BSP testdir=${target}-${BSP_TO_TEST} rm -rf ${testdir} mkdir ${testdir} check_fatal $? "failed to mkdir test directory for ${BSP_TO_TEST}." cp `find . -name "*.${exeext}"` ${testdir} case ${BSP_TO_TEST} in jmr3904) runner=jmr3904 ;; psim) runner=psim ;; posix) runner="" ;; # ARM edb7312) runner=edb7312 ;; gumstix) runner=gumstix ;; realview_pbx_a9_qemu*) runner=${BSP_TO_TEST} ;; xilinx_zynq_a9_qemu) runner=xilinx_zynq_a9_qemu ;; rtl22xx) runner=rtl22xx ;; # SPARC erc32) runner=erc32 ;; leon2) runner=leon ;; leon3) runner=leon3 ;; sis) runner=sis ;; *) ;; esac cd ${testdir} check_fatal $? "failed to enter test directory for ${BSP_TO_TEST}." # This should run the tests ${runner} *.${exeext} # Check Logs echo "Checking Logs for Proper Test Completion ..." check_endof cd .. # Do not gather test executables as they are very large # gather results as best we can tar cjf ../log/${target}-${BSP_TO_TEST}-logs.tar.bz2 \ ${target}-${BSP_TO_TEST}/log fi pwd # if we installed it, then try to build hello world if [ ${do_install} = yes -a ${doing_bare_bsp} = no ] ; then # if this is a multilib, then handle it specially if [ X${BSP_TO_TEST} = X ] ; then find ${INSTALL_POINT}/${target}/lib -name "*rtems*.a" | xargs -e rm -f rm -rf ${INSTALL_POINT}/${target}/lib/include else SUITES= case ${BSP_TO_TEST} in posix|bare*) ;; *) if [ -d ../examples-v2 ] ; then SUITES="${SUITES} examples-v2" else echo "WARNING! examples-v2 not found" fi if [ -d ../class-examples ] ; then SUITES="${SUITES} class-examples" else echo "WARNING! class-examples not found" fi if [ -d ../examples ] ; then SUITES="${SUITES} examples" else echo "WARNING! examples not found" fi if [ ${ENABLE_RTEMS_TCPIP} = yes ] ; then if [ -d ../network-demos ] ; then SUITES="${SUITES} network-demos" fi fi # Build application level tests that use "make" for suite in ${SUITES} do cd .. cd ${suite} check_fatal $? "failed cd to ${suite}." RTEMS_MAKEFILE_PATH=${INSTALL_POINT}/${target}/${BSP_TO_TEST} \ ${MAKE} ${MAKE_DEBUG_ARG} clean check_fatal $? "failed 1st clean ${suite} on ${BSP_TO_TEST}." RTEMS_MAKEFILE_PATH=${INSTALL_POINT}/${target}/${BSP_TO_TEST} \ ${MAKE} ${MAKE_DEBUG_ARG} check_fatal $? "failed ${suite} on ${BSP_TO_TEST}." RTEMS_MAKEFILE_PATH=${INSTALL_POINT}/${target}/${BSP_TO_TEST} \ ${MAKE} ${MAKE_DEBUG_ARG} clean check_fatal $? "failed clean ${suite} on ${BSP_TO_TEST}." done # Build TCP/IP demos and addons if [ ${ENABLE_RTEMS_POSIX} = yes -a \ ${ENABLE_RTEMS_TCPIP} = yes -a \ -d ../rtems-addon-packages ] ; then cd ../rtems-addon-packages check_fatal $? "failed cd to rtems-addon-packages." RTEMS_MAKEFILE_PATH=${INSTALL_POINT}/${target}/${BSP_TO_TEST} \ sh ./bit check_fatal $? "failed to build add on on ${BSP_TO_TEST}." fi # now clean up the install image du -s -k ${INSTALL_POINT}/${target}/${BSP_TO_TEST} rm -rf ${INSTALL_POINT}/${target}/${BSP_TO_TEST} ;; esac fi fi # Should be back at the top of the build tree if [ ${build_status} -eq 0 -a \ ${ENABLE_CLEAN_ON_BUILD_PASSED} = "yes" ] ; then echo "Build OK - Removing ${BUILDDIR}" cd .. rm -rf ${BUILDDIR} fi fi exit 0