Files
2022-09-16 11:48:59 +08:00

278 lines
9.4 KiB
Bash

#!/bin/bash
# Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
# description: the script that make install securec
# date: 2019-12-28
# version: 1.01
# history:
# 2019-01-16 modify for securec_V100R001C01SPC006B002
# 2019-12-28 change formatting and add copyright notice
set -e
######################################################################
# Parameter setting
######################################################################
LOCAL_PATH=${0}
FIRST_CHAR=$(expr substr "$LOCAL_PATH" 1 1)
if [ "$FIRST_CHAR" = "/" ]; then
LOCAL_PATH=${0}
else
LOCAL_PATH="$(pwd)/${LOCAL_PATH}"
fi
LOCAL_DIR=$(dirname "${LOCAL_PATH}")
CONFIG_FILE_NAME=config.ini
BUILD_OPTION=release
ZIP_FILE_NAME=Huawei_Secure_C_V100R001C01SPC010B002.zip
SOURCE_CODE_PATH=Huawei_Secure_C_V100R001C01SPC010B002
LOG_FILE=${LOCAL_DIR}/build_securec.log
BUILD_FAILED=1
ls ${LOCAL_DIR}/${CONFIG_FILE_NAME} > /dev/null 2>&1
if [ $? -ne 0 ]; then
die "[Error] the file ${CONFIG_FILE_NAME} not exist."
fi
COMPLIE_TYPE_LIST=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' | awk -F '=' '{print $2}' | sed 's/|/ /g')
COMPONENT_NAME=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' | awk -F '=' '{print $1}' | awk -F '@' '{print $2}')
COMPONENT_TYPE=$(cat ${LOCAL_DIR}/${CONFIG_FILE_NAME} | grep -v '#' | grep -v '^$' | awk -F '@' '{print $1}')
if [ "${COMPONENT_NAME}"X = ""X ]; then
die "[Error] get component name failed!"
fi
if [ "${COMPONENT_TYPE}"X = ""X ]; then
die "[Error] get component type failed!"
fi
ROOT_DIR="${LOCAL_DIR}/../../../"
INSTALL_COMPOENT_PATH_NAME="${LOCAL_DIR}/../../output/kernel/${COMPONENT_TYPE}/${COMPONENT_NAME}"
#######################################################################
## print help information
#######################################################################
function print_help() {
echo "Usage: $0 [OPTION]
-h|--help show help information
-m|--build_option provode type of operation, values of paramenter is build, shrink, dist or clean
"
}
#######################################################################
# Print log.
#######################################################################
log() {
echo "[Build securec] $(date +%y-%m-%d' '%T): $@"
echo "[Build securec] $(date +%y-%m-%d' '%T): $@" >> "$LOG_FILE" 2>&1
}
#######################################################################
# print log and exit.
#######################################################################
die() {
log "$@"
echo "$@"
exit $BUILD_FAILED
}
#######################################################################
# build and install component
#######################################################################
function build_component() {
cd ${LOCAL_DIR}
unzip -o ${ZIP_FILE_NAME}
cp MakefileCustom ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src
if [ $? -ne 0 ]; then
die "[Error] change dir to $SRC_DIR failed."
fi
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}; do
case "${COMPILE_TYPE}" in
release)
die "[Error] securec not supported build type."
;;
debug)
die "[Error] securec not supported build type."
;;
comm)
log "[Notice] securec \"make -f MakefileCustom securecstatic\" build started"
make -f MakefileCustom securecstatic
if [ $? -ne 0 ]; then
die "securec make failed."
fi
make -f MakefileCustom securecshare
if [ $? -ne 0 ]; then
die "securec make failed."
fi
log "[Notice] securec build using \"${COMPILE_TYPE}\" has been finished"
;;
release_llt)
die "[Error] securec not supported build type."
;;
debug_llt)
die "[Error] securec not supported build type."
;;
llt)
die "[Error] securec not supported build type."
;;
*)
log "Internal Error: option processing error: $1"
log "please write right paramenter in ${CONFIG_FILE_NAME}"
exit 1
;;
esac
done
}
#######################################################################
# choose the real files
#######################################################################
function shrink_component() {
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}; do
case "${COMPILE_TYPE}" in
comm)
mkdir -p ${LOCAL_DIR}/install_comm_dist/lib
cp ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src/libsecurec.a ${LOCAL_DIR}/install_comm_dist/lib
mkdir -p ${LOCAL_DIR}/install_comm/lib
cp ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src/libsecurec.a ${LOCAL_DIR}/install_comm/lib
if [ $? -ne 0 ]; then
die "[Error] \"cp ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src/libsecurec.a ${LOCAL_DIR}/install_comm_dist/lib\" filed"
fi
;;
release) ;;
debug) ;;
llt) ;;
release_llt) ;;
debug_llt) ;;
*) ;;
esac
log "[Notice] securec shrink using \"${COMPILE_TYPE}\" has been finished!"
done
}
##############################################################################################################
# dist the real files to the matched path
# we could makesure that $INSTALL_COMPOENT_PATH_NAME is not null, '.' or '/'
##############################################################################################################
function dist_component() {
for COMPILE_TYPE in ${COMPLIE_TYPE_LIST}; do
case "${COMPILE_TYPE}" in
comm)
mkdir -p ${INSTALL_COMPOENT_PATH_NAME}/comm
rm -rf ${INSTALL_COMPOENT_PATH_NAME}/comm/*
cp -arxf ${LOCAL_DIR}/${SOURCE_CODE_PATH}/include ${INSTALL_COMPOENT_PATH_NAME}/comm
cp -r ${LOCAL_DIR}/install_comm_dist/* ${INSTALL_COMPOENT_PATH_NAME}/comm
if [ $? -ne 0 ]; then
die "[Error] \"cp -r ${LOCAL_DIR}/install_comm_dist/* ${INSTALL_COMPOENT_PATH_NAME}/comm\" failed."
fi
mkdir -p ${INSTALL_COMPOENT_PATH_NAME}/Dynamic_Lib
rm -rf ${INSTALL_COMPOENT_PATH_NAME}/Dynamic_Lib/*
cp -r ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src/libsecurec.so ${INSTALL_COMPOENT_PATH_NAME}/Dynamic_Lib/
if [ $? -ne 0 ]; then
die "[Error] cp dynamic failed."
fi
;;
release) ;;
debug) ;;
*) ;;
esac
log "[Notice] securec dist using \"${COMPILE_TYPE}\" has been finished!"
done
}
#######################################################################
# clean component
#######################################################################
function clean_component() {
cd ${LOCAL_DIR}/${SOURCE_CODE_PATH}/src
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR}/${SOURCE_CODE_PATH} failed."
fi
make clean
cd ${LOCAL_DIR}
if [ $? -ne 0 ]; then
die "[Error] cd ${LOCAL_DIR} failed."
fi
[ -n "${SOURCE_CODE_PATH}" ] && rm -rf ${SOURCE_CODE_PATH}
rm -rf install_*
log "[Notice] securec clean has been finished!"
}
#######################################################################
#######################################################################
#######################################################################
# main
#######################################################################
#######################################################################
#######################################################################
function main() {
case "${BUILD_OPTION}" in
build)
build_component
;;
shrink)
shrink_component
;;
dist)
dist_component
;;
clean)
clean_component
;;
all)
build_component
shrink_component
dist_component
#clean_component
;;
*)
log "Internal Error: option processing error: $2"
log "please input right paramenter values build, shrink, dist or clean "
;;
esac
}
########################################################################
if [ $# = 0 ]; then
log "missing option"
print_help
exit 1
fi
##########################################################################
#read command line paramenters
##########################################################################
while [ $# -gt 0 ]; do
case "$1" in
-h | --help)
print_help
exit 1
;;
-m | --build_option)
if [ "$2"X = X ]; then
die "no given version number values"
fi
BUILD_OPTION=$2
shift 2
;;
*)
log "Internal Error: option processing error: $1" 1>&2
log "please input right paramtenter, the following command may help you"
log "./build.sh --help or ./build.sh -h"
exit 1
;;
esac
done
###########################################################################
main