
Change license to BSD-3-Clause Signed-off-by: Rafal Stefanowski <rafal.stefanowski@intel.com>
153 lines
3.7 KiB
Bash
Executable File
153 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright(c) 2012-2021 Intel Corporation
|
|
# SPDX-License-Identifier: BSD-3-Clause
|
|
#
|
|
|
|
MISSING_TOOLS=0
|
|
|
|
check_util() {
|
|
which $1 &> /dev/null
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo >&2 "Error: missing '$1' utility"
|
|
MISSING_TOOLS=1
|
|
fi
|
|
}
|
|
|
|
check_util dirname
|
|
check_util realpath
|
|
check_util basename
|
|
check_util awk
|
|
check_util python3
|
|
check_util sed
|
|
check_util make
|
|
check_util gcc
|
|
check_util lsblk
|
|
|
|
SCRIPTPATH=`dirname $0`
|
|
SCRIPTPATH=`realpath $SCRIPTPATH`
|
|
SUBMODULES=(
|
|
"ocf"
|
|
)
|
|
|
|
for SUBMOD in ${SUBMODULES[@]}; do
|
|
if ! ls -A "$SCRIPTPATH/$SUBMOD/"* &>/dev/null; then
|
|
SUBMODULES_MISSING+="'$SUBMOD' "
|
|
fi
|
|
done
|
|
if [ "$SUBMODULES_MISSING" ]; then
|
|
echo "Error: missing submodules: ${SUBMODULES_MISSING}" >&2
|
|
echo "Please run 'git submodule update --init' and try again!" >&2
|
|
MISSING_TOOLS=1
|
|
fi
|
|
|
|
if [ ! -e /lib/modules/$(uname -r)/build/ &> /dev/null ] && [ "$KERNEL_DIR" == "" ]
|
|
then
|
|
echo >&2 "Error: missing kernel headers and/or kernel devel"
|
|
MISSING_TOOLS=1
|
|
fi
|
|
|
|
`python3 -c "import argparse" &> /dev/null`
|
|
if [ $? -ne 0 ]
|
|
then
|
|
echo >&2 "Error: missing argparse python module"
|
|
MISSING_TOOLS=1
|
|
fi
|
|
|
|
if [ ! -f /usr/include/libelf.h ]; then
|
|
KERNEL_CONFIG=$(find /usr/src/ -type d -name "*$(uname -r)")/.config
|
|
if [ -f "$KERNEL_CONFIG" ]; then
|
|
if grep ^CONFIG_UNWINDER_ORC=[Yy] "$KERNEL_CONFIG" &>/dev/null; then
|
|
echo "Error: CONFIG_UNWINDER_ORC=y option is set in your kernel,"\
|
|
"please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2
|
|
MISSING_TOOLS=1
|
|
fi
|
|
elif [ "$MISSING_TOOLS" -eq 0 ]; then
|
|
# Print this warning only if there is no missing tools, to not confuse the user
|
|
# that installing libelf-dev might help with the lack of needed utilities.
|
|
echo "Warning: unable to find kernel config" >&2
|
|
echo -e "If configure ends with an error, you may need to install"\
|
|
"libelf-dev, libelf-devel or elfutils-libelf-devel\n" >&2
|
|
fi
|
|
fi
|
|
|
|
if [ "$MISSING_TOOLS" -ne "0" ]
|
|
then
|
|
exit 1
|
|
fi
|
|
|
|
# Run version generator with 'build' flag to
|
|
# indicate that we are in the build process
|
|
(cd tools && ./cas_version_gen build)
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: failed to obtain CAS version" >&2
|
|
exit 1
|
|
fi
|
|
|
|
CONFIG_FILES=`ls $SCRIPTPATH/configure.d/*.conf | sort`
|
|
FILES_COUNT=`echo $CONFIG_FILES | wc -w`
|
|
|
|
CONFIG_FILE=$SCRIPTPATH/"config.out"
|
|
|
|
generate_config() {
|
|
rm -f ${CONFIG_FILE}
|
|
touch ${CONFIG_FILE}
|
|
n_cores=$(nproc)
|
|
|
|
# Compile each test module in background
|
|
echo "Preparing configuration"
|
|
for file in $CONFIG_FILES; do
|
|
# $1 - Action to be performed
|
|
# $2 - File with stored configuration
|
|
# $3 - Name of called script (since script is running as subprocess
|
|
# it has to be passed explicitly)
|
|
source $file "check" "$CONFIG_FILE" "$file" &
|
|
|
|
# Prevent spawning more subprocesses than CPU available
|
|
while [ $(ps --no-headers -o pid --ppid=$$ | wc -w) -ge $n_cores ] ; do
|
|
sleep 1
|
|
done
|
|
done
|
|
|
|
# Wait for all compilation processes to finish
|
|
wait
|
|
|
|
grep "X" ${CONFIG_FILE} &> /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
echo "ERROR! Following steps failed while preparing config:"
|
|
grep "X" ${CONFIG_FILE} | cut -f1 -d ' '
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
generate_header() {
|
|
rm -f $SCRIPTPATH/modules/generated_defines.h
|
|
# Configs starting with '1_' have to be put as first in header
|
|
FIRST=$(echo $CONFIG_FILES | tr ' ' '\n' | grep '1_')
|
|
SECOND=$(echo $CONFIG_FILES | tr ' ' '\n' | grep '2_')
|
|
|
|
echo "Configuring OpenCAS"
|
|
for file in $FIRST; do
|
|
CONF=$(cat ${CONFIG_FILE} | grep $(basename $file) | cut -d' ' -f2)
|
|
source $file "apply" "$CONF" "$file"
|
|
done
|
|
|
|
for file in $SECOND; do
|
|
CONF=$(cat ${CONFIG_FILE} | grep $(basename $file) | cut -d' ' -f2)
|
|
source $file "apply" "$CONF" "$file"
|
|
done
|
|
}
|
|
|
|
if [ -z "$1" ]; then
|
|
generate_config
|
|
else
|
|
CONFIG_FILE=$(realpath $1)
|
|
if [ $? -ne 0 ] ; then
|
|
echo "Invaild path to config file!"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
generate_header
|