Files
NanoKVM-MIRROR/support/sg2002/build
916BGAI 4b54fc4768 refactor(video): use Sophgo SDK for H.264 and MJPEG
Use per-codec capture locks and encoder backpressure, simplify frame ownership, and follow HDMI input dimensions. Refresh prebuilt video libraries while preserving server-only builds and deployment instructions.
2026-11-04 14:57:49 +08:00

203 lines
5.9 KiB
Bash
Executable File

#!/bin/bash
export MAIXCDK_PATH=~/MaixCDK
export NanoKVM_PATH=~/NanoKVM
Project_Name="None"
Project_PATH="None"
Project_Action="None"
KVMAPP_PATH="$NanoKVM_PATH/kvmapp"
maixcdk_build() {
local input_value="$1"
DIST_PATH="./dist"
rm -rf $DIST_PATH
if [ "$input_value" = "from_zero" ]
then
maixcdk build <<EOF
2
EOF
else
maixcdk build
fi
}
build_kvm_mmf() {
local component="$NanoKVM_PATH/support/sg2002/additional/kvm_mmf"
local middleware="${SOPHGO_MIDDLEWARE_DIR:-$MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware}"
local runtime="${SOPHGO_RUNTIME_DIR:-$NanoKVM_PATH/server/dl_lib}"
local build_dir="$Project_PATH/build/kvm_mmf-build"
export KVM_MMF_PREFIX="$Project_PATH/build/kvm_mmf-install"
cmake -S "$component" -B "$build_dir" \
-DCMAKE_TOOLCHAIN_FILE="$component/cmake/riscv64-musl.cmake" \
-DSOPHGO_MIDDLEWARE_DIR="$middleware" -DSOPHGO_RUNTIME_DIR="$runtime" \
-DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$KVM_MMF_PREFIX" || return 1
cmake --build "$build_dir" --parallel || return 1
cmake --install "$build_dir" || return 1
}
update_components() {
cp -rf "$NanoKVM_PATH/support/sg2002/additional/kvm" "$MAIXCDK_PATH/components/" || return 1
cp -rf "$NanoKVM_PATH/support/sg2002/additional/kvm_mmf" "$MAIXCDK_PATH/components/" || return 1
cp -f "$NanoKVM_PATH/support/sg2002/additional/peripheral/port/maixcam/maix_i2c.cpp" \
"$MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp" || return 1
cp -f "$NanoKVM_PATH/support/sg2002/additional/sophgo-middleware/v2/sample/common/sample_common_sensor.c" \
"$MAIXCDK_PATH/components/3rd_party/sophgo-middleware/sophgo-middleware/v2/sample/common/" || return 1
}
chack_build(){
DIST_PATH="./dist"
if [ -d "$DIST_PATH" ]
then
echo "SUCCESS"
else
echo "FAILURE"
fi
}
maixcdk_clean(){
maixcdk distclean
maixcdk clean
}
case "$1" in
update_lib)
update_components || exit 1
echo -e "\e[36m[build] \e[32mupdate_lib ok!\e[0m"
exit 0
;;
kvm_system)
Project_Name="kvm_system"
Project_PATH="$NanoKVM_PATH/support/sg2002/kvm_system"
echo -e "\e[36m[build] \e[32mProject: kvm_system \e[0m"
;;
kvm_vision)
Project_Name="kvm_vision"
Project_PATH="$NanoKVM_PATH/support/sg2002/kvm_vision_test"
echo -e "\e[36m[build] \e[32mProject: kvm_vision \e[0m"
;;
*)
echo -e "\e[36m[build] \e[31mInvalid project name \e[0m"
echo -e "\e[36m[build] \e[32mPlease select a project:\e[0m"
echo -e "0: kvm_system"
echo -e "1: kvm_vision"
while true; do
read -p "Please enter 0 or 1 : " input
if [[ "$input" -eq 0 ]]
then
Project_Name="kvm_system"
Project_PATH="$NanoKVM_PATH/support/sg2002/kvm_system"
break
elif [[ "$input" -eq 1 ]]
then
Project_Name="kvm_vision"
Project_PATH="$NanoKVM_PATH/support/sg2002/kvm_vision_test"
break
else
echo -e "\e[36m[build] \e[31mInvalid Index \e[0m"
fi
done
esac
if [ -z "$2" ]
then
Project_Action="build"
else
Project_Action=$2
fi
if [ ! "$Project_Name" = "None" ]
then
case "$Project_Action" in
build)
# echo -e "\e[36m[build] \e[32mStart using MaixCDK to compile kvm_system...\e[0m"
JSON_PATH="$Project_PATH/build/config/project_vars.json"
Platform_Char="\"PLATFORM\": \"maixcam\""
if [ ! -e "$MAIXCDK_PATH/components/kvm" ]
then
echo -e "\e[36m[build] \e[32mDetected that the library has not been modified; first, move the library\e[0m"
mkdir $NanoKVM_PATH/support/sg2002/additional/original
# mv $MAIXCDK_PATH/components/maixcam_lib $NanoKVM_PATH/support/sg2002/additional/original
mv -f $MAIXCDK_PATH/components/peripheral/port/maixcam/maix_i2c.cpp $NanoKVM_PATH/support/sg2002/additional/original
echo -e "\e[36m[build] \e[32mMove the library completed!\e[0m"
fi
update_components || exit 1
cd "$Project_PATH"
if [ -f "$JSON_PATH" ] && ! grep -q "$Platform_Char" "$JSON_PATH"; then
maixcdk_clean || exit 1
fi
if [ "$Project_Name" = "kvm_vision" ]; then
build_kvm_mmf || exit 1
fi
if [ -f "$JSON_PATH" ]
then
maixcdk_build
else
maixcdk_build "from_zero"
fi
RES=$(chack_build)
if [ "$RES" = "SUCCESS" ]
then
echo -e "\e[36m[build] \e[32mBuild completed! Use \e[34m./build $Project_Name add_to_kvmapp\e[32m to add it to kvmapp.\e[0m"
else
echo -e "\e[36m[build] \e[31mBuild Error!\e[0m"
exit 1
fi
;;
clean)
cd $Project_PATH
maixcdk_clean
echo -e "\e[36m[build] \e[32m$Project_Name cleanup completed!\e[0m"
;;
add_to_kvmapp)
if [ "$Project_Name" = "kvm_system" ]
then
SOURCE_PATH="$Project_PATH/dist/kvm_system_release/kvm_system"
TARGET_PATH="$KVMAPP_PATH/kvm_system"
chmod +x $SOURCE_PATH
else
SOURCE_PATH="$Project_PATH/dist/kvm_vision_test_release/dl_lib"
TARGET_PATH="$KVMAPP_PATH/server/"
fi
if [ ! -d $TARGET_PATH ]
then
mkdir -p $TARGET_PATH
fi
if [ -e $SOURCE_PATH ]
then
cp -rf $SOURCE_PATH $TARGET_PATH
if [ "$Project_Name" = "kvm_system" ]
then
echo -e "\e[36m[build] \e[32mkvm_system has been moved to kvmapp.\e[0m"
else
echo -e "\e[36m[build] \e[32mkvm_vision has been moved to kvmapp.\e[0m"
fi
else
echo -e "\e[36m[build] \e[31mThe source file does not exist. Please compile using \e[34m./build kvm_system \e[31mfirst.\e[0m"
exit 1
fi
;;
*)
echo -e "\e[36m[build] \e[31mInvalid Action: \e[34m$2 \e[0m"
echo -e "\e[36m[build] \e[31mUsage: $0 [Project Name]{kvm_system|kvm_vision} [Action]{-/build|clean|add_to_kvmapp} e.g. \e[34m./build kvm_system clean \e[0m"
exit 1
esac
else
echo -e "\e[36m[build] \e[31mInvalid Name \e[0m"
exit 1
fi