152 lines
7.6 KiB
Bash
152 lines
7.6 KiB
Bash
#!/bin/bash
|
||
|
||
# =============================================================================
|
||
# 项目注册表 — 新增项目只需编辑此文件
|
||
# =============================================================================
|
||
#
|
||
# 命令:
|
||
# ./project_release.sh <项目名> 编译 + 打包 + 更新版本(最常用)
|
||
# ./project_pkg_desktop.sh <项目名> 仅打包桌面应用
|
||
# ./project_pkg_service.sh <项目名> 仅打包服务
|
||
# ./project_updateversion.sh <项目名> 仅更新版本号
|
||
# ./buildArmPrj.sh <项目名> 仅编译
|
||
#
|
||
# 格式: "项目名;算法目录名[;key=value;...]"
|
||
#
|
||
# 自动推导(无需手动填写):
|
||
# version_macro 大写(项目名) 例: GrabBag → GRABBAG
|
||
# 桌面 app_dir App/${name}/${name}App 例: App/GrabBag/GrabBagApp
|
||
# 服务 app_dir App/${name}/${name}Server 例: App/BeltTearing/BeltTearingServer
|
||
# 服务 package basename(app_dir) 例: BeltTearingServer
|
||
# 服务 service ${app_dir}/${slug}.service 例: belttearingserver.service
|
||
# 服务 config 存在即自动打包
|
||
# algo_copy glob|AppAlgo/${algo}/Arm/aarch64/*.so|usr/lib
|
||
# device_copy VzNLSDK(非 VzNLSDK 时自动补为 optional)
|
||
#
|
||
# 可选覆盖 (key=value):
|
||
# 通用: app_dir version_macro opencv device_copy(none=不复制) description comment
|
||
# package_depends(DEB Depends 字段,逗号分隔)
|
||
# 桌面: algo_copy extra_copy optional_copy ld_conf
|
||
# 服务: app_dir app_suffix(默认 Server) extra_copy optional_copy
|
||
#
|
||
# 多条 spec: extra_copy 与 optional_copy 支持以英文逗号分隔多条复制规则
|
||
# 例: extra_copy=glob|A/*.so|usr/lib,glob|B/*.so|usr/lib
|
||
# =============================================================================
|
||
|
||
SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
|
||
source "${SCRIPT_DIR}/project_meta.sh"
|
||
|
||
COPY_VZNLSDK="glob|SDK/Device/VzNLSDK/Arm/aarch64/*.so|usr/lib"
|
||
|
||
# 复制编译生成的动态库
|
||
# 说明:项目内部库绝大多数是静态库(CONFIG += staticlib),已在链接阶段
|
||
# 打进可执行文件,运行时不需要 .so。实测各目录产出:
|
||
# Device / Utils / VrNets —— 全为静态库,不产出 .so
|
||
# Module —— 含 3 个动态库(BinocularMarkReceiver /
|
||
# FFMediaStream / WDRemoteReceiver),需随包部署
|
||
COPY_DEVICE_LIBS="globa|GrabBagPrj/buildarm/Device/*/*.so*|usr/lib"
|
||
COPY_MODULE_LIBS="globa|GrabBagPrj/buildarm/Module/*/*.so*|usr/lib"
|
||
COPY_UTILS_LIBS="globa|GrabBagPrj/buildarm/Utils/*/*.so*|usr/lib"
|
||
COPY_VRNETS_LIBS="globa|GrabBagPrj/buildarm/VrNets/*.so*|usr/lib"
|
||
|
||
# 合并编译生成的动态库:当前仅 Module 实际产出 .so。
|
||
# 这些规则走 required(extra_copy),空匹配会导致打包失败,
|
||
# 因此只能收集确实存在 .so 的目录。若将来 Device/Utils/VrNets
|
||
# 某目录新增动态库(CONFIG += shared),把对应 COPY_*_LIBS 追加到下方即可。
|
||
COPY_ALL_BUILD_LIBS="${COPY_MODULE_LIBS}"
|
||
|
||
# ===== 桌面项目 =====
|
||
DESKTOP_PROJECTS=(
|
||
"GrabBag;bagPosition;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"LapWeld;lapWeldDetection;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"Workpiece;workpieceCornerExtraction;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"ParticleSize;particleSizeMeasure;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"ScrewPosition;rodAndBarDetection;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"WorkpieceHole;workpieceHolePositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"DiscHolePose;workpieceHolePositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"TireHolePose;workpieceHolePositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"JiuruiWorkpiecePose;workpieceHolePositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"StatorPosition;motorStatorPosition;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"RodAndBarPosition;rodAndBarDetection;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"RodWeldSeam;rodAndBarDetection;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"HolePitPosition;workpieceHolePositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
"WheelMeasure;wheelArchHeigthMeasure;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"BagThreadPosition;bagThreadPositioning;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS},glob|SDK/Device/gl_linelaser_sdk/aarch64_linux/*.so|usr/lib"
|
||
|
||
"HoleDetection;holeDetection;\
|
||
algo_copy=globa|AppAlgo/holeDetection/arm/release/*.so*|usr/lib;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"TunnelChannel;channelSpaceMeasure;\
|
||
ld_conf=/usr/lib/HCNetSDKCom;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS},globa|SDK/Device/HCNetSDK/Arm64/lib/*.so*|usr/lib;\
|
||
optional_copy=globa|SDK/Device/HCNetSDK/Arm64/lib/HCNetSDKCom/*.so*|usr/lib/HCNetSDKCom"
|
||
|
||
"ParkingSpaceGuide;none;\
|
||
device_copy=globa|SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/*.so*|usr/lib;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS},globa|SDK/poco/Arm/aarch64/lib/libPocoNet.so*|usr/lib,globa|SDK/poco/Arm/aarch64/lib/libPocoFoundation.so*|usr/lib;\
|
||
optional_copy=globa|SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/ThirdParty/*.so*|usr/lib"
|
||
|
||
"WorkpiecePosition;binocularMark;\
|
||
app_dir=App/WorkpieceProject/WorkpiecePositionApp;\
|
||
version_macro=WORKPIECEPOSITION;\
|
||
opencv=opencv480;\
|
||
device_copy=globa|SDK/Device/EpicEye/lib/arm/*.so*|usr/lib;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"WorkpieceSplice;binocularMark;\
|
||
app_dir=App/WorkpieceProject/WorkpieceSpliceApp;\
|
||
version_macro=WORKPIECESPLICE;\
|
||
opencv=opencv480;\
|
||
device_copy=none;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"DroneScrewCtrlApp;none;\
|
||
app_dir=App/DroneScrewbolt/DroneScrewCtrlApp;\
|
||
version_macro=DRONESCREWCTRL;\
|
||
device_copy=none;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS},globa|SDK/ZeroMQ/Arm/aarch64/libzmq.so*|usr/lib;\
|
||
description=DroneScrew Ctrl (board 2)"
|
||
)
|
||
|
||
# ===== 服务项目 =====
|
||
SERVICE_PROJECTS=(
|
||
"BeltTearing;beltTearing;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"BinocularMark;binocularMark;\
|
||
opencv=opencv480;\
|
||
device_copy=glob|SDK/Device/Galaxy/aarch64/lib/armv8/*|usr/lib;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS}"
|
||
|
||
"DroneScrewServer;none;\
|
||
app_dir=App/DroneScrewbolt/DroneScrewServer;\
|
||
version_macro=DRONESCREWSERVER;\
|
||
app_suffix=Server;\
|
||
opencv=opencv450;\
|
||
device_copy=globa|SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/*.so*|usr/lib;\
|
||
extra_copy=${COPY_ALL_BUILD_LIBS},globa|SDK/ZeroMQ/Arm/aarch64/libzmq.so*|usr/lib,file|SDK/mediamtx/arm64/mediamtx|opt/dronescrewserver/bin/mediamtx,file|App/DroneScrewbolt/DroneScrewServer/service/mediamtx_dronescrew.yml|opt/dronescrewserver/etc/mediamtx_dronescrew.yml,file|App/DroneScrewbolt/DroneScrewServer/service/mediamtx-dronescrew.service|opt/dronescrewserver/etc/mediamtx-dronescrew.service,globa|AppAlgo/stereo_bolt_delivery/lib/*.so*|usr/lib,dir|AppAlgo/stereo_bolt_delivery/config|opt/dronescrewserver/config,dir|AppAlgo/stereo_bolt_delivery/calib|opt/dronescrewserver/calib,dir|AppAlgo/stereo_bolt_delivery/weights|opt/dronescrewserver/weights;\
|
||
optional_copy=globa|SDK/Protobuf_3_20/Arm/aarch64/libprotobuf.so*|usr/lib,globa|SDK/Device/MVS/MVS_STD_V3.0.1_251113/MVS-3.0.1_aarch64_20251113/lib/aarch64/ThirdParty/*.so*|usr/lib;\
|
||
description=DroneScrew Server (board 1)"
|
||
)
|
||
|
||
# ===== 执行注册 =====
|
||
_register_desktop_projects
|
||
_register_service_projects
|