toolchain modoifications
[hdw-linux/hdw-linux.git] / scripts / Config
1 #
2 # hdw-linux Config script
3 #
4 # author: hackbard@hackdaworld.org
5 #
6 # script initializing environment
7
8
9 stage=""
10
11 while [ "$1" ] ; do
12         case "$1" in
13                 -stage)         stage="$2"              ; shift 2 ;;
14                 *)              echo 
15                                 echo "Usage:"
16                                 echo
17                                 echo " ./scripts/Config -stage <stagelevel>"
18                                 echo
19                                 shift 1 ; exit 1 ;;
20         esac
21 done
22
23 if [ -z "$stage" ]; then
24         echo "something went wrong, no stage specified."
25         exit 1
26 fi
27
28 # execute  Config file & create symlink to doc/README + doc/BUILD
29 if [ -f ./Config ] ; then
30         hdw_home_dir=`pwd`
31         echo "setting hdw_home_dir to $hdw_home_dir"
32         echo "reading ./Config file"
33         . ./Config
34         [ ! -s ./README ] && ln -s ./doc/README .
35         [ ! -s ./BUILD ] && ln -s ./doc/BUILD .
36         [ ! -s ./INSTALL ] && ln -s ./doc/INSTALL .
37         [ ! -s ./License ] && ln -s ./doc/License .
38 else
39         echo "./Config file not found. are you in correct directory?"
40         exit 1
41 fi
42
43 # define the toolchain name, default: "toolchain"
44 [ -z "$hdw_tc_name" ] && hdw_tc_name="toolchain"
45 export tc_name=$hdw_tc_name
46
47 # lets see what root is:
48 root=""
49 if [ "$hdw_crossbuild" != "0" -o "$stage" -lt "2" ] ; then
50         # check for properly configured build directory
51         if [ -z "$hdw_build_dir" ] ; then
52                 echo "please set hdw_build_dir in ./Config!"
53                 exit 1
54         elif [ ! -d $hdw_build_dir ] ; then
55                 echo "please set _existing_ hdw_build_dir in ./Config"
56                 exit 1
57         else
58                 echo "hdw_build_dir variable set to $hdw_build_dir"
59                 root="$hdw_build_dir"
60         fi
61 fi
62
63 # setting up general environment, now that we know $root
64 set +h
65 umask 022
66 export LC_ALL=POSIX
67 [ "$stage" -lt "2" -o "$hdw_crossbuild" != "0" ] && \
68         export PATH="$root/${hdw_tc_name}/bin:$PATH"
69
70 # let's do optimization and care for crossbuilds
71 #
72 # as gnu autoconf terminology has been confusing me again and again,
73 # there are a few comments following ;)
74 #
75 # ref: gcc docs - hardware models and configurations
76 #      @ http://gcc.gnu.org/onlinedocs/
77 #
78
79 # --build: the system the actual executable is created on. uname will tell us.
80 #          you may set hdw_real_build, or
81 #          you may fake uname output using fake_utsname kernel module!
82 if [ -n "`uname --version | grep sh-utils`" ] ; then
83         hdw_arch_build="`uname -m -p | tr " " -`-linux-gnu"
84 else
85         hdw_arch_build="`uname -m`-unknown-linux-gnu"
86 fi
87 [ -n "$hdw_real_build" ] && hdw_arch_build="${hdw_real_build}-unknown-linux-gnu"
88
89 # --target: the system for which the executable is going to produce code.
90 case "$hdw_arch" in
91         ia32)   if [ -z "$hdw_arch_opt" ] ; then
92                         hdw_arch_target="i386-pc-linux-gnu"
93                 else
94                         hdw_arch_target="${hdw_arch_opt}-pc-linux-gnu"
95                         hdw_cflags="-march=${hdw_arch_opt}"
96                 fi
97                 hdw_arch_build=${hdw_arch_build//unknown/pc} ;;
98         sparc*) if [ -z "$hdw_arch_opt" ] ; then
99                         hdw_arch_target="$hdw_arch-unknown-linux-gnu"
100                 else
101                         hdw_arch_target="$hdw_arch-unknown-linux-gnu"
102                         hdw_cflags="-march={hdw_arch_opt}"
103                 fi ;;
104         ppc)
105                 hdw_arch_target="powerpc-unknown-linux-gnu"
106                 if [ -z "$hdw_arch_opt" ] ; then
107                         hdw_cflags="-mcpu=common"
108                 else
109                         hdw_cflags="-mcpu=${hdw_arch_opt}"
110                 fi
111                 hdw_arch_build=${hdw_arch_build//ppc/powerpc} ;;
112         ppc64)
113                 hdw_arch_target="powerpc64-unknown-linux-gnu"
114                 if [ -z "$hdw_arch_opt" ] ; then
115                         hdw_cflags="-mcpu=common"
116                 else
117                         hdw_cflags="-mcpu=${hdw_arch_opt}"
118                 fi
119                 hdw_arch_build=${hdw_arch_build//ppc64/powerpc64} ;;
120         mips)   hdw_arch_target="mips-unknown-linux-gnu"
121                 if [ -z "$hdw_arch_opt" ] ; then
122                         echo "info: no optimization set"
123                 else
124                         hdw_cflags="-march=${hdw_arch_opt}"
125                 fi ;;
126         *)      echo "$hdw_arch_target not supported yet"
127                 echo "please choose a valid optimization and build platform."
128                 exit 1 ;;
129 esac
130
131 # --host: system where the created executable runs on.
132 hdw_arch_host=${hdw_arch_build}
133 [ "$stage" != "0" -a "$hdw_crossbuild" = "0" ] && \
134         hdw_arch_host=${hdw_arch_target}
135
136 # -O flag
137 # optimization only at stages >= 1
138 if [ -n "$hdw_opt" -a "$stage" != "0" ] ; then
139         hdw_cflags="-O${hdw_opt} $hdw_cflags"
140 else
141         unset hdw_cflags
142 fi
143
144 # build tools to use
145 hdw_arch_prefix=""
146 [ "$stage" != "0" ] && hdw_arch_prefix="$hdw_arch_target-"
147
148 # print decissions for debugging ...
149 echo "root variable set to '$root'"
150 echo "hdw_arch_target variable set to $hdw_arch_target"
151 echo "hdw_arch_build variable set to $hdw_arch_build"
152 echo "hdw_arch_host variable set to $hdw_arch_host"
153 echo "hdw_arch_prefix variable set to '$hdw_arch_prefix'"
154 echo "hdw_cflags variable set to '$hdw_cflags'"
155 echo "hdw_tc_name set to '$hdw_tc_name'"
156
157 # lets see what we are going to build
158 if [ -z $hdw_target ] ; then 
159         echo "please set hdw_target in ./Config!"
160         exit 1
161 elif [ ! -d ./targets/$hdw_target ] ; then 
162         echo "please set _existing_ hdw_target in ./Config!"
163         exit 1
164 else
165         echo "hdw_target variable set to $hdw_target"
166 fi
167