summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--meta/classes/populate_sdk_base.bbclass193
-rw-r--r--meta/files/toolchain-shar-template.sh182
2 files changed, 191 insertions, 184 deletions
diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass
index 8736942fd2..9e3bd61925 100644
--- a/meta/classes/populate_sdk_base.bbclass
+++ b/meta/classes/populate_sdk_base.bbclass
@@ -120,190 +120,15 @@ fakeroot tar_sdk() {
120} 120}
121 121
122fakeroot create_shar() { 122fakeroot create_shar() {
123 cat << "EOF" > ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh 123 # copy in the template shar extractor script
124#!/bin/bash 124 cp ${COREBASE}/meta/files/toolchain-shar-template.sh ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh
125 125
126INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/") 126 # substitute variables
127SDK_ARCH=$(echo ${SDK_ARCH} | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/") 127 sed -i -e 's#@SDK_ARCH@#${SDK_ARCH}#g' \
128 128 -e 's#@SDKPATH@#${SDKPATH}#g' \
129if [ "$INST_ARCH" != "$SDK_ARCH" ]; then 129 -e 's#@REAL_MULTIMACH_TARGET_SYS@#${REAL_MULTIMACH_TARGET_SYS}#g' \
130 # Allow for installation of ix86 SDK on x86_64 host 130 ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh
131 if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then 131
132 echo "Error: Installation machine not supported!"
133 exit 1
134 fi
135fi
136
137DEFAULT_INSTALL_DIR="${SDKPATH}"
138SUDO_EXEC=""
139target_sdk_dir=""
140answer=""
141relocate=1
142savescripts=0
143verbose=0
144while getopts ":yd:DRS" OPT; do
145 case $OPT in
146 y)
147 answer="Y"
148 [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
149 ;;
150 d)
151 target_sdk_dir=$OPTARG
152 ;;
153 D)
154 verbose=1
155 ;;
156 R)
157 relocate=0
158 savescripts=1
159 ;;
160 S)
161 savescripts=1
162 ;;
163 *)
164 echo "Usage: $(basename $0) [-y] [-d <dir>]"
165 echo " -y Automatic yes to all prompts"
166 echo " -d <dir> Install the SDK to <dir>"
167 echo "======== Advanced DEBUGGING ONLY OPTIONS ========"
168 echo " -S Save relocation scripts"
169 echo " -R Do not relocate executables"
170 echo " -D use set -x to see what is going on"
171 exit 1
172 ;;
173 esac
174done
175
176if [ $verbose = 1 ] ; then
177 set -x
178fi
179
180if [ "$target_sdk_dir" = "" ]; then
181 read -e -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir
182 [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
183fi
184
185eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g')
186if [ -d "$target_sdk_dir" ]; then
187 target_sdk_dir=$(cd "$target_sdk_dir"; pwd)
188else
189 target_sdk_dir=$(readlink -m "$target_sdk_dir")
190fi
191
192if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
193 echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"
194 exit 1
195fi
196
197if [ -e "$target_sdk_dir/environment-setup-${REAL_MULTIMACH_TARGET_SYS}" ]; then
198 echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
199 printf "If you continue, existing files will be overwritten! Proceed[y/N]?"
200
201 default_answer="n"
202else
203 printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed[Y/n]?"
204
205 default_answer="y"
206fi
207
208if [ "$answer" = "" ]; then
209 read answer
210 [ "$answer" = "" ] && answer="$default_answer"
211else
212 echo $answer
213fi
214
215if [ "$answer" != "Y" -a "$answer" != "y" ]; then
216 echo "Installation aborted!"
217 exit 1
218fi
219
220# Try to create the directory (this will not succeed if user doesn't have rights)
221mkdir -p $target_sdk_dir >/dev/null 2>&1
222
223# if don't have the right to access dir, gain by sudo
224if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then
225 SUDO_EXEC=$(which "sudo")
226 if [ -z $SUDO_EXEC ]; then
227 echo "No command 'sudo' found, please install sudo first. Abort!"
228 exit 1
229 fi
230
231 # test sudo could gain root right
232 $SUDO_EXEC pwd >/dev/null 2>&1
233 [ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1
234
235 # now that we have sudo rights, create the directory
236 $SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1
237fi
238
239payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1))
240
241printf "Extracting SDK..."
242tail -n +$payload_offset $0| $SUDO_EXEC tar xj -C $target_sdk_dir
243echo "done"
244
245printf "Setting it up..."
246# fix environment paths
247for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
248 $SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
249done
250
251# fix dynamic loader paths in all ELF SDK binaries
252native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep 'OECORE_NATIVE_SYSROOT='|cut -d'=' -f2|tr -d '"')
253dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*")
254if [ "$dl_path" = "" ] ; then
255 echo "SDK could not be set up. Relocate script unable to find ld-linux.so. Abort!"
256 exit 1
257fi
258executable_files=$($SUDO_EXEC find $native_sysroot -type f -perm /111 -printf "'%h/%f' ")
259
260tdir=`mktemp -d`
261if [ x$tdir = x ] ; then
262 echo "SDK relocate failed, could not create a temporary directory"
263 exit 1
264fi
265echo "#!/bin/bash" > $tdir/relocate_sdk.sh
266echo exec ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path $executable_files >> $tdir/relocate_sdk.sh
267$SUDO_EXEC mv $tdir/relocate_sdk.sh ${env_setup_script%/*}/relocate_sdk.sh
268$SUDO_EXEC chmod 755 ${env_setup_script%/*}/relocate_sdk.sh
269rm -rf $tdir
270if [ $relocate = 1 ] ; then
271 $SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.sh
272 if [ $? -ne 0 ]; then
273 echo "SDK could not be set up. Relocate script failed. Abort!"
274 exit 1
275 fi
276fi
277
278# replace ${SDKPATH} with the new prefix in all text files: configs/scripts/etc
279$SUDO_EXEC find $native_sysroot -type f -exec file '{}' \;|grep ":.*\(ASCII\|script\|source\).*text"|awk -F':' '{printf "%s\0", $1}'|$SUDO_EXEC xargs -0 sed -i -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g"
280
281# change all symlinks pointing to ${SDKPATH}
282for l in $($SUDO_EXEC find $native_sysroot -type l); do
283 $SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l
284done
285
286# find out all perl scripts in $native_sysroot and modify them replacing the
287# host perl with SDK perl.
288for perl_script in $($SUDO_EXEC find $native_sysroot -type f -exec grep "^#!.*perl" -l '{}' \;); do
289 $SUDO_EXEC sed -i -e "s:^#! */usr/bin/perl.*:#! /usr/bin/env perl:g" -e \
290 "s: /usr/bin/perl: /usr/bin/env perl:g" $perl_script
291done
292
293echo done
294
295# delete the relocating script, so that user is forced to re-run the installer
296# if he/she wants another location for the sdk
297if [ $savescripts = 0 ] ; then
298 $SUDO_EXEC rm ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
299fi
300
301echo "SDK has been successfully set up and is ready to be used."
302
303exit 0
304
305MARKER:
306EOF
307 # add execution permission 132 # add execution permission
308 chmod +x ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh 133 chmod +x ${SDK_DEPLOY}/${TOOLCHAIN_OUTPUTNAME}.sh
309 134
diff --git a/meta/files/toolchain-shar-template.sh b/meta/files/toolchain-shar-template.sh
new file mode 100644
index 0000000000..a6207bbd4d
--- /dev/null
+++ b/meta/files/toolchain-shar-template.sh
@@ -0,0 +1,182 @@
1#!/bin/bash
2
3INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
4SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
5
6if [ "$INST_ARCH" != "$SDK_ARCH" ]; then
7 # Allow for installation of ix86 SDK on x86_64 host
8 if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then
9 echo "Error: Installation machine not supported!"
10 exit 1
11 fi
12fi
13
14DEFAULT_INSTALL_DIR="@SDKPATH@"
15SUDO_EXEC=""
16target_sdk_dir=""
17answer=""
18relocate=1
19savescripts=0
20verbose=0
21while getopts ":yd:DRS" OPT; do
22 case $OPT in
23 y)
24 answer="Y"
25 [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
26 ;;
27 d)
28 target_sdk_dir=$OPTARG
29 ;;
30 D)
31 verbose=1
32 ;;
33 R)
34 relocate=0
35 savescripts=1
36 ;;
37 S)
38 savescripts=1
39 ;;
40 *)
41 echo "Usage: $(basename $0) [-y] [-d <dir>]"
42 echo " -y Automatic yes to all prompts"
43 echo " -d <dir> Install the SDK to <dir>"
44 echo "======== Advanced DEBUGGING ONLY OPTIONS ========"
45 echo " -S Save relocation scripts"
46 echo " -R Do not relocate executables"
47 echo " -D use set -x to see what is going on"
48 exit 1
49 ;;
50 esac
51done
52
53if [ $verbose = 1 ] ; then
54 set -x
55fi
56
57if [ "$target_sdk_dir" = "" ]; then
58 read -e -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir
59 [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
60fi
61
62eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g')
63if [ -d "$target_sdk_dir" ]; then
64 target_sdk_dir=$(cd "$target_sdk_dir"; pwd)
65else
66 target_sdk_dir=$(readlink -m "$target_sdk_dir")
67fi
68
69if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
70 echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"
71 exit 1
72fi
73
74if [ -e "$target_sdk_dir/environment-setup-@REAL_MULTIMACH_TARGET_SYS@" ]; then
75 echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
76 printf "If you continue, existing files will be overwritten! Proceed[y/N]?"
77
78 default_answer="n"
79else
80 printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed[Y/n]?"
81
82 default_answer="y"
83fi
84
85if [ "$answer" = "" ]; then
86 read answer
87 [ "$answer" = "" ] && answer="$default_answer"
88else
89 echo $answer
90fi
91
92if [ "$answer" != "Y" -a "$answer" != "y" ]; then
93 echo "Installation aborted!"
94 exit 1
95fi
96
97# Try to create the directory (this will not succeed if user doesn't have rights)
98mkdir -p $target_sdk_dir >/dev/null 2>&1
99
100# if don't have the right to access dir, gain by sudo
101if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then
102 SUDO_EXEC=$(which "sudo")
103 if [ -z $SUDO_EXEC ]; then
104 echo "No command 'sudo' found, please install sudo first. Abort!"
105 exit 1
106 fi
107
108 # test sudo could gain root right
109 $SUDO_EXEC pwd >/dev/null 2>&1
110 [ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1
111
112 # now that we have sudo rights, create the directory
113 $SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1
114fi
115
116payload_offset=$(($(grep -na -m1 "^MARKER:$" $0|cut -d':' -f1) + 1))
117
118printf "Extracting SDK..."
119tail -n +$payload_offset $0| $SUDO_EXEC tar xj -C $target_sdk_dir
120echo "done"
121
122printf "Setting it up..."
123# fix environment paths
124for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
125 $SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g" -i $env_setup_script
126done
127
128# fix dynamic loader paths in all ELF SDK binaries
129native_sysroot=$($SUDO_EXEC cat $env_setup_script |grep 'OECORE_NATIVE_SYSROOT='|cut -d'=' -f2|tr -d '"')
130dl_path=$($SUDO_EXEC find $native_sysroot/lib -name "ld-linux*")
131if [ "$dl_path" = "" ] ; then
132 echo "SDK could not be set up. Relocate script unable to find ld-linux.so. Abort!"
133 exit 1
134fi
135executable_files=$($SUDO_EXEC find $native_sysroot -type f -perm /111 -printf "'%h/%f' ")
136
137tdir=`mktemp -d`
138if [ x$tdir = x ] ; then
139 echo "SDK relocate failed, could not create a temporary directory"
140 exit 1
141fi
142echo "#!/bin/bash" > $tdir/relocate_sdk.sh
143echo exec ${env_setup_script%/*}/relocate_sdk.py $target_sdk_dir $dl_path $executable_files >> $tdir/relocate_sdk.sh
144$SUDO_EXEC mv $tdir/relocate_sdk.sh ${env_setup_script%/*}/relocate_sdk.sh
145$SUDO_EXEC chmod 755 ${env_setup_script%/*}/relocate_sdk.sh
146rm -rf $tdir
147if [ $relocate = 1 ] ; then
148 $SUDO_EXEC ${env_setup_script%/*}/relocate_sdk.sh
149 if [ $? -ne 0 ]; then
150 echo "SDK could not be set up. Relocate script failed. Abort!"
151 exit 1
152 fi
153fi
154
155# replace @SDKPATH@ with the new prefix in all text files: configs/scripts/etc
156$SUDO_EXEC find $native_sysroot -type f -exec file '{}' \;|grep ":.*\(ASCII\|script\|source\).*text"|awk -F':' '{printf "%s\0", $1}'|$SUDO_EXEC xargs -0 sed -i -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:g"
157
158# change all symlinks pointing to @SDKPATH@
159for l in $($SUDO_EXEC find $native_sysroot -type l); do
160 $SUDO_EXEC ln -sfn $(readlink $l|$SUDO_EXEC sed -e "s:$DEFAULT_INSTALL_DIR:$target_sdk_dir:") $l
161done
162
163# find out all perl scripts in $native_sysroot and modify them replacing the
164# host perl with SDK perl.
165for perl_script in $($SUDO_EXEC find $native_sysroot -type f -exec grep "^#!.*perl" -l '{}' \;); do
166 $SUDO_EXEC sed -i -e "s:^#! */usr/bin/perl.*:#! /usr/bin/env perl:g" -e \
167 "s: /usr/bin/perl: /usr/bin/env perl:g" $perl_script
168done
169
170echo done
171
172# delete the relocating script, so that user is forced to re-run the installer
173# if he/she wants another location for the sdk
174if [ $savescripts = 0 ] ; then
175 $SUDO_EXEC rm ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
176fi
177
178echo "SDK has been successfully set up and is ready to be used."
179
180exit 0
181
182MARKER: