106 lines
3.3 KiB
Bash
Executable File
106 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
echo "XOS_DIR: $1"
|
|
XOS_DIR=$1
|
|
XOS_BUILD_MODULE=$2
|
|
|
|
# job number process
|
|
|
|
XOS_JOBS=1
|
|
# XOS_JOBS=$(echo "$@" | awk -F '-j' '{print $2}' | awk '{print $1}')
|
|
for arg in "$@"; do
|
|
if [[ $arg =~ ^-j[0-9]+$ ]]; then
|
|
XOS_JOBS="${arg#-j}"
|
|
break
|
|
fi
|
|
done
|
|
XOS_JOBS=$((XOS_JOBS))
|
|
[ $XOS_JOBS -le 0 ] && XOS_JOBS=1
|
|
|
|
echo "info:XOS_JOBS: $XOS_JOBS"
|
|
|
|
if [ -z "$XOS_DIR" ]; then
|
|
echo "ERROR!! parameter is not correct !!! "
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$XOS_DIR/.config" ]; then
|
|
echo "ERROR!! no $XOS_DIR/.config, please run 'make menuconfig/project_xxx_defconfig' first"
|
|
exit 1
|
|
fi
|
|
|
|
# unset all env variables if already generated before
|
|
if [ -e "$XOS_DIR/.config.env" ]; then
|
|
# file existed operation
|
|
echo "The file $XOS_DIR/.config.env exists."
|
|
source $XOS_DIR/build/script/unsetenv.sh > $XOS_DIR/.config.env.unset
|
|
fi
|
|
|
|
if [[ $XOS_BUILD_MODULE =~ ^sim(ulator)?$ ]]; then
|
|
export XOS_BUILD_SIMULATOR=1
|
|
TOOLCHAIN_NAME="simulator"
|
|
else
|
|
# 从 .config 文件中提取 CONFIG_TOOLCHAIN_xxxxx=y 的 xxxxx 部分
|
|
TOOLCHAIN_NAME=$(grep "^CONFIG_TOOLCHAIN_" "$XOS_DIR/.config" | grep "=y" | sed -e 's/CONFIG_TOOLCHAIN_//' -e 's/=y//')
|
|
TOOLCHAIN_NAME=$(echo "$TOOLCHAIN_NAME" | tr '[:upper:]' '[:lower:]')
|
|
fi
|
|
export CONFIG_TOOLCHAIN_FILE=${TOOLCHAIN_NAME}
|
|
echo "${CONFIG_TOOLCHAIN_FILE}"
|
|
|
|
# 拼接成 toolchain_xxxxx.cmake
|
|
CMAKE_TOOLCHAIN="toolchain_${TOOLCHAIN_NAME}.cmake"
|
|
|
|
echo "${XOS_DIR}/build/cmake/toolchain/${CMAKE_TOOLCHAIN}"
|
|
|
|
# 检查提取出的 CMake toolchain 文件是否存在
|
|
if [ ! -f "${XOS_DIR}/build/cmake/toolchain/${CMAKE_TOOLCHAIN}" ]; then
|
|
echo "ERROR!! no ${XOS_DIR}/build/cmake/toolchain/${CMAKE_TOOLCHAIN}, please configure CONFIG_TOOLCHAIN_xxxx=y correctly"
|
|
exit 1
|
|
fi
|
|
|
|
# 从 .config 文件中提取 CONFIG_PRODUCT_xxxxx=y 的 xxxxx 部分
|
|
PRODUCT_NAME=$(grep "^CONFIG_PRODUCT_" "${XOS_DIR}/.config" | grep "=y" | sed -e 's/CONFIG_PRODUCT_//' -e 's/=y//')
|
|
PRODUCT_NAME=$(echo "${PRODUCT_NAME}" | tr '[:upper:]' '[:lower:]')
|
|
export CONFIG_XOS_PROJECT_TYPE=${PRODUCT_NAME}
|
|
|
|
# 拼接成 project_xxxxx_defconf
|
|
#CMAKE_PRODUCT_NAME="project_${PRODUCT_NAME}_defconfig"
|
|
CMAKE_DEFCONFIG_NAME=$(grep 'project_.*_defconfig' .config.file | sed 's/.*\(project_.*_defconfig\).*/\1/')
|
|
echo "_cmake2 ${XOS_DIR}/product/${PRODUCT_NAME}/${CMAKE_DEFCONFIG_NAME}"
|
|
|
|
# 检查提取出的 project_xxxx_defconf 文件是否存在
|
|
if [ ! -f "${XOS_DIR}/product/${PRODUCT_NAME}/${CMAKE_DEFCONFIG_NAME}" ]; then
|
|
echo "ERROR!! no ${XOS_DIR}/product/${PRODUCT_NAME}/${CMAKE_DEFCONFIG_NAME}, please configure CONFIG_PRODUCT_xxxx=y correctly"
|
|
exit 1
|
|
fi
|
|
|
|
# 切换到 XOS_DIR 目录
|
|
cd "$XOS_DIR"
|
|
|
|
# 如果没有创建 output 目录
|
|
mkdir -p output
|
|
|
|
#cd output
|
|
# 执行 cmake 命令
|
|
source $XOS_DIR/build/script/config2env.sh > $XOS_DIR/.config.env
|
|
cd output
|
|
|
|
cmake \
|
|
-DXOS_JOBS=$XOS_JOBS \
|
|
-DXOS_BUILD_SIMULATOR=$XOS_BUILD_SIMULATOR \
|
|
-DCMAKE_TOOLCHAIN_FILE="$XOS_DIR/build/cmake/toolchain/$CMAKE_TOOLCHAIN" \
|
|
-DBOARD_DIR=${XOS_DIR}/product/${PRODUCT_NAME} \
|
|
-DCMAKE_DEFCONFIG=${CMAKE_DEFCONFIG_NAME} \
|
|
-DCONF_FILE="${XOS_DIR}/.config" \
|
|
"${XOS_DIR}" \
|
|
-Wno-dev
|
|
|
|
make ${XOS_BUILD_MODULE} -j$XOS_JOBS || exit "$$?"
|
|
|
|
if [[ $XOS_BUILD_MODULE == clean ]]; then
|
|
make baseclean -j$XOS_JOBS || exit "$$?"
|
|
fi
|
|
|
|
if [[ $XOS_BUILD_MODULE == distclean ]]; then
|
|
make basedistclean -j$XOS_JOBS || exit "$$?"
|
|
fi
|