diff options
Diffstat (limited to 'meta-vitis-tc/files/toolchain-shar-extract.sh')
-rw-r--r-- | meta-vitis-tc/files/toolchain-shar-extract.sh | 303 |
1 files changed, 303 insertions, 0 deletions
diff --git a/meta-vitis-tc/files/toolchain-shar-extract.sh b/meta-vitis-tc/files/toolchain-shar-extract.sh new file mode 100644 index 00000000..ec2008c8 --- /dev/null +++ b/meta-vitis-tc/files/toolchain-shar-extract.sh | |||
@@ -0,0 +1,303 @@ | |||
1 | #!/bin/sh | ||
2 | |||
3 | export LC_ALL=en_US.UTF-8 | ||
4 | #Make sure at least one python is installed | ||
5 | INIT_PYTHON=$(which python3 2>/dev/null ) | ||
6 | [ -z "$INIT_PYTHON" ] && INIT_PYTHON=$(which python2 2>/dev/null) | ||
7 | [ -z "$INIT_PYTHON" ] && echo "Error: The SDK needs a python installed" && exit 1 | ||
8 | |||
9 | # Remove invalid PATH elements first (maybe from a previously setup toolchain now deleted | ||
10 | PATH=`$INIT_PYTHON -c 'import os; print(":".join(e for e in os.environ["PATH"].split(":") if os.path.exists(e)))'` | ||
11 | |||
12 | tweakpath () { | ||
13 | case ":${PATH}:" in | ||
14 | *:"$1":*) | ||
15 | ;; | ||
16 | *) | ||
17 | PATH=$PATH:$1 | ||
18 | esac | ||
19 | } | ||
20 | |||
21 | # Some systems don't have /usr/sbin or /sbin in the cleaned environment PATH but we make need it | ||
22 | # for the system's host tooling checks | ||
23 | tweakpath /usr/sbin | ||
24 | tweakpath /sbin | ||
25 | |||
26 | INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/") | ||
27 | SDK_ARCH=$(echo @SDK_ARCH@ | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/") | ||
28 | |||
29 | INST_GCC_VER=$(gcc --version 2>/dev/null | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p') | ||
30 | SDK_GCC_VER='@SDK_GCC_VER@' | ||
31 | |||
32 | verlte () { | ||
33 | [ "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ] | ||
34 | } | ||
35 | |||
36 | verlt() { | ||
37 | [ "$1" = "$2" ] && return 1 || verlte $1 $2 | ||
38 | } | ||
39 | |||
40 | verlt `uname -r` @OLDEST_KERNEL@ | ||
41 | if [ $? = 0 ]; then | ||
42 | echo "Error: The SDK needs a kernel > @OLDEST_KERNEL@" | ||
43 | exit 1 | ||
44 | fi | ||
45 | |||
46 | if [ "$INST_ARCH" != "$SDK_ARCH" ]; then | ||
47 | # Allow for installation of ix86 SDK on x86_64 host | ||
48 | if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then | ||
49 | echo "Error: Incompatible SDK installer! Your host is $INST_ARCH and this SDK was built for $SDK_ARCH hosts." | ||
50 | exit 1 | ||
51 | fi | ||
52 | fi | ||
53 | |||
54 | if ! xz -V > /dev/null 2>&1; then | ||
55 | echo "Error: xz is required for installation of this SDK, please install it first" | ||
56 | exit 1 | ||
57 | fi | ||
58 | |||
59 | SDK_BUILD_PATH="@SDKPATH@" | ||
60 | DEFAULT_INSTALL_DIR="@SDKPATHINSTALL@" | ||
61 | SUDO_EXEC="" | ||
62 | EXTRA_TAR_OPTIONS="" | ||
63 | target_sdk_dir="" | ||
64 | answer="" | ||
65 | relocate=1 | ||
66 | savescripts=0 | ||
67 | verbose=0 | ||
68 | publish=0 | ||
69 | listcontents=0 | ||
70 | while getopts ":yd:npDRrSl" OPT; do | ||
71 | case $OPT in | ||
72 | y) | ||
73 | answer="Y" | ||
74 | ;; | ||
75 | d) | ||
76 | target_sdk_dir=$OPTARG | ||
77 | ;; | ||
78 | n) | ||
79 | prepare_buildsystem="no" | ||
80 | ;; | ||
81 | p) | ||
82 | prepare_buildsystem="no" | ||
83 | publish=1 | ||
84 | ;; | ||
85 | D) | ||
86 | verbose=1 | ||
87 | ;; | ||
88 | r) | ||
89 | relocate=2 | ||
90 | ;; | ||
91 | R) | ||
92 | relocate=0 | ||
93 | savescripts=1 | ||
94 | ;; | ||
95 | S) | ||
96 | savescripts=1 | ||
97 | ;; | ||
98 | l) | ||
99 | listcontents=1 | ||
100 | ;; | ||
101 | *) | ||
102 | echo "Usage: $(basename "$0") [-y] [-d <dir>]" | ||
103 | echo " -y Automatic yes to all prompts" | ||
104 | echo " -d <dir> Install the SDK to <dir>" | ||
105 | echo "======== PetaLinux SDK only options ============" | ||
106 | echo " -r Enable runtime relocation, note this is slower" | ||
107 | #echo "======== Extensible SDK only options ============" | ||
108 | #echo " -n Do not prepare the build system" | ||
109 | #echo " -p Publish mode (implies -n)" | ||
110 | echo "======== Advanced DEBUGGING ONLY OPTIONS ========" | ||
111 | echo " -S Save relocation scripts" | ||
112 | echo " -R Do not relocate executables" | ||
113 | echo " -D use set -x to see what is going on" | ||
114 | echo " -l list files that will be extracted" | ||
115 | exit 1 | ||
116 | ;; | ||
117 | esac | ||
118 | done | ||
119 | |||
120 | payload_offset=$(($(grep -na -m1 "^MARKER:$" "$0"|cut -d':' -f1) + 1)) | ||
121 | if [ "$listcontents" = "1" ] ; then | ||
122 | if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then | ||
123 | tail -n +$payload_offset "$0" > sdk.zip | ||
124 | if unzip -l sdk.zip;then | ||
125 | rm sdk.zip | ||
126 | else | ||
127 | rm sdk.zip && exit 1 | ||
128 | fi | ||
129 | else | ||
130 | tail -n +$payload_offset "$0"| tar tvJ || exit 1 | ||
131 | fi | ||
132 | exit | ||
133 | fi | ||
134 | |||
135 | titlestr="@SDK_TITLE@ installer version @SDK_VERSION@" | ||
136 | printf "%s\n" "$titlestr" | ||
137 | printf "%${#titlestr}s\n" | tr " " "=" | ||
138 | |||
139 | if [ $verbose = 1 ] ; then | ||
140 | set -x | ||
141 | fi | ||
142 | |||
143 | @SDK_PRE_INSTALL_COMMAND@ | ||
144 | |||
145 | # SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above | ||
146 | if [ "$SDK_EXTENSIBLE" = "1" ]; then | ||
147 | DEFAULT_INSTALL_DIR="@SDKEXTPATH@" | ||
148 | if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \ | ||
149 | [ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then | ||
150 | echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version." | ||
151 | exit 1 | ||
152 | fi | ||
153 | fi | ||
154 | |||
155 | if [ "$target_sdk_dir" = "" ]; then | ||
156 | if [ "$answer" = "Y" ]; then | ||
157 | target_sdk_dir="$DEFAULT_INSTALL_DIR" | ||
158 | else | ||
159 | read -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir | ||
160 | [ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR | ||
161 | fi | ||
162 | fi | ||
163 | |||
164 | eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g') | ||
165 | if [ -d "$target_sdk_dir" ]; then | ||
166 | target_sdk_dir=$(cd "$target_sdk_dir"; pwd) | ||
167 | else | ||
168 | target_sdk_dir=$(readlink -m "$target_sdk_dir") | ||
169 | fi | ||
170 | |||
171 | # limit the length for target_sdk_dir, ensure the relocation behaviour in relocate_sdk.py has right result. | ||
172 | if [ ${#target_sdk_dir} -gt 2048 ]; then | ||
173 | echo "Error: The target directory path is too long!!!" | ||
174 | exit 1 | ||
175 | fi | ||
176 | |||
177 | if [ "$SDK_EXTENSIBLE" = "1" ]; then | ||
178 | # We're going to be running the build system, additional restrictions apply | ||
179 | if echo "$target_sdk_dir" | grep -q '[+\ @$]'; then | ||
180 | echo "The target directory path ($target_sdk_dir) contains illegal" \ | ||
181 | "characters such as spaces, @, \$ or +. Abort!" | ||
182 | exit 1 | ||
183 | fi | ||
184 | # The build system doesn't work well with /tmp on NFS | ||
185 | fs_dev_path="$target_sdk_dir" | ||
186 | while [ ! -d "$fs_dev_path" ] ; do | ||
187 | fs_dev_path=`dirname $fs_dev_path` | ||
188 | done | ||
189 | fs_dev_type=`stat -f -c '%t' "$fs_dev_path"` | ||
190 | if [ "$fsdevtype" = "6969" ] ; then | ||
191 | echo "The target directory path $target_sdk_dir is on NFS, this is not possible. Abort!" | ||
192 | exit 1 | ||
193 | fi | ||
194 | else | ||
195 | if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then | ||
196 | echo "The target directory path ($target_sdk_dir) contains spaces. Abort!" | ||
197 | exit 1 | ||
198 | fi | ||
199 | fi | ||
200 | |||
201 | if [ -e "$target_sdk_dir/environment-setup-@REAL_MULTIMACH_TARGET_SYS@" ]; then | ||
202 | echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture." | ||
203 | printf "If you continue, existing files will be overwritten! Proceed [y/N]? " | ||
204 | |||
205 | default_answer="n" | ||
206 | else | ||
207 | printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed [Y/n]? " | ||
208 | |||
209 | default_answer="y" | ||
210 | fi | ||
211 | |||
212 | if [ "$answer" = "" ]; then | ||
213 | read answer | ||
214 | [ "$answer" = "" ] && answer="$default_answer" | ||
215 | else | ||
216 | echo $answer | ||
217 | fi | ||
218 | |||
219 | if [ "$answer" != "Y" -a "$answer" != "y" ]; then | ||
220 | echo "Installation aborted!" | ||
221 | exit 1 | ||
222 | fi | ||
223 | |||
224 | # Try to create the directory (this will not succeed if user doesn't have rights) | ||
225 | mkdir -p $target_sdk_dir >/dev/null 2>&1 | ||
226 | |||
227 | # if don't have the right to access dir, gain by sudo | ||
228 | if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then | ||
229 | if [ "$SDK_EXTENSIBLE" = "1" ]; then | ||
230 | echo "Unable to access \"$target_sdk_dir\", will not attempt to use" \ | ||
231 | "sudo as as extensible SDK cannot be used as root." | ||
232 | exit 1 | ||
233 | fi | ||
234 | |||
235 | SUDO_EXEC=$(which "sudo") | ||
236 | if [ -z $SUDO_EXEC ]; then | ||
237 | echo "No command 'sudo' found, please install sudo first. Abort!" | ||
238 | exit 1 | ||
239 | fi | ||
240 | |||
241 | # test sudo could gain root right | ||
242 | $SUDO_EXEC pwd >/dev/null 2>&1 | ||
243 | [ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1 | ||
244 | |||
245 | # now that we have sudo rights, create the directory | ||
246 | $SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1 | ||
247 | fi | ||
248 | |||
249 | printf "Extracting SDK..." | ||
250 | if [ @SDK_ARCHIVE_TYPE@ = "zip" ]; then | ||
251 | tail -n +$payload_offset "$0" > sdk.zip | ||
252 | if $SUDO_EXEC unzip $EXTRA_TAR_OPTIONS sdk.zip -d $target_sdk_dir;then | ||
253 | rm sdk.zip | ||
254 | else | ||
255 | rm sdk.zip && exit 1 | ||
256 | fi | ||
257 | else | ||
258 | tail -n +$payload_offset "$0"| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1 | ||
259 | fi | ||
260 | echo "done" | ||
261 | |||
262 | printf "Setting it up..." | ||
263 | # fix environment paths | ||
264 | real_env_setup_script="" | ||
265 | for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do | ||
266 | if grep -q 'OECORE_NATIVE_SYSROOT=' $env_setup_script; then | ||
267 | # Handle custom env setup scripts that are only named | ||
268 | # environment-setup-* so that they have relocation | ||
269 | # applied - what we want beyond here is the main one | ||
270 | # rather than the one that simply sorts last | ||
271 | real_env_setup_script="$env_setup_script" | ||
272 | fi | ||
273 | $SUDO_EXEC sed -e "s:@SDKPATH@:$target_sdk_dir:g" -i $env_setup_script | ||
274 | done | ||
275 | if [ -n "$real_env_setup_script" ] ; then | ||
276 | env_setup_script="$real_env_setup_script" | ||
277 | fi | ||
278 | |||
279 | @SDK_POST_INSTALL_COMMAND@ | ||
280 | |||
281 | # delete the relocating script, so that user is forced to re-run the installer | ||
282 | # if he/she wants another location for the sdk | ||
283 | if [ $savescripts = 0 ] ; then | ||
284 | $SUDO_EXEC rm -f ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh ${env_setup_script%/*}/relocate-wrapper.py | ||
285 | fi | ||
286 | |||
287 | # Execute post-relocation script | ||
288 | post_relocate="$target_sdk_dir/post-relocate-setup.sh" | ||
289 | if [ -e "$post_relocate" ]; then | ||
290 | $SUDO_EXEC sed -e "s:@SDKPATH@:$target_sdk_dir:g" -i $post_relocate | ||
291 | $SUDO_EXEC /bin/sh $post_relocate "$target_sdk_dir" "@SDKPATH@" | ||
292 | $SUDO_EXEC rm -f $post_relocate | ||
293 | fi | ||
294 | |||
295 | echo "SDK has been successfully set up and is ready to be used." | ||
296 | echo "Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g." | ||
297 | for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do | ||
298 | echo " \$ . $env_setup_script" | ||
299 | done | ||
300 | |||
301 | exit 0 | ||
302 | |||
303 | MARKER: | ||