yb_arm/build.sh

115 lines
4.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 设置脚本在遇到任何错误时立即退出,避免错误累积
set -e
# 定义使用帮助函数,当参数不正确时显示帮助信息
usage() {
# 输出脚本的使用方法到标准错误输出
echo "usage: $0 [variants] [--evmy] [--cache] [--cpri/--ecpri/--jesd] [--pcie] [--test caseid] " 1>&2
msg=${1:-}
if [ ! -z "${msg}" ]; then
echo "error:$1"
fi
exit 1
}
# 初始化默认参数值
variants= # 存储其他未指定参数
fronthaul_option="cpri" # 默认前传接口CPRI
backhaul_option="tmac" # 默认回传接口TMAC
cache_option="no" # 默认不启用缓存
test_option="no" # 默认不运行测试
case_id=0 # 默认测试用例ID
board_option="EVB" # 默认板卡类型为EVB
# 获取Git仓库信息用于版本控制
arm_version=`git log --decorate -1 | sed -n '1p' | awk '{print substr($2,0)}'` # 获取最新的commit hash
arm_build_date=`date +"%Y-%m-%d-%H:%M:%S"` # 获取当前时间作为构建时间
# 检查是否存在Git标签用于版本号
if [ -z `git log --decorate -1 | grep -oP '(?<=tag: ).*' | awk '{print substr($1,0)}'` ]
then
arm_tag="NULL"; # 如果不存在标签则设为NULL
else
arm_tag=`git log --decorate -1 | grep -oP '(?<=tag: ).*' | awk '{print substr($1,0)}'`
arm_tag=${arm_tag%?} # 去除末尾特殊字符
fi
# 解析用户输入的参数
while [[ "$#" > 0 ]]; do
case $1 in
--cache) cache_option="yes"; shift;; # 启用缓存功能
--evmy) board_option="EVMY"; shift;; # 设置板卡类型为EVMY
--evb) board_option="EVB"; shift;; # 设置板卡类型为EVB
--evmyf) board_option="EVMYF"; shift;; # 设置板卡类型为EVMYF
--evmyt) board_option="EVMYT"; shift;; # 设置板卡类型为EVMYT
--cpri) fronthaul_option="cpri"; shift;;# 设置前传接口为CPRI
--ecpri) fronthaul_option="ecpri"; shift;;# 设置前传接口为eCPRI
--jesd) fronthaul_option="jesd"; shift;;# 设置前传接口为JESD
--pcie) backhaul_option="pcie"; shift;; # 设置回传接口为PCIe
--test) test_option="yes"; # 启用测试模式
# 检查是否提供了测试用例ID必须为数字
if [[ ! -z "$2" ]] && [[ -n "$(echo $2 | sed -n " /^[0-9]\+$/p")" ]]; then
case_id=$2; shift; # 设置测试用例ID
fi
shift;;
--*| -*) usage "unknown option $1"; exit 1;; # 遇到未知选项报错
*) variants+=" $1"; shift;; # 其他未定义参数存入variants变量
esac;
done
# 导出环境变量供后续编译使用
export arm_version=${arm_version} # 版本号
export arm_tag=${arm_tag} # Git标签
export arm_build_date=${arm_build_date} # 构建时间
# 打印版本信息
printf "#arm_version[%s], arm_tag[%s], arm_build_date:[%s]\n" $arm_version $arm_tag $arm_build_date
# 设置工程根目录和构建目录
export DIR_ROOT=$(cd `dirname "$0"`;pwd) # 获取脚本所在目录作为根目录
export BUILD_DIR=${DIR_ROOT}/build # 构建输出目录
# 清理旧的构建目录并新建
if [ -d ${BUILD_DIR} ]; then
rm -rf ${BUILD_DIR}
fi
mkdir -p ${BUILD_DIR}
# 特殊处理JESD前传接口的编译
if [[ "${fronthaul_option}" == "jesd" ]]; then
export RFIC_DIR=${DIR_ROOT}/driver/rfic/rf/ # JESD驱动代码路径
export CJSON_DIR=${DIR_ROOT}/driver/rfic/ucp/cJSON/inc/ # JSON库头文件路径
export RFIC_APP_DIR=${DIR_ROOT}/rfic # RFIC应用代码路径
export BOARD_TYPE=${board_option} # 当前板卡类型
# 编译JESD库和RFIC应用
echo -e "\n"
echo "###### 开始编译JESD库和RFIC应用 ######"
cd ${DIR_ROOT}/driver/rfic
source ./build.sh # 执行子编译脚本
# 将生成的库文件和头文件拷贝到指定位置
cp ${RFIC_DIR}/out/jesd/*.a ${BUILD_DIR}
cp ${RFIC_DIR}/out/jesd/*.h ${DIR_ROOT}/interface
cp ${RFIC_DIR}/out/rfic/*.a ${DIR_ROOT}/lib
cp ${RFIC_DIR}/out/rfic/ucp_api_rfic.h ${RFIC_APP_DIR}/inc/
cp ${CJSON_DIR}/xzJSON.h ${RFIC_APP_DIR}/inc/
cp ${RFIC_DIR}/out/app/*.out ${BUILD_DIR} # 拷贝可执行文件
fi
# 编译TFU驱动
cd ${DIR_ROOT}/driver/tfu
source ./build.sh
# 拷贝生成的库文件和头文件
cp build/libstc.a ${DIR_ROOT}/lib
cp build/libstc.a ${BUILD_DIR}
cp stc/inc/stc_drv_api.h ${DIR_ROOT}/interface
# 编译主程序
echo -e "\n"
echo "###### 开始编译主程序和消息传输模块 ######"
cd ${DIR_ROOT}/
# 调用make命令传入所有配置参数
make cache_option=${cache_option} fronthaul_option=${fronthaul_option} backhaul_option=${backhaul_option} test_option=${test_option} test_id=${case_id}
# 清理临时库文件目录
cd ${DIR_ROOT}/lib
rm -rf *.*