go back to old dir
[emdebian-crush-toolchain.git] / build_toolchain.sh
bloba6fef0ba3c4dc54081765599aef87c9aadaffb58
1 #!/bin/sh -e
3 # Sample Usage:
4 # $ V=1 TARGET=i386-linux-uclibc ./build_toolchain.sh
6 # verbose output?
7 test -n "$V" || V=0
8 # fallback commands
9 test -n "$APT_GET_SOURCE" || APT_GET_SOURCE="apt-get source"
10 test -n "$FAKEROOT" || FAKEROOT="fakeroot"
12 verb() {
13 test $V -gt 0 && printf "$0: "$*
16 die() {
17 printf "$0: Error: "$*
18 exit 1
21 get_version() {
22 dpkg-query -f='${Version} ${Revision}\n' -W $1 2> /dev/null | \
23 sort -n | tail -n 1 |
24 while read version_ revision_; do
25 echo "pkg_version=$(echo $version_ | sed -e 's/-.*//')"
26 echo "deb_version=$(echo $version_ | sed -e 's/[^-]*-\(.*\)/\1/')"
27 echo "deb_revision=$revision_"
28 done
31 is_installed() {
32 name="$1"
33 vers="$2"
34 dpkg-query -f='${Status} ${Version}\n' -W $name 2> /dev/null |
35 egrep -q "^install ok installed" |
36 while read ii_vers; do
37 test "x$ii_vers" = "x$vers"
38 return $?
39 done
41 build_binutils() {
42 local pkg_version
43 local deb_version
44 local deb_revision
45 eval $(get_version binutils)
46 verb "Building binutils-%s" $pkg_version
47 binutils_name="binutils-$pkg_version"
48 test -d $binutils_name || $APT_GET_SOURCE binutils
49 cd $binutils_name || die "Failed to get $binutils_name"
50 $FAKEROOT debian/rules binary-cross
51 cd -
53 install_binutils() {
54 local pkg_version
55 local deb_version
56 local deb_revision
57 eval $(get_version binutils)
58 is_installed binutils-${TARGET} ${pkg_version} && return 0
59 verb "Installing binutils-%s_%s" $TARGET $pkg_version
60 ls -t1 binutils-${TARGET}_${pkg_version}*.deb | head -n 1 | xargs dpkg -i ||
61 die "Failed to install binutils-${TARGET}_${pkg_version}"
64 uclibc_headers() {
65 local pkg_version
66 local deb_version
67 local deb_revision
68 eval $(get_version uclibc)
69 if test "No$pkg_version" = "No"
70 then
71 # not available, fallback
72 pkg_version="0.9.30.1"
73 uclibc_name="uClibc-$pkg_version"
74 test -d $uclibc_name &&
75 svn up $uclibc_name ||
76 svn co svn://uclibc.org/branches/uClibc_0_9_30 $uclibc_name
77 rm -rf $uclibc_name/debian
78 cp -a uClibc-0.9.30.1-debian $uclibc_name/debian
80 verb "uClibc-%s" $pkg_version
81 uclibc_name="uClibc-$pkg_version"
82 test -d $uclibc_name || $APT_GET_SOURCE uclibc
83 cd $uclibc_name || die "Failed to get $uclibc_name"
84 $FAKEROOT debian/rules binary-indep
85 cd -
87 install_uclibc_headers() {
88 local pkg_version
89 local deb_version
90 local deb_revision
91 eval $(get_version uclibc)
92 if test "No$pkg_version" = "No"
93 then
94 # not available, fallback
95 pkg_version="0.9.30.1"
96 uclibc_name="uClibc-$pkg_version"
98 is_installed uclibc-${TARGET} ${pkg_version} && return 0
99 verb "Installing uclibc-%s_%s" $TARGET $pkg_version
100 ls -t1 uclibc-${TARGET}_${pkg_version}*.deb | head -n 1 | xargs dpkg -i ||
101 die "Failed to install uclibc-${TARGET}_${pkg_version}"
104 uclibc_runtime_and_devel() {
105 local pkg_version
106 local deb_version
107 local deb_revision
108 eval $(get_version uclibc)
109 if test "No$pkg_version" = "No"
110 then
111 # not available, fallback
112 pkg_version="0.9.30.1"
113 uclibc_name="uClibc-$pkg_version"
114 test -d $uclibc_name &&
115 svn up $uclibc_name ||
116 svn co svn://uclibc.org/branches/uClibc_0_9_30 $uclibc_name
117 rm -rf $uclibc_name/debian
118 cp -a uClibc-0.9.30.1-debian $uclibc_name/debian
120 verb "uClibc-%s" $pkg_version
121 uclibc_name="uClibc-$pkg_version"
122 test -d $uclibc_name || $APT_GET_SOURCE uclibc
123 cd $uclibc_name || die "Failed to get $uclibc_name"
124 $FAKEROOT debian/rules binary-runtime
125 $FAKEROOT debian/rules binary-devel
126 cd -
129 build_initial_cross_gcc() {
130 local pkg_name
131 local pkg_version
132 local deb_version
133 local deb_revision
134 pkg_name="gcc"
135 eval $(get_version $pkg_name-[[:digit:]]*\.[[:digit:]]*)
136 # XXX: revisit ${Package} later
137 pkg_name="gcc-4.3"
138 pkg_version="4.3.3"
139 if test "No$pkg_version" = "No"
140 then
141 # not available, fallback
142 pkg_name="gcc"
143 pkg_version="4.4.0"
144 gcc_name="gcc-$pkg_version"
145 test -d $gcc_name &&
146 svn up $gcc_name ||
147 svn co svn://gcc.gnu.org/svn/gcc/trunk $gcc_name
148 rm -rf $gcc_name/debian
149 cp -a gcc-${pkg_version}-debian $gcc_name/debian
151 gcc_name="$pkg_name-$pkg_version"
152 verb "%s-%s" $pkg_name $pkg_version
153 test -d $gcc_name || $APT_GET_SOURCE $pkg_name
154 cd $gcc_name || die "Failed to get $gcc_name"
155 # honour our idea of languages that we need, else fallback to old values
156 sed -i -e '/^ languages = c /c \
157 ifeq ($(LANGUAGES),)\
158 languages = c c++ objc objpp\
159 else\
160 languages = $(LANGUAGES)\
161 endif' debian/rules.conf
162 # heck, and the same goes for addons
163 sed -i -e '/^ addons = libgcc /c \
164 ifeq ($(ADDONS),)\
165 addons = libgcc lib64gcc lib32gcc libcxx lib32cxx lib64cxx libn32cxx cdev c++dev libobjc objcdev objppdev gccxbase\
166 else\
167 addons = $(ADDONS)\
168 endif' debian/rules.conf
170 GCC_TARGET=$TARGET DEB_CROSS__=yes LANGUAGES=c ADDONS=libgcc debian/rules control
171 GCC_TARGET=$TARGET DEB_CROSS__=yes LANGUAGES=c ADDONS=libgcc dpkg-buildpackage -rfakeroot
172 cd -
176 build_binutils
177 install_binutils
178 uclibc_headers
179 install_uclibc_headers
180 build_initial_cross_gcc
181 install_initial_cross_gcc
182 # uclibc_runtime_and_devel