|
|||
Prex Home / Browse Source - Prex Version: 0.9.0 |
|||
root/configure/* [<][>][^][v][top][bottom][index][help] */#! /bin/sh # # Prex configure script # # Required host commands: echo, pwd, expr, uname, tr, cat, cp # usage() { if [ -n "$*" ]; then echo "configure: $*" fi echo echo "Usage: configure [options]" echo "Options:" echo " --help print this message" echo " --target=TARGET use TARGET for target system" echo " --profile=PROFILE use PROFILE for target profile" echo " --cross-prefix=PREFIX use PREFIX for compile tools" echo " --cc=CC use CC as C compiler" echo " --no-debug disable all debug features" exit 1 } quit() { echo "Error: $1" exit 1 } setdefaults() { target="" profile="" prefix="" srcdir=`pwd` # Use GNU tools as default toolchain cc="gcc" cpp="cpp" as="as" ld="ld" ar="ar" objcopy="objcopy" objdump="objdump" strip="strip" } checkpath() { # Input files CONFIG_IN=$srcdir/conf/$arch/$platform$profile SECURITY_IN=$srcdir/conf/etc/security # Output files CONFIG_MK=$srcdir/conf/config.mk CONFIG_H=$srcdir/conf/config.h CONFIG_LD=$srcdir/conf/config.ld DRVTAB_H=$srcdir/conf/drvtab.h DRVTAB_TMP=$srcdir/conf/drvtab.tmp CAPTAB_H=$srcdir/conf/captab.h if [ ! -f $CONFIG_IN ]; then quit "Can not find $CONFIG_IN for '$target' target" fi } parseargs() { while [ -n "$1" ]; do case $1 in --*=*) option=`expr "x$1" : 'x\([^=]*\)='` optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` ;; --*) option=$1 ;; *) usage "unrecognized option $1" ;; esac case $option in --help) usage ;; --target) target=$optarg ;; --profile) profile="-$optarg" ;; --cross-prefix) prefix=$optarg ;; --cc) cc=$optarg ;; --no-debug) nodebug=1 ;; *) usage "Unrecognized option $1" ;; esac shift done } gettarget() { if [ -z "$target" ]; then echo "Warning: '--target' option was not specified" echo "The target system was set to 'x86-pc'" target="x86-pc" fi arch=`expr "x$target" : 'x\([^=]*\)-'` platform=`expr "x$target" : 'x[^=]*-\(.*\)'` case "$arch" in x86|arm|ppc|sh|mips) ;; *) quit "Unkown target architecture: $arch" ;; esac } gethost() { # 'uname' command may be unavailable under Windows. # So, we check MACHTYPE variable for cygwin/mingw at first. case "$MACHTYPE" in *-cygwin) hostname="CYGWIN" ;; *-msys) hostname="MINGW" ;; *) hostname=`uname -s` ;; esac } # Set the gcc option only when it's supported. setgccoption() { echo "checking $1" if ${prefix}${cc} $1 -S -xc /dev/null -o /dev/null > /dev/null 2>&1; then echo "GCCFLAGS+= $1" >> $CONFIG_MK fi } checktools() { # # Check compiler version # case "$cc" in *gcc*) setgccoption "-fno-stack-protector" ;; esac } settools() { # # Set host specific tool settings # case "$hostname" in *BSD) ;; SunOS) # Solaris as="gas" ld="gld" ar="gar" strip="gstrip" objcopy="gobjcopy" objdump="gobjdump" ;; CYGWIN*|MINGW*) case "$arch" in x86) prefix="i386-elf-" ;; ppc) prefix="powerpc-elf-" ;; *) prefix="$arch-elf-" ;; esac ;; esac # # Set tools # case "$cc" in *gcc*) cc_type="_GNUC_" ;; pcc) cc_type="_PCC_" ;; suncc) cc_type="_SUNPRO_C_" cc="suncc" ;; *) quit "Unkown compiler: $cc" ;; esac } options() { param=`expr "x$1" : 'x\([^= ]*\)'` value=`expr "x$1" : 'x[^=]*=\([A-Za-z0-9\.]*\)'` if [ "x$value" = x ] ; then echo "CONFIG_${param}=y" echo "CONFIG_${param}=y" >> $CONFIG_MK echo "#define CONFIG_${param} y" >> $CONFIG_H else echo "CONFIG_${param}=${value}" echo "CONFIG_${param}=${value}" >> $CONFIG_MK echo "#define CONFIG_${param} ${value}" >> $CONFIG_H fi } device() { param=`echo $1 | tr '[a-z]' '[A-Z]'` echo "CONFIG_${param}=y" echo "CONFIG_${param}=y" >> $CONFIG_MK echo "#define CONFIG_${param} y" >> $CONFIG_H echo "extern struct driver $1_driver;" >> $DRVTAB_H echo " &$1_driver," >> $DRVTAB_TMP } capability() { { echo "{" echo " \"$1\"," shift 1 while [ "$1" != "" ] ; do if [ "$2" != "" ] ; then echo " $1 |" else echo " $1" fi shift 1 done echo "}," } >> $CAPTAB_H } memory() { echo "CONFIG_$1=$2" echo "CONFIG_$1=$2" >> $CONFIG_MK echo "CONFIG_$1 = $2 ;" >> $CONFIG_LD echo "#define CONFIG_$1 $2" >> $CONFIG_H } command() { param=`echo $1 | tr '[a-z]' '[A-Z]'` echo "CONFIG_CMD_${param}=y" echo "CONFIG_CMD_${param}=y" >> $CONFIG_MK echo "#define CONFIG_CMD_${param} y" >> $CONFIG_H } parseconfig() { while read line; do read cmd rest <<-END_OF_COMMAND $line END_OF_COMMAND case "$cmd" in options) options $rest ;; device) device $rest ;; capability) capability $rest ;; makeoptions) echo "$rest" echo "$rest" >> $CONFIG_MK ;; memory) memory $rest ;; command) command $rest ;; esac done < $1 } main() { [ -d conf ] || quit "configure must be run from the top source level" # # Process input arguments # setdefaults parseargs "$@" gettarget checkpath gethost settools echo "#" > $CONFIG_MK echo "# Automatically generated file. Don't edit" >> $CONFIG_MK echo "#" >> $CONFIG_MK echo "_CONFIG_MK_=1" >> $CONFIG_MK echo "/*" > $CONFIG_H echo " * Automatically generated file. Don't edit" >> $CONFIG_H echo " */" >> $CONFIG_H cp $CONFIG_H $CONFIG_LD cp $CONFIG_H $DRVTAB_H cp $CONFIG_H $CAPTAB_H echo "" > $DRVTAB_TMP echo "struct driver *driver_table[] = {" >> $DRVTAB_TMP echo "" >> $CAPTAB_H echo "const struct cap_map cap_table[] = {" >> $CAPTAB_H # # Setup build settings # { echo "ARCH=${arch}" echo "PLATFORM=${platform}" echo "PROFILE=${platform}${profile}" if [ -n "${nodebug}" ]; then echo "NDEBUG=1" fi echo "${cc_type}=1" echo "CC=${prefix}${cc}" echo "CPP=${prefix}${cpp}" echo "AS=${prefix}${as}" echo "LD=${prefix}${ld}" echo "AR=${prefix}${ar}" echo "OBJCOPY=${prefix}${objcopy}" echo "OBJDUMP=${prefix}${objdump}" echo "STRIP=${prefix}${strip}" } >> $CONFIG_MK # # Adjust tool options # checktools # # Generate configuration parameters # echo "checking configuration files..." echo "#define CONFIG_MACHINE ${target}" >> $CONFIG_H echo "#define CONFIG_PROFILE ${profile}" >> $CONFIG_H parseconfig $CONFIG_IN parseconfig $SECURITY_IN cat $DRVTAB_TMP >> $DRVTAB_H echo "};" >> $DRVTAB_H rm -f $DRVTAB_TMP echo "{ NULL, 0 }" >> $CAPTAB_H echo "};" >> $CAPTAB_H echo echo "Prex is now hopefully configured for your setup." echo "Now you must run a make." } main "$@" /* [<][>][^][v][top][bottom][index][help] */ | |||
Copyright© 2005-2009 Kohsuke Ohtani |