 acec05060d
			
		
	
	acec05060d
	
	
	
		
			
			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
 |