#!/bin/sh
export LC_ALL=en_US.UTF-8
#Make sure at least one python is installed
INIT_PYTHON=$(which python3 2>/dev/null )
[ -z "$INIT_PYTHON" ] && INIT_PYTHON=$(which python2 2>/dev/null)
[ -z "$INIT_PYTHON" ] && echo "Error: The SDK needs a python installed" && exit 1
# Remove invalid PATH elements first (maybe from a previously setup toolchain now deleted
PATH=`$INIT_PYTHON -c 'import os; print(":".join(e for e in os.environ["PATH"].split(":") if os.path.exists(e)))'`
tweakpath () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
PATH=$PATH:$1
esac
}
# Some systems don't have /usr/sbin or /sbin in the cleaned environment PATH but we make need it
# for the system's host tooling checks
tweakpath /usr/sbin
tweakpath /sbin
INST_ARCH=$(uname -m | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
SDK_ARCH=$(echo x86_64 | sed -e "s/i[3-6]86/ix86/" -e "s/x86[-_]64/x86_64/")
INST_GCC_VER=$(gcc --version 2>/dev/null | sed -ne 's/.* \([0-9]\+\.[0-9]\+\)\.[0-9]\+.*/\1/p')
SDK_GCC_VER=''
verlte () {
[ "$1" = "`printf "$1\n$2" | sort -V | head -n1`" ]
}
verlt() {
[ "$1" = "$2" ] && return 1 || verlte $1 $2
}
verlt `uname -r` 3.2.0
if [ $? = 0 ]; then
echo "Error: The SDK needs a kernel > 3.2.0"
exit 1
fi
if [ "$INST_ARCH" != "$SDK_ARCH" ]; then
# Allow for installation of ix86 SDK on x86_64 host
if [ "$INST_ARCH" != x86_64 -o "$SDK_ARCH" != ix86 ]; then
echo "Error: Incompatible SDK installer! Your host is $INST_ARCH and this SDK was built for $SDK_ARCH hosts."
exit 1
fi
fi
if ! xz -V > /dev/null 2>&1; then
echo "Error: xz is required for installation of this SDK, please install it first"
exit 1
fi
SDK_BUILD_PATH="/usr/local/oe-sdk-hardcoded-buildpath"
DEFAULT_INSTALL_DIR="/opt/poky/4.0.14"
SUDO_EXEC=""
EXTRA_TAR_OPTIONS=""
target_sdk_dir=""
answer=""
relocate=1
savescripts=0
verbose=0
publish=0
listcontents=0
while getopts ":yd:npDRSl" OPT; do
case $OPT in
y)
answer="Y"
;;
d)
target_sdk_dir=$OPTARG
;;
n)
prepare_buildsystem="no"
;;
p)
prepare_buildsystem="no"
publish=1
;;
D)
verbose=1
;;
R)
relocate=0
savescripts=1
;;
S)
savescripts=1
;;
l)
listcontents=1
;;
*)
echo "Usage: $(basename "$0") [-y] [-d
]"
echo " -y Automatic yes to all prompts"
echo " -d Install the SDK to "
echo "======== Extensible SDK only options ============"
echo " -n Do not prepare the build system"
echo " -p Publish mode (implies -n)"
echo "======== Advanced DEBUGGING ONLY OPTIONS ========"
echo " -S Save relocation scripts"
echo " -R Do not relocate executables"
echo " -D use set -x to see what is going on"
echo " -l list files that will be extracted"
exit 1
;;
esac
done
payload_offset=$(($(grep -na -m1 "^MARKER:$" "$0"|cut -d':' -f1) + 1))
if [ "$listcontents" = "1" ] ; then
if [ tar.xz = "zip" ]; then
tail -n +$payload_offset "$0" > sdk.zip
if unzip -l sdk.zip;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
else
tail -n +$payload_offset "$0"| tar tvJ || exit 1
fi
exit
fi
titlestr="Poky (Yocto Project Reference Distro) Extensible SDK installer version 4.0.14"
printf "%s\n" "$titlestr"
printf "%${#titlestr}s\n" | tr " " "="
if [ $verbose = 1 ] ; then
set -x
fi
# Since bitbake won't run as root it doesn't make sense to try and install
# the extensible sdk as root.
if [ "`id -u`" = "0" ]; then
echo "ERROR: The extensible sdk cannot be installed as root."
exit 1
fi
if ! command -v locale > /dev/null; then
echo "ERROR: The installer requires the locale command, please install it first"
exit 1
fi
# Check setting of LC_ALL set above
canonicalised_locale=`echo $LC_ALL | sed 's/UTF-8/utf8/'`
if ! locale -a | grep -q $canonicalised_locale ; then
echo "ERROR: the installer requires the $LC_ALL locale to be installed (but not selected), please install it first"
exit 1
fi
# The relocation script used by buildtools installer requires python
if ! command -v python3 > /dev/null; then
echo "ERROR: The installer requires python3, please install it first"
exit 1
fi
missing_utils=""
for util in diffstat bzip2 gzip gawk cpio perl file which gcc g++; do
if ! command -v $util > /dev/null; then
missing_utils="$missing_utils $util"
fi
done
if [ -n "$missing_utils" ] ; then
echo "ERROR: the SDK requires the following missing utilities, please install them: $missing_utils"
exit 1
fi
SDK_EXTENSIBLE="1"
if [ "$publish" = "1" ] && [ "minimal" = "minimal" ] ; then
EXTRA_TAR_OPTIONS="$EXTRA_TAR_OPTIONS --exclude=sstate-cache"
fi
# SDK_EXTENSIBLE is exposed from the SDK_PRE_INSTALL_COMMAND above
if [ "$SDK_EXTENSIBLE" = "1" ]; then
DEFAULT_INSTALL_DIR="~/poky_sdk"
if [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '4.9' ] || [ "$INST_GCC_VER" = '4.8' -a "$SDK_GCC_VER" = '' ] || \
[ "$INST_GCC_VER" = '4.9' -a "$SDK_GCC_VER" = '' ]; then
echo "Error: Incompatible SDK installer! Your host gcc version is $INST_GCC_VER and this SDK was built by gcc higher version."
exit 1
fi
fi
if [ "$target_sdk_dir" = "" ]; then
if [ "$answer" = "Y" ]; then
target_sdk_dir="$DEFAULT_INSTALL_DIR"
else
read -p "Enter target directory for SDK (default: $DEFAULT_INSTALL_DIR): " target_sdk_dir
[ "$target_sdk_dir" = "" ] && target_sdk_dir=$DEFAULT_INSTALL_DIR
fi
fi
eval target_sdk_dir=$(echo "$target_sdk_dir"|sed 's/ /\\ /g')
if [ -d "$target_sdk_dir" ]; then
target_sdk_dir=$(cd "$target_sdk_dir"; pwd)
else
target_sdk_dir=$(readlink -m "$target_sdk_dir")
fi
# limit the length for target_sdk_dir, ensure the relocation behaviour in relocate_sdk.py has right result.
if [ ${#target_sdk_dir} -gt 2048 ]; then
echo "Error: The target directory path is too long!!!"
exit 1
fi
if [ "$SDK_EXTENSIBLE" = "1" ]; then
# We're going to be running the build system, additional restrictions apply
if echo "$target_sdk_dir" | grep -q '[+\ @$]'; then
echo "The target directory path ($target_sdk_dir) contains illegal" \
"characters such as spaces, @, \$ or +. Abort!"
exit 1
fi
# The build system doesn't work well with /tmp on NFS
fs_dev_path="$target_sdk_dir"
while [ ! -d "$fs_dev_path" ] ; do
fs_dev_path=`dirname $fs_dev_path`
done
fs_dev_type=`stat -f -c '%t' "$fs_dev_path"`
if [ "$fsdevtype" = "6969" ] ; then
echo "The target directory path $target_sdk_dir is on NFS, this is not possible. Abort!"
exit 1
fi
else
if [ -n "$(echo $target_sdk_dir|grep ' ')" ]; then
echo "The target directory path ($target_sdk_dir) contains spaces. Abort!"
exit 1
fi
fi
if [ -e "$target_sdk_dir/environment-setup-ppc7400-poky-linux" ]; then
echo "The directory \"$target_sdk_dir\" already contains a SDK for this architecture."
printf "If you continue, existing files will be overwritten! Proceed [y/N]? "
default_answer="n"
else
printf "You are about to install the SDK to \"$target_sdk_dir\". Proceed [Y/n]? "
default_answer="y"
fi
if [ "$answer" = "" ]; then
read answer
[ "$answer" = "" ] && answer="$default_answer"
else
echo $answer
fi
if [ "$answer" != "Y" -a "$answer" != "y" ]; then
echo "Installation aborted!"
exit 1
fi
# Try to create the directory (this will not succeed if user doesn't have rights)
mkdir -p $target_sdk_dir >/dev/null 2>&1
# if don't have the right to access dir, gain by sudo
if [ ! -x $target_sdk_dir -o ! -w $target_sdk_dir -o ! -r $target_sdk_dir ]; then
if [ "$SDK_EXTENSIBLE" = "1" ]; then
echo "Unable to access \"$target_sdk_dir\", will not attempt to use" \
"sudo as as extensible SDK cannot be used as root."
exit 1
fi
SUDO_EXEC=$(which "sudo")
if [ -z $SUDO_EXEC ]; then
echo "No command 'sudo' found, please install sudo first. Abort!"
exit 1
fi
# test sudo could gain root right
$SUDO_EXEC pwd >/dev/null 2>&1
[ $? -ne 0 ] && echo "Sorry, you are not allowed to execute as root." && exit 1
# now that we have sudo rights, create the directory
$SUDO_EXEC mkdir -p $target_sdk_dir >/dev/null 2>&1
fi
printf "Extracting SDK..."
if [ tar.xz = "zip" ]; then
tail -n +$payload_offset "$0" > sdk.zip
if $SUDO_EXEC unzip $EXTRA_TAR_OPTIONS sdk.zip -d $target_sdk_dir;then
rm sdk.zip
else
rm sdk.zip && exit 1
fi
else
tail -n +$payload_offset "$0"| $SUDO_EXEC tar mxJ -C $target_sdk_dir --checkpoint=.2500 $EXTRA_TAR_OPTIONS || exit 1
fi
echo "done"
printf "Setting it up..."
# fix environment paths
real_env_setup_script=""
for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
if grep -q 'OECORE_NATIVE_SYSROOT=' $env_setup_script; then
# Handle custom env setup scripts that are only named
# environment-setup-* so that they have relocation
# applied - what we want beyond here is the main one
# rather than the one that simply sorts last
real_env_setup_script="$env_setup_script"
fi
$SUDO_EXEC sed -e "s:/usr/local/oe-sdk-hardcoded-buildpath:$target_sdk_dir:g" -i $env_setup_script
done
if [ -n "$real_env_setup_script" ] ; then
env_setup_script="$real_env_setup_script"
fi
printf "\nExtracting buildtools...\n"
cd $target_sdk_dir
env_setup_script="$target_sdk_dir/environment-setup-ppc7400-poky-linux"
if [ -n "x86_64-buildtools-nativesdk-standalone-4.0.14.sh" ]; then
printf "buildtools\ny" | ./x86_64-buildtools-nativesdk-standalone-4.0.14.sh > buildtools.log || { printf 'ERROR: buildtools installation failed:\n' ; cat buildtools.log ; echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; }
# Delete the buildtools tar file since it won't be used again
rm -f ./x86_64-buildtools-nativesdk-standalone-4.0.14.sh
# We don't need the log either since it succeeded
rm -f buildtools.log
# Make sure when the user sets up the environment, they also get
# the buildtools-tarball tools in their path.
echo "# Save and reset OECORE_NATIVE_SYSROOT as buildtools may change it" >> $env_setup_script
echo "SAVED=\"\$OECORE_NATIVE_SYSROOT\"" >> $env_setup_script
echo ". $target_sdk_dir/buildtools/environment-setup*" >> $env_setup_script
echo "OECORE_NATIVE_SYSROOT=\"\$SAVED\"" >> $env_setup_script
fi
# Allow bitbake environment setup to be ran as part of this sdk.
echo "export OE_SKIP_SDK_CHECK=1" >> $env_setup_script
# Work around runqemu not knowing how to get this information within the eSDK
echo "export DEPLOY_DIR_IMAGE=$target_sdk_dir/tmp/deploy/images/qemuppc" >> $env_setup_script
# A bit of another hack, but we need this in the path only for devtool
# so put it at the end of $PATH.
echo "export PATH=\"$target_sdk_dir/sysroots/x86_64-pokysdk-linux/usr/bin:\$PATH\"" >> $env_setup_script
echo "printf 'SDK environment now set up; additionally you may now run devtool to perform development tasks.\nRun devtool --help for further details.\n'" >> $env_setup_script
# Warn if trying to use external bitbake and the ext SDK together
echo "(which bitbake > /dev/null 2>&1 && echo 'WARNING: attempting to use the extensible SDK in an environment set up to run bitbake - this may lead to unexpected results. Please source this script in a new shell session instead.') || true" >> $env_setup_script
if [ "$prepare_buildsystem" != "no" -a -n "x86_64-buildtools-nativesdk-standalone-4.0.14.sh" ]; then
printf "Preparing build system...\n"
# dash which is /bin/sh on Ubuntu will not preserve the
# current working directory when first ran, nor will it set $1 when
# sourcing a script. That is why this has to look so ugly.
LOGFILE="$target_sdk_dir/preparing_build_system.log"
sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname layers/build/oe-init-build-env` && set $target_sdk_dir && . $target_sdk_dir/layers/build/oe-init-build-env $target_sdk_dir >> $LOGFILE && python3 $target_sdk_dir/ext-sdk-prepare.py $LOGFILE ' meta-extsdk-toolchain:do_populate_sysroot'" || { echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; }
fi
if [ -e $target_sdk_dir/ext-sdk-prepare.py ]; then
rm $target_sdk_dir/ext-sdk-prepare.py
fi
echo done
# delete the relocating script, so that user is forced to re-run the installer
# if he/she wants another location for the sdk
if [ $savescripts = 0 ] ; then
$SUDO_EXEC rm -f ${env_setup_script%/*}/relocate_sdk.py ${env_setup_script%/*}/relocate_sdk.sh
fi
# Execute post-relocation script
post_relocate="$target_sdk_dir/post-relocate-setup.sh"
if [ -e "$post_relocate" ]; then
$SUDO_EXEC sed -e "s:/usr/local/oe-sdk-hardcoded-buildpath:$target_sdk_dir:g" -i $post_relocate
$SUDO_EXEC /bin/sh $post_relocate "$target_sdk_dir" "/usr/local/oe-sdk-hardcoded-buildpath"
$SUDO_EXEC rm -f $post_relocate
fi
echo "SDK has been successfully set up and is ready to be used."
echo "Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g."
for env_setup_script in `ls $target_sdk_dir/environment-setup-*`; do
echo " \$ . $env_setup_script"
done
exit 0
MARKER:
7zXZ ִFա[`! ] }J>y&^&m
/X}~3wʃ\ՎCS`FDPhپ,;R "zaaPfIMC53+!t12HNvXBPEI<;8w2_dLAra/@GJ c44*e7 |A?bףA98X +!%Kac
nC1rƂ^468,N 4Mk)46B^.Ae'PͿb*SMWb%?i"e0HhШKjOm삫%(wPUxn$(2$4_0Ȭ R gty.\䮏Llu ܨZ _Pp~v*Oi#W~N&d$F9.|l |O^5ϟ+ƔMotML;Ɣ7d=J AgSUl9p@# Jg0sP!&jH)T4kVǤ+[1VWBG_La֘Cn!u~S.OQLj #D7\8<^x)IǞِSql$P8Cc35I KU db`S40Gye>Г
)yT@r^hYp~Xk /wd%QiqN}Ki
1)FW~;(@߆rV"LOd6W ԁ2gqٯG = =%@Ճf~F\,m Y;>5O1@3jX،*