add wust typr mpc and mutipule x
This commit is contained in:
161
wust_vision-main/run.sh
Executable file
161
wust_vision-main/run.sh
Executable file
@@ -0,0 +1,161 @@
|
||||
#!/bin/bash
|
||||
|
||||
WORK_DIR="$(dirname "$(realpath "${BASH_SOURCE[0]}")")"
|
||||
BUILD_DIR="$WORK_DIR/build"
|
||||
CONFIG_DIR="$WORK_DIR/config"
|
||||
BIN_DIR="$WORK_DIR/bin"
|
||||
source "$WORK_DIR/env.bash"
|
||||
export VISION_ROOT="$WORK_DIR"
|
||||
export MVCAM_SDK_PATH=/opt/MVS
|
||||
export MVCAM_COMMON_RUNENV=/opt/MVS/lib
|
||||
export MVCAM_GENICAM_CLPROTOCOL=/opt/MVS/lib/CLProtocol
|
||||
export ALLUSERSPROFILE=/opt/MVS/MVFG
|
||||
export LD_LIBRARY_PATH=/opt/MVS/lib/64:/opt/MVS/lib/32:$LD_LIBRARY_PATH
|
||||
blue="\033[1;34m"
|
||||
yellow="\033[1;33m"
|
||||
reset="\033[0m"
|
||||
red="\033[1;31m"
|
||||
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
|
||||
COPY_BASHRC="$WORK_DIR/user_bashrc_copy.bash"
|
||||
|
||||
if [ -f "$USER_HOME/.bashrc" ]; then
|
||||
# 复制 bashrc 到 WORK_DIR,并删除前10行
|
||||
tail -n +11 "$USER_HOME/.bashrc" > "$COPY_BASHRC"
|
||||
# 设置权限,普通用户可读
|
||||
chmod 644 "$COPY_BASHRC"
|
||||
chown $SUDO_USER:$SUDO_USER "$COPY_BASHRC"
|
||||
|
||||
echo -e "${yellow}Copied ~/.bashrc to $COPY_BASHRC with first 10 lines removed${reset}"
|
||||
|
||||
# 加载复制的 bashrc
|
||||
source "$COPY_BASHRC"
|
||||
echo -e "${yellow}Loaded bashrc from copy${reset}"
|
||||
else
|
||||
echo -e "${red}Original ~/.bashrc not found: $USER_HOME/.bashrc${reset}"
|
||||
source "$COPY_BASHRC"
|
||||
fi
|
||||
else
|
||||
# 普通用户直接加载原 bashrc
|
||||
if [ -f "$HOME/.bashrc" ]; then
|
||||
source "$HOME/.bashrc"
|
||||
echo -e "${yellow}Loaded bashrc from $HOME/.bashrc${reset}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
chmod 777 /dev/shm/debug_frame
|
||||
|
||||
|
||||
rm -rf "$BIN_DIR/config"
|
||||
ln -sf "$CONFIG_DIR" "$BIN_DIR/config"
|
||||
ln -sf "$WORK_DIR/env.bash" "$BUILD_DIR/env.bash"
|
||||
|
||||
if [ "$1" == "rebuild" ]; then
|
||||
echo -e "${yellow}<--- Rebuilding: This will REMOVE the entire build directory --->${reset}"
|
||||
read -p "Are you sure you want to rebuild? [y/N]: " confirm
|
||||
confirm=${confirm,,}
|
||||
if [[ "$confirm" != "y" && "$confirm" != "yes" ]]; then
|
||||
echo -e "${red}Rebuild cancelled.${reset}"
|
||||
exit 0
|
||||
fi
|
||||
echo -e "${yellow}<--- Removing build directory --->${reset}"
|
||||
rm -rf "$BUILD_DIR"
|
||||
mkdir -p "$BUILD_DIR"
|
||||
else
|
||||
mkdir -p "$BUILD_DIR"
|
||||
fi
|
||||
|
||||
if [[ "$1" == "build" || "$1" == "rebuild" || "$1" == "run" ]]; then
|
||||
|
||||
echo -e "${yellow}<--- Start CMake (Ninja) --->${reset}"
|
||||
cmake -S "$WORK_DIR" -B "$BUILD_DIR" \
|
||||
-G Ninja \
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}\n--- CMake Failed ---${reset}"
|
||||
exit 1
|
||||
fi
|
||||
SECONDS=0
|
||||
echo -e "${yellow}\n<--- Start Ninja Build --->${reset}"
|
||||
ninja -C "$BUILD_DIR"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "${red}\n--- Ninja Build Failed ---${reset}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
build_time=$SECONDS
|
||||
printf "${blue}\n<--- Build Time --->\n %02d:%02d (mm:ss)\n${reset}" \
|
||||
$((build_time / 60)) $((build_time % 60))
|
||||
echo -e "${yellow}\n<--- Total Lines --->${reset}"
|
||||
total=$(find "$WORK_DIR" \
|
||||
-type d \( \
|
||||
-path "$BUILD_DIR" -o \
|
||||
-path "$WORK_DIR/model" -o \
|
||||
-path "$WORK_DIR/3rdparty" -o \
|
||||
-path "$WORK_DIR/.cache" \
|
||||
\) -prune -o \
|
||||
-type f \( \
|
||||
-name "*.cpp" -o -name "*.hpp" -o -name "*.c" -o -name "*.h" \
|
||||
-o -name "*.py" -o -name "*.html" -o -name "*.sh" -o -name "*.md" \
|
||||
-o -name "*.yaml" -o -name "*.json" -o -name "*.css" -o -name "*.js" \
|
||||
-o -name "*.cu" -o -name "*.txt" \
|
||||
\) -exec wc -l {} + | awk 'END{print $1}')
|
||||
echo -e "${blue} $total${reset}"
|
||||
|
||||
# Only build
|
||||
if [ "$1" == "build" ] || [ "$1" == "rebuild" ]; then
|
||||
echo -e "${yellow}\n<--- Only building --->${reset}"
|
||||
echo -e "${yellow}<----- OVER ----->${reset}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run mode
|
||||
if [ "$1" == "run" ]; then
|
||||
echo -e "${yellow}\n<--- Running WUST_VISION --->${reset}"
|
||||
RUN_PROGRAM="$BIN_DIR/$2"
|
||||
sudo pkill -9 $2
|
||||
ORIGINAL_ARGS=("$@")
|
||||
shift 2
|
||||
|
||||
"$RUN_PROGRAM" "$@"
|
||||
RET=$?
|
||||
set -- "${ORIGINAL_ARGS[@]}"
|
||||
|
||||
if [ $RET -ne 0 ]; then
|
||||
echo -e "${red}\n--- Program crashed, running guard.sh ---${reset}"
|
||||
|
||||
pkill "$2"
|
||||
timeout=10
|
||||
while pgrep "$2" > /dev/null; do
|
||||
sleep 0.5
|
||||
timeout=$((timeout - 1))
|
||||
if [ $timeout -le 0 ]; then
|
||||
echo "$2 did not exit after 10 seconds, forcing kill"
|
||||
pkill -9 "$2"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
GUARD_SCRIPT="$CONFIG_DIR/guard.sh"
|
||||
TARGET_PATH="$RUN_PROGRAM"
|
||||
|
||||
if [ ! -f "$GUARD_SCRIPT" ]; then
|
||||
echo -e "${red}guard.sh not found: $GUARD_SCRIPT${reset}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${yellow}Starting guard.sh ...${reset}"
|
||||
exec "$GUARD_SCRIPT" "$TARGET_PATH" "$@"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "${yellow}<----- OVER ----->${reset}"
|
||||
|
||||
else
|
||||
echo -e "${yellow}Warning:${reset} Invalid argument '$1'."
|
||||
echo -e "${yellow}Usage:${reset} $0 {build|rebuild|run <program> [args...]}"
|
||||
echo -e "${yellow}No action performed.${reset}"
|
||||
exit 0
|
||||
fi
|
||||
Reference in New Issue
Block a user