2025-05-29 18:42:49 +08:00
|
|
|
|
# 设置脚本在遇到任何错误时立即退出,避免错误累积
|
2023-07-12 14:14:31 +08:00
|
|
|
|
set -e
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 定义使用帮助函数,当参数不正确时显示帮助信息
|
2023-07-12 14:14:31 +08:00
|
|
|
|
usage() {
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 输出脚本的使用方法到标准错误输出
|
2025-05-20 01:51:25 +08:00
|
|
|
|
echo "usage: $0 [variants] [--evmy] [--cache] [--cpri/--ecpri/--jesd] [--pcie] [--test caseid] " 1>&2
|
2023-07-12 14:14:31 +08:00
|
|
|
|
msg=${1:-}
|
|
|
|
|
if [ ! -z "${msg}" ]; then
|
|
|
|
|
echo "error:$1"
|
|
|
|
|
fi
|
|
|
|
|
exit 1
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 初始化默认参数值
|
|
|
|
|
variants= # 存储其他未指定参数
|
|
|
|
|
fronthaul_option="cpri" # 默认前传接口(CPRI)
|
|
|
|
|
backhaul_option="tmac" # 默认回传接口(TMAC)
|
|
|
|
|
cache_option="no" # 默认不启用缓存
|
|
|
|
|
test_option="no" # 默认不运行测试
|
|
|
|
|
case_id=0 # 默认测试用例ID
|
|
|
|
|
board_option="EVB" # 默认板卡类型为EVB
|
2023-07-12 14:14:31 +08:00
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 获取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标签(用于版本号)
|
2024-06-18 11:39:08 +08:00
|
|
|
|
if [ -z `git log --decorate -1 | grep -oP '(?<=tag: ).*' | awk '{print substr($1,0)}'` ]
|
2024-05-30 10:38:04 +08:00
|
|
|
|
then
|
2025-05-29 18:42:49 +08:00
|
|
|
|
arm_tag="NULL"; # 如果不存在标签则设为NULL
|
2024-05-30 10:38:04 +08:00
|
|
|
|
else
|
2025-05-29 18:42:49 +08:00
|
|
|
|
arm_tag=`git log --decorate -1 | grep -oP '(?<=tag: ).*' | awk '{print substr($1,0)}'`
|
|
|
|
|
arm_tag=${arm_tag%?} # 去除末尾特殊字符
|
2024-05-30 10:38:04 +08:00
|
|
|
|
fi
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 解析用户输入的参数
|
2023-07-12 14:14:31 +08:00
|
|
|
|
while [[ "$#" > 0 ]]; do
|
|
|
|
|
case $1 in
|
2025-05-29 18:42:49 +08:00
|
|
|
|
--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(必须为数字)
|
2023-07-12 14:14:31 +08:00
|
|
|
|
if [[ ! -z "$2" ]] && [[ -n "$(echo $2 | sed -n " /^[0-9]\+$/p")" ]]; then
|
2025-05-29 18:42:49 +08:00
|
|
|
|
case_id=$2; shift; # 设置测试用例ID
|
2023-07-12 14:14:31 +08:00
|
|
|
|
fi
|
|
|
|
|
shift;;
|
2025-05-29 18:42:49 +08:00
|
|
|
|
--*| -*) usage "unknown option $1"; exit 1;; # 遇到未知选项报错
|
|
|
|
|
*) variants+=" $1"; shift;; # 其他未定义参数存入variants变量
|
2023-07-12 14:14:31 +08:00
|
|
|
|
esac;
|
|
|
|
|
done
|
2025-05-29 18:42:49 +08:00
|
|
|
|
|
|
|
|
|
# 导出环境变量供后续编译使用
|
|
|
|
|
export arm_version=${arm_version} # 版本号
|
|
|
|
|
export arm_tag=${arm_tag} # Git标签
|
|
|
|
|
export arm_build_date=${arm_build_date} # 构建时间
|
|
|
|
|
# 打印版本信息
|
2024-05-17 12:46:35 +08:00
|
|
|
|
printf "#arm_version[%s], arm_tag[%s], arm_build_date:[%s]\n" $arm_version $arm_tag $arm_build_date
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 设置工程根目录和构建目录
|
|
|
|
|
export DIR_ROOT=$(cd `dirname "$0"`;pwd) # 获取脚本所在目录作为根目录
|
|
|
|
|
export BUILD_DIR=${DIR_ROOT}/build # 构建输出目录
|
|
|
|
|
# 清理旧的构建目录并新建
|
2023-07-12 14:14:31 +08:00
|
|
|
|
if [ -d ${BUILD_DIR} ]; then
|
2023-09-26 11:29:28 +08:00
|
|
|
|
rm -rf ${BUILD_DIR}
|
2023-07-12 14:14:31 +08:00
|
|
|
|
fi
|
2023-09-26 11:29:28 +08:00
|
|
|
|
mkdir -p ${BUILD_DIR}
|
2025-05-29 18:42:49 +08:00
|
|
|
|
|
|
|
|
|
# 特殊处理JESD前传接口的编译
|
2023-07-12 14:14:31 +08:00
|
|
|
|
if [[ "${fronthaul_option}" == "jesd" ]]; then
|
2025-05-29 18:42:49 +08:00
|
|
|
|
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} # 当前板卡类型
|
2023-09-26 11:29:28 +08:00
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 编译JESD库和RFIC应用
|
2023-09-26 11:29:28 +08:00
|
|
|
|
echo -e "\n"
|
2025-05-29 18:42:49 +08:00
|
|
|
|
echo "###### 开始编译JESD库和RFIC应用 ######"
|
2023-09-26 11:29:28 +08:00
|
|
|
|
cd ${DIR_ROOT}/driver/rfic
|
2025-05-29 18:42:49 +08:00
|
|
|
|
source ./build.sh # 执行子编译脚本
|
|
|
|
|
# 将生成的库文件和头文件拷贝到指定位置
|
2023-09-26 11:29:28 +08:00
|
|
|
|
cp ${RFIC_DIR}/out/jesd/*.a ${BUILD_DIR}
|
2023-07-21 09:57:43 +08:00
|
|
|
|
cp ${RFIC_DIR}/out/jesd/*.h ${DIR_ROOT}/interface
|
2023-09-26 11:29:28 +08:00
|
|
|
|
cp ${RFIC_DIR}/out/rfic/*.a ${DIR_ROOT}/lib
|
|
|
|
|
cp ${RFIC_DIR}/out/rfic/ucp_api_rfic.h ${RFIC_APP_DIR}/inc/
|
2023-09-25 09:39:45 +08:00
|
|
|
|
cp ${CJSON_DIR}/xzJSON.h ${RFIC_APP_DIR}/inc/
|
2025-05-29 18:42:49 +08:00
|
|
|
|
cp ${RFIC_DIR}/out/app/*.out ${BUILD_DIR} # 拷贝可执行文件
|
2023-07-12 14:14:31 +08:00
|
|
|
|
fi
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 编译TFU驱动
|
2023-12-29 16:48:28 +08:00
|
|
|
|
cd ${DIR_ROOT}/driver/tfu
|
|
|
|
|
source ./build.sh
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 拷贝生成的库文件和头文件
|
2023-12-29 16:48:28 +08:00
|
|
|
|
cp build/libstc.a ${DIR_ROOT}/lib
|
|
|
|
|
cp build/libstc.a ${BUILD_DIR}
|
|
|
|
|
cp stc/inc/stc_drv_api.h ${DIR_ROOT}/interface
|
|
|
|
|
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 编译主程序
|
2023-09-26 11:29:28 +08:00
|
|
|
|
echo -e "\n"
|
2025-05-29 18:42:49 +08:00
|
|
|
|
echo "###### 开始编译主程序和消息传输模块 ######"
|
2023-07-12 14:14:31 +08:00
|
|
|
|
cd ${DIR_ROOT}/
|
2025-05-29 18:42:49 +08:00
|
|
|
|
# 调用make命令,传入所有配置参数
|
2025-05-20 01:51:25 +08:00
|
|
|
|
make cache_option=${cache_option} fronthaul_option=${fronthaul_option} backhaul_option=${backhaul_option} test_option=${test_option} test_id=${case_id}
|
2025-05-29 18:42:49 +08:00
|
|
|
|
|
|
|
|
|
# 清理临时库文件目录
|
2023-07-21 10:04:33 +08:00
|
|
|
|
cd ${DIR_ROOT}/lib
|
2023-09-25 09:39:45 +08:00
|
|
|
|
rm -rf *.*
|