toolchain modoifications
[hdw-linux/hdw-linux.git] / scripts / Config
index 9e7d704..42c877a 100755 (executable)
@@ -1,26 +1,27 @@
 #
 # hdw-linux Config script
 #
-# author:      hackbard
+# author: hackbard@hackdaworld.org
 #
 # script initializing environment
 # 
 
-hdw_status=""
+stage=""
 
 while [ "$1" ] ; do
        case "$1" in
-               -stage)         hdw_status="$2"         ; shift 2 ;;
+               -stage)         stage="$2"              ; shift 2 ;;
                *)              echo 
                                echo "Usage:"
                                echo
                                echo " ./scripts/Config -stage <stagelevel>"
-                               echo ;;
+                               echo
+                               shift 1 ; exit 1 ;;
        esac
 done
 
-if [ -z "$hdw_status" ]; then
-       echo "something went wrong. stage needs to be specified."
+if [ -z "$stage" ]; then
+       echo "something went wrong, no stage specified."
        exit 1
 fi
 
@@ -39,17 +40,14 @@ else
        exit 1
 fi
 
-# define the stage 0/1 prefix to use
-# default "static", though no static linking is done anymore in stage1
-if [ -z "$hdw_stage1_prefix" ] ; then
-        s1_prefix="static" # default
-else
-       s1_prefix=$hdw_stage1_prefix
-fi
+# define the toolchain name, default: "toolchain"
+[ -z "$hdw_tc_name" ] && hdw_tc_name="toolchain"
+export tc_name=$hdw_tc_name
 
 # lets see what root is:
-[ "$hdw_status" = "2" -o "$hdw_status" = "3" ] && root=""
-if [ "$hdw_status" -lt 2 -o "$hdw_crossbuild" != "0" ] ; then
+root=""
+if [ "$hdw_crossbuild" != "0" -o "$stage" -lt "2" ] ; then
+       # check for properly configured build directory
        if [ -z "$hdw_build_dir" ] ; then
                echo "please set hdw_build_dir in ./Config!"
                exit 1
@@ -66,18 +64,33 @@ fi
 set +h
 umask 022
 export LC_ALL=POSIX
-[ "$hdw_status" -lt "2" ] && export PATH="$root/${s1_prefix}/bin:$PATH"
+[ "$stage" -lt "2" -o "$hdw_crossbuild" != "0" ] && \
+       export PATH="$root/${hdw_tc_name}/bin:$PATH"
 
 # let's do optimization and care for crossbuilds
-if [ ! -z "`uname --version | grep sh-utils`" ] ; then
+#
+# as gnu autoconf terminology has been confusing me again and again,
+# there are a few comments following ;)
+#
+# ref: gcc docs - hardware models and configurations
+#      @ http://gcc.gnu.org/onlinedocs/
+#
+
+# --build: the system the actual executable is created on. uname will tell us.
+#          you may set hdw_real_build, or
+#          you may fake uname output using fake_utsname kernel module!
+if [ -n "`uname --version | grep sh-utils`" ] ; then
        hdw_arch_build="`uname -m -p | tr " " -`-linux-gnu"
 else
        hdw_arch_build="`uname -m`-unknown-linux-gnu"
 fi
+[ -n "$hdw_real_build" ] && hdw_arch_build="${hdw_real_build}-unknown-linux-gnu"
+
+# --target: the system for which the executable is going to produce code.
 case "$hdw_arch" in
        ia32)   if [ -z "$hdw_arch_opt" ] ; then
                        hdw_arch_target="i386-pc-linux-gnu"
-               elif [ ! -z "$hdw_arch_opt" ] ; then
+               else
                        hdw_arch_target="${hdw_arch_opt}-pc-linux-gnu"
                        hdw_cflags="-march=${hdw_arch_opt}"
                fi
@@ -85,46 +98,61 @@ case "$hdw_arch" in
        sparc*) if [ -z "$hdw_arch_opt" ] ; then
                        hdw_arch_target="$hdw_arch-unknown-linux-gnu"
                else
-                       # hack this! :)
-                       echo "pls hack sparc* opt. options and submit :)"
-                       echo "no optimization used!"
                        hdw_arch_target="$hdw_arch-unknown-linux-gnu"
                        hdw_cflags="-march={hdw_arch_opt}"
                fi ;;
        ppc)
                hdw_arch_target="powerpc-unknown-linux-gnu"
-               [ ! -z "$hdw_arch_opt" ] && hdw_cflags="-march=${hdw_arch_opt}"
+               if [ -z "$hdw_arch_opt" ] ; then
+                       hdw_cflags="-mcpu=common"
+               else
+                       hdw_cflags="-mcpu=${hdw_arch_opt}"
+               fi
                hdw_arch_build=${hdw_arch_build//ppc/powerpc} ;;
+       ppc64)
+               hdw_arch_target="powerpc64-unknown-linux-gnu"
+               if [ -z "$hdw_arch_opt" ] ; then
+                       hdw_cflags="-mcpu=common"
+               else
+                       hdw_cflags="-mcpu=${hdw_arch_opt}"
+               fi
+               hdw_arch_build=${hdw_arch_build//ppc64/powerpc64} ;;
        mips)   hdw_arch_target="mips-unknown-linux-gnu"
-               [ ! -z "$hdw_arch_opt" ] && hdw_cflags="-march=${hdw_arch_opt}"
-               ;;
-       *)      echo "not supported yet"
+               if [ -z "$hdw_arch_opt" ] ; then
+                       echo "info: no optimization set"
+               else
+                       hdw_cflags="-march=${hdw_arch_opt}"
+               fi ;;
+       *)      echo "$hdw_arch_target not supported yet"
                echo "please choose a valid optimization and build platform."
                exit 1 ;;
 esac
+
+# --host: system where the created executable runs on.
+hdw_arch_host=${hdw_arch_build}
+[ "$stage" != "0" -a "$hdw_crossbuild" = "0" ] && \
+       hdw_arch_host=${hdw_arch_target}
+
 # -O flag
-[ ! -z "$hdw_opt" ] && hdw_cflags="-O${hdw_opt} $hdw_cflags"
+# optimization only at stages >= 1
+if [ -n "$hdw_opt" -a "$stage" != "0" ] ; then
+       hdw_cflags="-O${hdw_opt} $hdw_cflags"
+else
+       unset hdw_cflags
+fi
 
 # build tools to use
 hdw_arch_prefix=""
-if [ "$hdw_crossbuild" != "0" ] ; then
-       hdw_arch_prefix="$hdw_arch_target-"
-       if [ "$hdw_real_build" ] ; then
-               if [ "$hdw_arch" = "ia32" ] ; then
-               hdw_arch_build=${hdw_arch_build//$hdw_arch_opt/$hdw_real_build}
-               else
-               hdw_arch_build=${hdw_arch_build//$hdw_arch/$hdw_real_build}
-               fi
-       fi
-fi
-# test: actually we always use the compilers for target
-# hdw_arch_prefix="$hdw_arch_target-"
+[ "$stage" != "0" ] && hdw_arch_prefix="$hdw_arch_target-"
 
-# resume ...
+# print decissions for debugging ...
+echo "root variable set to '$root'"
 echo "hdw_arch_target variable set to $hdw_arch_target"
 echo "hdw_arch_build variable set to $hdw_arch_build"
-echo "hdw_cflags variable set to $hdw_cflags"
-[ "$hdw_status" = "1" ] && echo "hdw_stage1_prefix set to '$s1_prefix'"
+echo "hdw_arch_host variable set to $hdw_arch_host"
+echo "hdw_arch_prefix variable set to '$hdw_arch_prefix'"
+echo "hdw_cflags variable set to '$hdw_cflags'"
+echo "hdw_tc_name set to '$hdw_tc_name'"
 
 # lets see what we are going to build
 if [ -z $hdw_target ] ; then