1 # hdw - linux create cross environment script
3 # author: hackbard@hackdaworld.dyndns.org
5 # this script is used to create the cross env
9 # hopefully obsolete, as toolchain gets build in every build now!
11 # just kept for nostalgic reasons, and damn it was a lot work to type
12 # this bullshit here ...
15 echo "create cross environment script obsolete now."
16 echo "we build a tool-chain in the beginning of stage 1"
21 # some usefull functions
24 patches=`ls $hdw_home_dir/packages/base/$package/*.patch`
25 for patch in $patches; do
26 echo "applying patch $patch ..."
29 patches=`ls $hdw_home_dir/packages/base/$package/*.patch.${hdw_arch}`
30 for patch in $patches; do
31 echo "applying patch $patch ..."
34 patches=`ls $hdw_home_dir/misc/crossbuild/$package/*.patch`
35 for patch in $patches; do
36 echo "applying patch $patch ..."
39 patches=`ls $hdw_home_dir/misc/crossbuild/$package/*.patch.${hdw_arch}`
40 for patch in $patches; do
41 echo "applying patch $patch ..."
53 echo "set apropriate compiler flags ..."
54 export CC=cc AS=as LD=ld AR=ar NM=nm F77=f77 CXX=c++
55 export STRIP=strip GASP=gasp RANLIB=ranlib KCC=kcc
64 if [ ! -z "$1" ] ; then
65 # this seems to be a standalone call
66 . ./scripts/Config -stage 1 # no reason for other stage
67 . ./scripts/subroutines
71 -cross_root) cross_root="$2" ; shift 2 ;;
72 -standalone) echo "default standalone call"
74 -no_glibc) no_glibc="1"
75 echo "not building glibc"
78 echo "$0 -cross_root foobar"
86 if [ -z "$hdw_build_dir" ] ; then
87 echo "debug: \$hdw_build_dir variable not set"
91 [ -z "$cross_root" ] && cross_root="$hdw_build_dir/crossenv-$hdw_arch"
93 if [ ! -f $cross_root/.cross_env ] ; then
97 echo_y "crossbuilding is devel right now - you might crash your system!"
99 echo_g "creating crossenv:"
100 echo -e "\a" ; sleep 2
101 # creating the cross root directory
105 for object in linux binutils; do
106 eval ${object}_src=`awk '/^# \[D\]/ { print $3 }' \
107 packages/base/$object/$object | sort -r | tail -1`
108 eval ${object}_ver=`awk '/^# \[V\]/ { print $3 }' \
109 packages/base/$object/$object`
110 eval tmp=\$${object}_src
111 if [ -f download/base/$object/$tmp ] ; then
112 echo "found $object package -> $tmp"
114 echo "$tmp missing, aborting."
119 gcc_src=`awk '/^# \[D\]/ { print $3 }' packages/base/gcc/gcc`
120 gcc_ver=`awk '/^# \[V\]/ { print $3 }' packages/base/gcc/gcc`
121 glibc_src=`awk '/^# \[D\]/ { print $3 }' packages/base/glibc/glibc`
122 glibc_ver=`awk '/^# \[V\]/ { print $3 }' packages/base/glibc/glibc`
123 for i in $gcc_src; do
124 if [ -f download/base/gcc/$i ] ; then
125 echo "found gcc package -> $i"
127 echo "$i missing, aborting."
131 for i in $glibc_src; do
132 if [ -f download/base/glibc/$i ] ; then
133 echo "found glibc package -> $i"
135 echo "$i missing, aborting."
139 gcc1_src=`echo $gcc_src | awk '{ print $1 }'`
140 gcc2_src=`echo $gcc_src | awk '{ print $2 }'`
141 g_a="" ; [ "$gcc_ver" != "cvs" ] && g_a="-$gcc_ver"
144 export PATH="$PATH:$cross_root/bin:$cross_root/$hdw_arch_target/bin"
148 echo "creating build and crossenv directories ..."
149 mkdir -p $hdw_build_dir/src.crossenv
150 mkdir -p $cross_root/$hdw_arch_target/include
153 # prepare confopt, make_conf, install_conf and cmd variables
159 cd $hdw_build_dir/src.crossenv
163 echo "creating linux-headers"
164 if [ -f .linux-header ] ; then
165 echo "linux headers already build, skipping ..."
166 echo "build date: -> `cat .linux-header`"
169 echo "extracting linux source ..."
170 tar --use-compress-program=bzip2 \
171 -xvf $hdw_home_dir/download/base/linux/$linux_src
172 cd linux-$linux_ver* &&
176 run_it make include/linux/version.h
178 echo "copy headers ..."
179 cp -rv include/linux $cross_root/$hdw_arch_target/include
180 cp -rv include/asm-$hdw_arch \
181 $cross_root/$hdw_arch_target/include/asm
184 echo "`date`" > .linux-header
185 ) > linux-header.log 2>&1
188 echo "creating glibc-headers"
189 if [ -f .glibc-header ] ; then
190 echo "glibc headers already build, skipping ..."
191 echo "build date: -> `cat .glibc-header`"
194 for s_src in $glibc_src; do
195 echo "extracting $s_src ..."
197 [ ! -z "`echo $s_src | grep threads`" ] &&
198 foo="-C glibc-$glibc_ver"
199 tar --use-compress-program=bzip2 \
200 -xvf $hdw_home_dir/download/base/glibc/$s_src $foo
204 cd ../glibc-$glibc_ver
209 run_it ../glibc-$glibc_ver/configure --prefix=$cross_root/$hdw_arch_target --enable-add-ons --with-headers=$cross_root/$hdw_arch_target/include --target=$hdw_arch_target $hdw_arch_build
210 abort_when_package_build_failed $? $_
211 # according to Roland McGrath <roland at gnu dot org>
212 run_it make crosscompiling=yes no_deps=t install-headers
214 # abort_when_package_build_failed $? $_
216 cd ../glibc-$glibc_ver
217 mkdir -p $cross_root/$hdw_arch_target/include/{gnu,bits}
218 cp -v include/features.h $cross_root/$hdw_arch_target/include
219 # cp bits/stdio_lim.h $cross_root/$hdw_arch_target/include/bits
220 touch $cross_root/$hdw_arch_target/include/gnu/stubs.h
222 echo "`date`" > .glibc-header
223 ) > glibc-header.log 2>&1
226 echo "creating cross binutils"
227 if [ -f .binutils ] ; then
228 echo "binutils already build, skipping ..."
229 echo "build date: -> `cat .binutils`"
232 echo "extracting binutils source ..."
233 tar --use-compress-program=bzip2 \
234 -xvf $hdw_home_dir/download/base/binutils/$binutils_src
239 run_it ./configure --prefix=$cross_root --program-prefix=$hdw_arch_prefix --target=$hdw_arch_target $hdw_arch_build
240 abort_when_package_build_failed $? $_
241 run_it make all install
242 abort_when_package_build_failed $? $_
244 echo "`date`" > .binutils
245 ) > binutils.log 2>&1
248 echo "creating bootstrap gcc"
249 if [ -f .bootstrap-gcc ] ; then
250 echo "bootstrap gcc already build, skipping ..."
251 echo "build date: -> `cat .bootstrap-gcc`"
254 echo "extracting gcc source ..."
255 tar --use-compress-program=bzip2 \
256 -xvf $hdw_home_dir/download/base/gcc/$gcc1_src
264 run_it ../gcc${g_a}/configure --prefix=$cross_root --program-prefix=$hdw_arch_prefix --disable-cpp --disable-shared --disable-multilib --enable-languages=c --target=$hdw_arch_target $hdw_arch_build
265 abort_when_package_build_failed $? $_
266 run_it make all install
267 abort_when_package_build_failed $? $_
269 echo "`date`" > .bootstrap-gcc
270 ) > bootstrap-gcc.log 2>&1
273 # end here for a kernel crosscompiler
274 if [ "$no_glibc" = "1" ] ; then
276 echo "finished creating crossenvironment"
277 echo "you should now be able to build kernels for your alien."
278 echo "add $cross_root/bin to your PATH variable"
279 echo "edit ARCH and CROSS_COMPILE in your kernel's Makefile."
285 # we need to specify the tools now
287 echo "running optimization script to specify build tools"
289 . $hdw_home_dir/scripts/optimization
292 echo "creating glibc"
293 if [ -f .glibc ] ; then
294 echo "glibc already build, skipping ..."
295 echo "build date: -> `cat .glibc`"
298 echo "recreating build directory ..."
299 rm -rf glibc-build && mkdir glibc-build
302 echo "debug: env variables"
305 run_it ../glibc-$glibc_ver/configure --enable-add-ons --enable-shared --with-headers=$cross_root/$hdw_arch_target/include --build=$hdw_arch_build --host=$hdw_arch_target --prefix=
306 abort_when_package_build_failed $? $_
308 abort_when_package_build_failed $? $_
309 run_it make install_root=$cross_root/$hdw_arch_target install
310 abort_when_package_build_failed $? $_
312 echo "`date`" > .glibc
316 # we again need diffrent cflags
318 echo "creating cross gcc"
319 if [ -f .gcc ] ; then
320 echo "cross gcc already build, skipping ..."
321 echo "build date: -> `cat .gcc`"
324 tar --use-compress-program=bzip2 \
325 -xvf $hdw_home_dir/download/base/gcc/$gcc2_src
326 echo "recreating build directory ..."
327 rm -rf gcc-build && mkdir gcc-build
330 echo "debug: env variables"
333 run_it ../gcc${g_a}/configure --prefix=$cross_root --program-prefix=$hdw_arch_prefix --enable-languages="c,c++" --enable-shared --enable-threads --disable-multilib --target=$hdw_arch_target $hdw_arch_build # --host=$hdw_arch_build --build=$hdw_arch_build
334 abort_when_package_build_failed $? $_
336 abort_when_package_build_failed $? $_
338 abort_when_package_build_failed $? $_
345 date > $cross_root/.cross_env
346 echo "crossenvironment ready - here we go now ;) ..."
348 echo "crossenv allready existing, build at:"
349 echo "-> `cat $cross_root/.cross_env`"
350 if [ -z "`echo $PATH | grep $cross_root\/bin`" ] ; then
351 echo "just updating PATH variable ..."
352 export PATH="$PATH:$cross_root/bin"
353 export PATH="$PATH:$cross_root/$hdw_arch_target/bin"
357 # return to home directory