Mercurial > hg > aboriginal
annotate cross-compiler.sh @ 722:b5c0cf2e7f61
Fix thinkos.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 26 Apr 2009 19:20:39 -0500 |
parents | db04bd3c11e0 |
children | db5cb617339a |
rev | line source |
---|---|
175
6fd189c18c1c
Three things: 1) dash->bash, 2) install cross-ldd and cross-readelf,
Rob Landley <rob@landley.net>
parents:
147
diff
changeset
|
1 #!/bin/bash |
1
9add2b1ccdfa
First version of new build script. Does nothing, but does it correctly.
landley@driftwood
parents:
diff
changeset
|
2 |
34
ad1cfcb043c7
Cleaup pass: Break out shell functions and variable definitions into include.sh.
Rob Landley <rob@landley.net>
parents:
33
diff
changeset
|
3 # Get lots of predefined environment variables and shell functions. |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
4 |
669 | 5 source sources/include.sh || exit 1 |
1
9add2b1ccdfa
First version of new build script. Does nothing, but does it correctly.
landley@driftwood
parents:
diff
changeset
|
6 |
583
1bb180e6a4ba
Actually define CROSS (missed in 581).
Rob Landley <rob@landley.net>
parents:
576
diff
changeset
|
7 CROSS="${BUILD}/cross-compiler-${ARCH}" |
1bb180e6a4ba
Actually define CROSS (missed in 581).
Rob Landley <rob@landley.net>
parents:
576
diff
changeset
|
8 |
685
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
9 check_for_base_arch cross-compiler || exit 0 |
41 | 10 |
485
b0438691e9e1
Move color selection into ./config. (The default colors don't look great on a white background.)
Rob Landley <rob@landley.net>
parents:
482
diff
changeset
|
11 echo -e "$CROSS_COLOR" |
b0438691e9e1
Move color selection into ./config. (The default colors don't look great on a white background.)
Rob Landley <rob@landley.net>
parents:
482
diff
changeset
|
12 echo "=== Building cross compiler" |
47
edaa86240321
Turnerize the build script and teach cross-compile.sh to build qemu when
Rob Landley <rob@landley.net>
parents:
41
diff
changeset
|
13 |
685
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
14 rm -rf "${CROSS}" |
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
15 mkdir -p "${CROSS}" || dienow |
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
16 |
714
db04bd3c11e0
First pass at canadian cross toolchain build. Result doesn't actually work yet, but it builds.
Rob Landley <rob@landley.net>
parents:
709
diff
changeset
|
17 [ -z "$BUILD_STATIC" ] || STATIC_FLAGS='--static' |
363
80f520811ed6
Teach cross-compiler.sh how to produce static binaries when BUILD_STATIC=1
Rob Landley <rob@landley.net>
parents:
360
diff
changeset
|
18 |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
19 # Build and install binutils |
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
20 |
250
cef5bbd777fa
Make sure error return from setupfor is noticed.
Rob Landley <rob@landley.net>
parents:
222
diff
changeset
|
21 setupfor binutils build-binutils && |
407
e64eb9ff27b9
Use unstable infrastructure to back off non-unstable kernel to 2.6.25 (where powerpc works) and bring back binutils 2.18 build as unstable version.
Rob Landley <rob@landley.net>
parents:
400
diff
changeset
|
22 AR=ar AS=as LD=ld NM=nm OBJDUMP=objdump OBJCOPY=objcopy \ |
e64eb9ff27b9
Use unstable infrastructure to back off non-unstable kernel to 2.6.25 (where powerpc works) and bring back binutils 2.18 build as unstable version.
Rob Landley <rob@landley.net>
parents:
400
diff
changeset
|
23 "${CURSRC}/configure" --prefix="${CROSS}" --host=${CROSS_HOST} \ |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
24 --target=${CROSS_TARGET} --with-lib-path=lib --disable-nls \ |
59
18c065749b79
Add i686 and x86_64 config files. (Might or might not work, dunno.)
Rob Landley <rob@landley.net>
parents:
48
diff
changeset
|
25 --disable-shared --disable-multilib --program-prefix="${ARCH}-" \ |
417
6dd7e870b1d4
No shipping package should ever use -Werror, no idea what new gcc versions will decide to warn on. (Fixes build on ubuntu 8.10.)
Rob Landley <rob@landley.net>
parents:
414
diff
changeset
|
26 --disable-werror $BINUTILS_FLAGS && |
293
cdd26f8acc35
Update to gcc 4.1.2->4.2.2. Still doesn't fix the internal compiler error
Rob Landley <rob@landley.net>
parents:
287
diff
changeset
|
27 make -j $CPUS configure-host && |
363
80f520811ed6
Teach cross-compiler.sh how to produce static binaries when BUILD_STATIC=1
Rob Landley <rob@landley.net>
parents:
360
diff
changeset
|
28 make -j $CPUS CFLAGS="-O2 $STATIC_FLAGS" && |
293
cdd26f8acc35
Update to gcc 4.1.2->4.2.2. Still doesn't fix the internal compiler error
Rob Landley <rob@landley.net>
parents:
287
diff
changeset
|
29 make -j $CPUS install && |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
30 cd .. && |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
31 mkdir -p "${CROSS}/include" && |
301
309b574a5059
Redo the $CLEANUP logic to a cleanup function in include.sh (meaning if a
Rob Landley <rob@landley.net>
parents:
294
diff
changeset
|
32 cp binutils/include/libiberty.h "${CROSS}/include" |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
33 |
301
309b574a5059
Redo the $CLEANUP logic to a cleanup function in include.sh (meaning if a
Rob Landley <rob@landley.net>
parents:
294
diff
changeset
|
34 cleanup binutils build-binutils |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
35 |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
36 # Build and install gcc |
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
37 |
250
cef5bbd777fa
Make sure error return from setupfor is noticed.
Rob Landley <rob@landley.net>
parents:
222
diff
changeset
|
38 setupfor gcc-core build-gcc && |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
39 setupfor gcc-g++ build-gcc gcc-core && |
564
425a7d32446a
Move $GCC_FLAGS to the end so the details filie can override everything. (Thanks Milton Miller.)
Rob Landley <rob@landley.net>
parents:
546
diff
changeset
|
40 AR_FOR_TARGET="${ARCH}-ar" "${CURSRC}/configure" \ |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
41 --prefix="${CROSS}" --host=${CROSS_HOST} --target=${CROSS_TARGET} \ |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
42 --enable-languages=c,c++ --enable-long-long --enable-c99 \ |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
43 --disable-shared --disable-threads --disable-nls --disable-multilib \ |
701
b4a9c0084f2f
Converted ARMV5L from OABI to EABI with VFP support. Added patches for uClibc and uClibc++ to deal with Unwind Exception handling, made uClibc++ pull in libgcc_eh for this as well, and disabled SJLJ exceptions for ARMV5L EABI, which is apparently required, so --enable-sjlj-exceptions was added to the details file for all the other arches. Also correct the GENTOO_CHOST variable for armeb.
Mark Miller <mark@mirell.org>
parents:
685
diff
changeset
|
44 --enable-__cxa_atexit --disable-libstdcxx-pch \ |
564
425a7d32446a
Move $GCC_FLAGS to the end so the details filie can override everything. (Thanks Milton Miller.)
Rob Landley <rob@landley.net>
parents:
546
diff
changeset
|
45 --program-prefix="${ARCH}-" $GCC_FLAGS && |
487
1828f3fe831e
Continuing attempt to make gcc build like a normal program.
Rob Landley <rob@landley.net>
parents:
485
diff
changeset
|
46 |
1828f3fe831e
Continuing attempt to make gcc build like a normal program.
Rob Landley <rob@landley.net>
parents:
485
diff
changeset
|
47 # Try to convince gcc build process not to rebuild itself with itself. |
1828f3fe831e
Continuing attempt to make gcc build like a normal program.
Rob Landley <rob@landley.net>
parents:
485
diff
changeset
|
48 mkdir -p gcc && |
1828f3fe831e
Continuing attempt to make gcc build like a normal program.
Rob Landley <rob@landley.net>
parents:
485
diff
changeset
|
49 ln -s `which gcc` gcc/xgcc && |
1828f3fe831e
Continuing attempt to make gcc build like a normal program.
Rob Landley <rob@landley.net>
parents:
485
diff
changeset
|
50 |
363
80f520811ed6
Teach cross-compiler.sh how to produce static binaries when BUILD_STATIC=1
Rob Landley <rob@landley.net>
parents:
360
diff
changeset
|
51 make -j $CPUS all-gcc LDFLAGS="$STATIC_FLAGS" && |
293
cdd26f8acc35
Update to gcc 4.1.2->4.2.2. Still doesn't fix the internal compiler error
Rob Landley <rob@landley.net>
parents:
287
diff
changeset
|
52 make -j $CPUS install-gcc && |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
53 cd .. |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
54 |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
55 cleanup gcc-core build-gcc |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
56 |
41 | 57 echo Fixup toolchain... && |
58 | |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
59 # Move the gcc internal libraries and headers somewhere sane. |
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
60 |
21
c4e1bd04035d
Build uClibc under the wrapper script. (There's got to be a better way to
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
61 mkdir -p "${CROSS}"/gcc && |
c4e1bd04035d
Build uClibc under the wrapper script. (There's got to be a better way to
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
62 mv "${CROSS}"/lib/gcc/*/*/include "${CROSS}"/gcc/include && |
c4e1bd04035d
Build uClibc under the wrapper script. (There's got to be a better way to
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
63 mv "${CROSS}"/lib/gcc/*/* "${CROSS}"/gcc/lib && |
257
d37e39370d39
Fix cross compiler toolchain to be properly relocatable on x86-64 host.
Rob Landley <rob@landley.net>
parents:
250
diff
changeset
|
64 ln -s ${CROSS_TARGET} ${CROSS}/tools && |
d37e39370d39
Fix cross compiler toolchain to be properly relocatable on x86-64 host.
Rob Landley <rob@landley.net>
parents:
250
diff
changeset
|
65 ln -sf ../../../../tools/bin/ld ${CROSS}/libexec/gcc/*/*/collect2 && |
21
c4e1bd04035d
Build uClibc under the wrapper script. (There's got to be a better way to
Rob Landley <rob@landley.net>
parents:
18
diff
changeset
|
66 |
61 | 67 # Build and install gcc wrapper script. |
41 | 68 |
69 cd "${CROSS}"/bin && | |
390
a9a9eee9e620
Teach the wrapper script to do the libgcc_s --as-needed stuff when
Rob Landley <rob@landley.net>
parents:
387
diff
changeset
|
70 mv "${ARCH}-gcc" "$ARCH-rawgcc" && |
546
a7f128fc53b5
Rename gcc-uClibc.c to ccwrap.c
Rob Landley <rob@landley.net>
parents:
545
diff
changeset
|
71 $CC $STATIC_FLAGS -Os -s "${SOURCES}"/toys/ccwrap.c -o "${ARCH}-gcc" \ |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
72 -DGCC_UNWRAPPED_NAME='"'"$ARCH"-rawgcc'"' && |
545
f1337876df98
Actually _create_ the $ARCH-cc symlink.
Rob Landley <rob@landley.net>
parents:
540
diff
changeset
|
73 ln -s "${ARCH}-gcc" "${ARCH}-cc" && |
136
8c3d95f52237
Some tweaks to make toolchain debugging easier.
Rob Landley <rob@landley.net>
parents:
131
diff
changeset
|
74 |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
75 # Wrap C++ |
136
8c3d95f52237
Some tweaks to make toolchain debugging easier.
Rob Landley <rob@landley.net>
parents:
131
diff
changeset
|
76 |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
77 mv "${ARCH}-g++" "${ARCH}-rawg++" && |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
78 rm "${ARCH}-c++" && |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
79 ln -s "${ARCH}-g++" "${ARCH}-rawc++" && |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
80 ln -s "${ARCH}-gcc" "${ARCH}-g++" && |
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
81 ln -s "${ARCH}-gcc" "${ARCH}-c++" |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
82 |
442
4b96ad732432
Add basic c++ support to the cross compiler. (No headers or libraries, but enough to cross compile uClibc++ in mini-native and use distcc with the cross compiler for C++.)
Rob Landley <rob@landley.net>
parents:
424
diff
changeset
|
83 cleanup "${CROSS}"/{lib/gcc,{libexec/gcc,gcc/lib}/install-tools} |
8
0068264ad65a
Some work I did back in october but hadn't checked in yet: let setupfor()
Rob Landley <rob@landley.net>
parents:
3
diff
changeset
|
84 |
85
7c874da5505c
Switch config-linux to miniconfig-linux. Adjust the build and config scripts,
Rob Landley <rob@landley.net>
parents:
83
diff
changeset
|
85 # Install kernel headers. |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
86 |
250
cef5bbd777fa
Make sure error return from setupfor is noticed.
Rob Landley <rob@landley.net>
parents:
222
diff
changeset
|
87 setupfor linux && |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
88 # Install Linux kernel headers (for use by uClibc). |
182
fc827ab6166f
Autodetect number of processors and feed appropriate -j to make.
Rob Landley <rob@landley.net>
parents:
175
diff
changeset
|
89 make -j $CPUS headers_install ARCH="${KARCH}" INSTALL_HDR_PATH="${CROSS}" && |
540
d0b059fd91a8
Link include/asm/page.h to include/sys/user.h, in case people try to build old packages.
Rob Landley <rob@landley.net>
parents:
530
diff
changeset
|
90 # This makes some very old package builds happy. |
d0b059fd91a8
Link include/asm/page.h to include/sys/user.h, in case people try to build old packages.
Rob Landley <rob@landley.net>
parents:
530
diff
changeset
|
91 ln -s ../sys/user.h "${CROSS}/include/asm/page.h" && |
301
309b574a5059
Redo the $CLEANUP logic to a cleanup function in include.sh (meaning if a
Rob Landley <rob@landley.net>
parents:
294
diff
changeset
|
92 cd .. |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
93 |
301
309b574a5059
Redo the $CLEANUP logic to a cleanup function in include.sh (meaning if a
Rob Landley <rob@landley.net>
parents:
294
diff
changeset
|
94 cleanup linux |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
95 |
18
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
96 # Build and install uClibc |
eaf7a8d5e697
Managed to get a working toolchain, with wrapper script, to build a hello
Rob Landley <rob@landley.net>
parents:
17
diff
changeset
|
97 |
360
c9a9b8a25455
Only try to build $ARCH-ldd if /usr/include exists.
Rob Landley <rob@landley.net>
parents:
351
diff
changeset
|
98 setupfor uClibc |
530
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
99 make CROSS= KCONFIG_ALLCONFIG="$(getconfig uClibc)" allnoconfig && |
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
100 make CROSS="${ARCH}-" KERNEL_HEADERS="${CROSS}/include" PREFIX="${CROSS}/" \ |
709
64cc63ad26ce
Add BUILD_VERBOSE config option.
Rob Landley <rob@landley.net>
parents:
701
diff
changeset
|
101 RUNTIME_PREFIX=/ DEVEL_PREFIX=/ -j $CPUS $VERBOSITY \ |
64cc63ad26ce
Add BUILD_VERBOSE config option.
Rob Landley <rob@landley.net>
parents:
701
diff
changeset
|
102 install hostutils || dienow |
530
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
103 for i in $(cd utils; ls *.host | sed 's/\.host//') |
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
104 do |
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
105 cp utils/"$i".host "$CROSS/bin/$ARCH-$i" || dienow |
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
106 done |
ea7a010e5c47
Add ldd/readelf/ldconfig to cross and native toolchains, and teach build to fallback to stable miniconfig when miniconfig-alt is absent.
Rob Landley <rob@landley.net>
parents:
507
diff
changeset
|
107 cd .. |
360
c9a9b8a25455
Only try to build $ARCH-ldd if /usr/include exists.
Rob Landley <rob@landley.net>
parents:
351
diff
changeset
|
108 |
400
f60b1189c0ea
Teach build to use recent uClibc snapshot when USE_UNSTABLE=uClibc
Rob Landley <rob@landley.net>
parents:
394
diff
changeset
|
109 cleanup uClibc |
3
1b721a51e9c6
Extract headers, build cross-binutils, build cross-gcc. Needs a C library.
landley@driftwood
parents:
1
diff
changeset
|
110 |
38
297bb57cf74c
Apparently "" around EOF also disables variable substitution, not just ''.
Rob Landley <rob@landley.net>
parents:
36
diff
changeset
|
111 cat > "${CROSS}"/README << EOF && |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
112 Cross compiler for $ARCH |
507
58e9523a775d
Tweak the readme, add comments, remove some dead code.
Rob Landley <rob@landley.net>
parents:
503
diff
changeset
|
113 From http://impactlinux.com/fwl |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
114 |
507
58e9523a775d
Tweak the readme, add comments, remove some dead code.
Rob Landley <rob@landley.net>
parents:
503
diff
changeset
|
115 To use: Add the "bin" subdirectory to your \$PATH, and use "$ARCH-gcc" as |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
116 your compiler. |
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
117 |
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
118 The syntax used to build the Linux kernel is: |
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
119 |
41 | 120 make ARCH=${KARCH} CROSS_COMPILE=${ARCH}- |
33
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
121 |
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
122 EOF |
bf2e771f4ba5
Update build script. Now uses a config file (usage: ./build.sh arch), and
Rob Landley <rob@landley.net>
parents:
27
diff
changeset
|
123 |
507
58e9523a775d
Tweak the readme, add comments, remove some dead code.
Rob Landley <rob@landley.net>
parents:
503
diff
changeset
|
124 # Strip the binaries |
48 | 125 |
126 cd "$CROSS" | |
127 for i in `find bin -type f` `find "$CROSS_TARGET" -type f` | |
128 do | |
129 strip "$i" 2> /dev/null | |
130 done | |
507
58e9523a775d
Tweak the readme, add comments, remove some dead code.
Rob Landley <rob@landley.net>
parents:
503
diff
changeset
|
131 |
58e9523a775d
Tweak the readme, add comments, remove some dead code.
Rob Landley <rob@landley.net>
parents:
503
diff
changeset
|
132 # Tar it up |
48 | 133 |
685
90ab1a1f4db5
Teach build not to rebuild base architecture toolchains. Factor out some common code while there.
Rob Landley <rob@landley.net>
parents:
675
diff
changeset
|
134 create_stage_tarball cross-compiler |
576
036dbe218036
Add BASE_ARCH support, so a hardware architecture can specify a base architecture and just provide a different kernel.
Rob Landley <rob@landley.net>
parents:
564
diff
changeset
|
135 |
93
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
136 # A quick hello world program to test the cross-compiler out. |
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
137 # Build hello.c dynamic, then static, to verify header/library paths. |
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
138 |
175
6fd189c18c1c
Three things: 1) dash->bash, 2) install cross-ldd and cross-readelf,
Rob Landley <rob@landley.net>
parents:
147
diff
changeset
|
139 echo "Sanity test: building Hello World." |
6fd189c18c1c
Three things: 1) dash->bash, 2) install cross-ldd and cross-readelf,
Rob Landley <rob@landley.net>
parents:
147
diff
changeset
|
140 |
93
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
141 "${ARCH}-gcc" -Os "${SOURCES}/toys/hello.c" -o "$WORK"/hello && |
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
142 "${ARCH}-gcc" -Os -static "${SOURCES}/toys/hello.c" -o "$WORK"/hello && |
654
fa2498e3b3c9
Make a config option for the cross compiler smoke test. The problem is that recent kernel upgrades broke qemu-arm (application emulation, not system emulation), so it can't run anything unless you "echo 0 > /proc/sys/vm/mmap_min_addr" as root. Fun.
Rob Landley <rob@landley.net>
parents:
583
diff
changeset
|
143 if [ ! -z "$CROSS_SMOKE_TEST" ] && which qemu-"${QEMU_TEST}" > /dev/null |
143
17d06149802e
Only run the sanity check on the toolchain if the appropriate qemu is installed.
Rob Landley <rob@landley.net>
parents:
136
diff
changeset
|
144 then |
17d06149802e
Only run the sanity check on the toolchain if the appropriate qemu is installed.
Rob Landley <rob@landley.net>
parents:
136
diff
changeset
|
145 [ x"$(qemu-"${QEMU_TEST}" "${WORK}"/hello)" == x"Hello world!" ] && |
17d06149802e
Only run the sanity check on the toolchain if the appropriate qemu is installed.
Rob Landley <rob@landley.net>
parents:
136
diff
changeset
|
146 echo Cross-toolchain seems to work. |
17d06149802e
Only run the sanity check on the toolchain if the appropriate qemu is installed.
Rob Landley <rob@landley.net>
parents:
136
diff
changeset
|
147 fi |
93
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
148 |
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
149 [ $? -ne 0 ] && dienow |
153ba1a0b427
Break out the qemu build (and squashfs) into something easy to comment out,
Rob Landley <rob@landley.net>
parents:
88
diff
changeset
|
150 |
47
edaa86240321
Turnerize the build script and teach cross-compile.sh to build qemu when
Rob Landley <rob@landley.net>
parents:
41
diff
changeset
|
151 echo -e "\e[32mCross compiler toolchain build complete.\e[0m" |