152 lines
4.1 KiB
Bash
Executable File
152 lines
4.1 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
# Common code used by all bundles. Should be included at the
|
|
# top of every *.sh file of each bundle.
|
|
|
|
export SRC_DIR=`realpath --no-symlinks $PWD`
|
|
export MAIN_SRC_DIR=`realpath --no-symlinks $SRC_DIR/../../../`
|
|
export WORK_DIR=$MAIN_SRC_DIR/work
|
|
export SOURCE_DIR=$MAIN_SRC_DIR/source
|
|
export OVERLAY_WORK_DIR=$WORK_DIR/overlay
|
|
export OVERLAY_SOURCE_DIR=$SOURCE_DIR/overlay
|
|
export OVERLAY_ROOTFS=$WORK_DIR/overlay_rootfs
|
|
export BUNDLE_NAME=`basename $SRC_DIR`
|
|
export DEST_DIR=$WORK_DIR/overlay/$BUNDLE_NAME/${BUNDLE_NAME}_installed
|
|
export CONFIG=$MAIN_SRC_DIR/.config
|
|
export SYSROOT=$WORK_DIR/sysroot
|
|
|
|
# This function reads property from the main '.config' file.
|
|
# If there is local '.config' file in the current directory
|
|
# the property value is overridden with the value found in
|
|
# the local '.config' file, if the property is present there.
|
|
#
|
|
# Using () instead of {} for the function body is a POSIX
|
|
# compliant way to execute subshell and as consequence all
|
|
# variables in the function will become effectively in local
|
|
# scope. Note that the 'local' keyword is supported by most
|
|
# shells but it is not POSIX compliant.
|
|
read_property() (
|
|
# The property we are looking for.
|
|
prop_name=$1
|
|
|
|
# The value of the property set initially to empty string.
|
|
prop_value=
|
|
|
|
if [ ! "$prop_name" = "" ] ; then
|
|
# Search in the main '.config' file.
|
|
prop_value="`grep -i ^${prop_name}= $CONFIG | cut -f2- -d'=' | xargs`"
|
|
|
|
if [ -f $SRC_DIR/.config ] ; then
|
|
# Search in the local '.config' file.
|
|
prop_value_local="`grep -i ^${prop_name}= $SRC_DIR/.config | cut -f2- -d'=' | xargs`"
|
|
|
|
if [ ! "$prop_value_local" = "" ] ; then
|
|
# Override the original value with the local value.
|
|
prop_value="$prop_value_local"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "$prop_value"
|
|
)
|
|
|
|
# Read commonly used configuration properties.
|
|
export JOB_FACTOR="`read_property JOB_FACTOR`"
|
|
export CFLAGS="`read_property CFLAGS`"
|
|
export NUM_CORES="$(grep ^processor /proc/cpuinfo | wc -l)"
|
|
|
|
# Calculate the number of make "jobs"
|
|
export NUM_JOBS="$((NUM_CORES * JOB_FACTOR))"
|
|
|
|
# Ideally we would export MAKE at this point with -j etc to allow programs to just run $(MAKE) and not worry about extra flags that need to be passed
|
|
# export MAKE="${MAKE-make} -j $NUM_JOBS"
|
|
|
|
download_source() (
|
|
url=$1 # Download from this URL.
|
|
file=$2 # Save the resource in this file.
|
|
|
|
local=`read_property USE_LOCAL_SOURCE`
|
|
|
|
if [ "$local" = "true" -a ! -f $file ] ; then
|
|
echo "Source file '$file' is missing and will be downloaded."
|
|
local=false
|
|
fi
|
|
|
|
if [ ! "$local" = "true" ] ; then
|
|
echo "Downloading overlay source file from '$url'."
|
|
echo "Saving overlay source file in '$file'".
|
|
wget -O $file -c $url
|
|
else
|
|
echo "Using local overlay source file '$file'."
|
|
fi
|
|
)
|
|
|
|
extract_source() (
|
|
file=$1
|
|
name=$2
|
|
|
|
# Delete folder with previously extracted source.
|
|
echo "Removing overlay work area for '$name'. This may take a while."
|
|
rm -rf $OVERLAY_WORK_DIR/$name
|
|
mkdir -p $OVERLAY_WORK_DIR/$name
|
|
|
|
# Extract source to folder 'work/overlay/$source'.
|
|
tar -xvf $file -C $OVERLAY_WORK_DIR/$name
|
|
)
|
|
|
|
make_target() (
|
|
make -j $NUM_JOBS "$@"
|
|
)
|
|
|
|
make_clean() (
|
|
target=$1
|
|
|
|
if [ "$target" = "" ] ; then
|
|
target=clean
|
|
fi
|
|
|
|
if [ -f Makefile ] ; then
|
|
echo "Preparing '$BUNDLE_NAME' work area. This may take a while."
|
|
make_target $target
|
|
else
|
|
echo "The clean phase for '$BUNDLE_NAME' has been skipped."
|
|
fi
|
|
)
|
|
|
|
reduce_size() (
|
|
while [ ! "$1" = "" ] ; do
|
|
if [ -d $1 ] ; then
|
|
for file in $1/* ; do
|
|
reduce_size $file
|
|
done
|
|
elif [ -f $1 ] ; then
|
|
set +e
|
|
strip -g $1 2>/dev/null
|
|
set -e
|
|
fi
|
|
|
|
shift
|
|
done
|
|
)
|
|
|
|
install_to_overlay() (
|
|
# With '--remove-destination' all possibly existing soft links in
|
|
# $OVERLAY_ROOTFS will be overwritten correctly.
|
|
|
|
if [ "$#" = "2" ] ; then
|
|
cp -r --remove-destination \
|
|
$DEST_DIR/$1 \
|
|
$OVERLAY_ROOTFS/$2
|
|
elif [ "$#" = "1" ] ; then
|
|
cp -r --remove-destination \
|
|
$DEST_DIR/$1 \
|
|
$OVERLAY_ROOTFS
|
|
elif [ "$#" = "0" ] ; then
|
|
cp -r --remove-destination \
|
|
$DEST_DIR/* \
|
|
$OVERLAY_ROOTFS
|
|
fi
|
|
)
|