This is the mail archive of the crossgcc@sources.redhat.com mailing list for the crossgcc project.
See the CrossGCC FAQ for lots more information.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
only partway through my redesign, but here's what i have so far -- some of it's obviously temporary. currently (but this will change later), all of my setup variables are stuffed into a single file, allvars.conf, which is passed as an argument to my main script, btc.sh (BuildToolChain.sh), and any other args are after that. sample invocation: $ sh btc.sh allvars.conf --nounpack etc ... etc ... sample allvars.conf: --------------------------------------------------------------------- # # crosstool info # CROSSTOOL_DIR=/embedded/ct # helper PATCHES_DIR=${CROSSTOOL_DIR}/patches KERNEL_CONFIGS_DIR=${CROSSTOOL_DIR}/configs # # source and unloading info # TARBALLS_DIR=/embedded/tarballs # helper BINUTILS_SRC=${TARBALLS_DIR}/binutils-2.14.tar.gz GCC_SRC=${TARBALLS_DIR}/gcc-3.3.1.tar.gz GLIBC_SRC=${TARBALLS_DIR}/glibc-2.3.2.tar.bz2 GLIBC_LINUXTHREADS_SRC=$(echo $GLIBC_SRC | sed 's/glibc-/glibc-linuxthreads-/') KERNEL_SRC=/home/rpjday/build/kernel/linux-2.6.0-test6.tar.bz2 COMBOCODE=rday PATCHED_SOURCES_DIR=/embedded/patched_sources KERNELS_DIR=/embedded/kernels # # architecture info # TARGET=arm-linux TARGET_CFLAGS="-O" KERNEL_CONFIG_FILE=${KERNEL_CONFIGS_DIR}/arm.config # # project and build info # PROJECT=z5500 PRJROOT=/embedded/projects/${PROJECT} BUILD_DIR=${PRJROOT}/${COMBOCODE}/build PREFIX=${PRJROOT}/${COMBOCODE}/tools --------------------------------------------------------------------- sample btc.sh, with plenty of common code stuffed into helper functions to cut down on the main routine. note that i bail out of the main routine fairly early since i'm still converting, but i'm interested in feedback. btc.sh ---------------------------------------------------------------------- #!/bin/sh ########################################################## # # Input validation functions. # ########################################################## abort () { echo "$@" exit 1 } validate_all_input () { verify_set_variables verify_existing_objects \ ${PATCHES_DIR} \ ${KERNEL_CONFIGS_DIR} \ ${GCC_SRC} \ ${GLIBC_SRC} \ ${GLIBC_LINUXTHREADS_SRC} \ ${BINUTILS_SRC} \ ${KERNEL_SRC} verify_output_directories \ ${PATCHED_SOURCES_DIR} \ ${BUILD_DIR} \ ${PREFIX} } # # All of these variables should at least be non-empty. # verify_set_variables() { : ${PATCHES_DIR?"error, unset variable"} : ${KERNEL_CONFIGS_DIR?"error, unset variable"} : ${GCC_SRC?"error, unset variable"} : ${GLIBC_SRC?"error, unset variable"} : ${GLIBC_LINUXTHREADS_SRC?"error, unset variable"} : ${BINUTILS_SRC?"error, unset variable"} : ${KERNEL_SRC?"error, unset variable"} : ${PATCHED_SOURCES_DIR?"error, unset variable"} : ${COMBOCODE?"error, unset variable"} : ${TARGET?"error, unset variable"} : ${TARGET_CFLAGS?"error, unset variable"} : ${KERNEL_CONFIG_FILE?"error, unset variable"} : ${PROJECT?"error, unset variable"} : ${BUILD_DIR?"error, unset variable"} : ${PREFIX?"error, unset variable"} } # # All of the file/directory arguments to this function should exist. # verify_existing_objects () { for obj in $* ; do test -e $obj || abort "Error, required object $obj does not exist, exiting." done } # # All of the directory arguments to this function should either exist and be # writable, or they should be creatable. # verify_output_directories () { for dir in $* ; do if test -d $dir ; then test -w $dir || abort "Directory $dir is not writable by you, exiting." continue fi mkdir -p $dir || abort "Non-existent output dir $dir can't be created, exiting." done } ########################################################## # # Lots of helper functions. # ########################################################## set_helper_variables () { GCC_VER=$(basename $(strip_archive_suffix "$GCC_SRC")) GLIBC_VER=$(basename $(strip_archive_suffix "$GLIBC_SRC")) BINUTILS_VER=$(basename $(strip_archive_suffix "$BINUTILS_SRC")) KERNEL_VER=$(basename $(strip_archive_suffix "$KERNEL_SRC")) GLIBC_LINUXTHREADS_VER=$(basename $(strip_archive_suffix "$GLIBC_LINUXTHREADS_SRC")) GCC_SRC_DIR=${PATCHED_SOURCES_DIR}/${GCC_VER} GLIBC_SRC_DIR=${PATCHED_SOURCES_DIR}/${GLIBC_VER} BINUTILS_SRC_DIR=${PATCHED_SOURCES_DIR}/${BINUTILS_VER} KERNEL_SRC_DIR=${PATCHED_SOURCES_DIR}/${KERNEL_VER} GCC_BUILD_DIR=${BUILD_DIR}/${GCC_VER} GLIBC_BUILD_DIR=${BUILD_DIR}/${GLIBC_VER} BINUTILS_BUILD_DIR=${BUILD_DIR}/${BINUTILS_VER} KERNEL_BUILD_DIR=${BUILD_DIR}/${KERNEL_VER} ARCH=$(map_target_to_arch $TARGET) } strip_archive_suffix () { echo $1 | sed 's,\.tar\.gz$,, ; s,\.tar\.bz2$,, ; s,\.tgz$,,;' } unpack_archive_into_directory () { ARCHIVE=$1 DIR=$2 test -w $DIR || abort "Trying to unpack into non-writable directory $DIR, exiting." case $ARCHIVE in *tar.gz) tar xzf $ARCHIVE -C $DIR ;; *tgz) tar xzf $ARCHIVE -C $DIR ;; *tar.bz2) tar xjf $ARCHIVE -C $DIR ;; esac } apply_patches_to_directory () { DIR=$1 ; shift for patch in $* ; do patch -p1 -force --directory $DIR < $patch done } unpack_and_patch_sources () { rm -rf ${PATCHED_SOURCES_DIR} mkdir -p ${PATCHED_SOURCES_DIR} for src in $GCC_SRC $GLIBC_SRC $BINUTILS_SRC $KERNEL_SRC ; do BASE=$(basename $(strip_archive_suffix "$src")) echo "BASE = $BASE" echo "Unpacking $BASE ..." unpack_archive_into_directory $src ${PATCHED_SOURCES_DIR} echo "Patching $BASE ..." CURR_PATCH_DIR=${PATCHES_DIR}/${BASE} echo "CURR_PATCH_DIR = $CURR_PATCH_DIR" test -d ${CURR_PATCH_DIR} || continue apply_patches_to_directory \ ${PATCHED_SOURCES_DIR}/${BASE} \ ${CURR_PATCH_DIR}/*.patch done } apply_glibc_addons () { for addon in $* ; do echo "Applying glibc addon $addon..." unpack_archive_into_directory $addon ${PATCHED_SOURCES_DIR}/${GLIBC_VER} CURR_PATCH_DIR=${PATCHES_DIR}/${GLIBC_LINUXTHREADS_VER} test -d ${CURR_PATCH_DIR} || continue apply_patches_to_directory \ ${PATCHED_SOURCES_DIR}/${GLIBC_VER} \ ${CURR_PATCH_DIR}/*.patch done } map_target_to_arch () { case $1 in alpha*) arch=alpha ;; arm*) arch=arm ;; cris*) arch=cris ;; hppa*) arch=parisc ;; i*86*) arch=i386 ;; ia64*) arch=ia64 ;; mips*) arch=mips ;; m68k*) arch=m68k ;; powerpc*) arch=ppc ;; ppc*) echo "Target $TARGET incompatible with binutils and gcc regression tests; use target powerpc-* instead" ; exit 1 ;; s390*) arch=s390 ;; sh*) arch=sh ;; sparc64*) arch=sparc64 ;; sparc*) arch=sparc ;; x86_64*) arch=x86_64 ;; *) echo "Bad target $TARGET" ; exit 1 esac echo "$arch" } ########################################################## # # MAIN ROUTINE # ########################################################## . $1 ; shift validate_all_input set_helper_variables while [ $# -gt 0 ]; do case "$1" in --nounpack|-nounpack) opt_no_unpack=1 ;; --nobuild|-nobuild) opt_no_build=1 ;; --builduserland|-builduserland) opt_builduserland=1 ;; --notest|-notest) opt_no_test=1 ;; *) echo "Usage: btc [--nounpack|--nobuild|--builduserland|--notest]" ; exit esac shift done if test "$opt_no_unpack" = ""; then unpack_and_patch_sources apply_glibc_addons ${GLIBC_LINUXTHREADS_SRC} fi if test "$opt_no_build" = ""; then echo "Starting build phase here..." BUILD=$(${GCC_SRC_DIR}/config.guess) HOST=$(echo $BUILD | sed s/-/-host_/) echo "Starting a build with the following values:" echo " GCC_SRC_DIR = $GCC_SRC_DIR" echo " GCC_BUILD_DIR = $GCC_BUILD_DIR" echo " ARCH = $ARCH" echo " TARGET = $TARGET" echo " BUILD_DIR = $BUILD_DIR" echo " PREFIX = $PREFIX" echo " BUILD = $BUILD" echo " HOST = $HOST" exit ################## bailing here, still writing ### rm -rf $PREFIX mkdir -p $PREFIX mkdir -p $BUILD_DIR cd $BUILD_DIR sh $TOP_DIR/crosstool.sh cd $TOP_DIR # Cute little compile test sh testhello.sh fi if test "$opt_builduserland" = "1"; then # Build /bin/sh and any other non-toolchain things configured in ptx.config # Only needed if you can't run the target's normal /bin/sh with the new toolchain cd $BUILD_DIR sh $TOP_DIR/ptx.sh fi if test "$opt_no_test" = ""; then # Beefy test that lasts for hours cd $BUILD_DIR sh $TOP_DIR/crosstest.sh fi ---------------------------------------------------------------------------- rday ------ Want more information? See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/ Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |