CmvrControlStation/CmvrControlStation.pro

302 lines
13 KiB
Prolog
Raw Normal View History

2026-09-18 16:22:20 +08:00
QT += core gui widgets multimedia 3dcore 3drender 3dextras 3dinput
CONFIG += c++14 warn_on debug_and_release
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS _WIN32_WINNT=0x0600
INCLUDE_DIR = $$clean_path($$PWD/include)
LIB_DIR = $$clean_path($$PWD/lib)
TOOLS_DIR = $$clean_path($$PWD/tools)
CERT_DIR = $$clean_path($$PWD/certs)
PROTO_ROOT = $$clean_path($$PWD/protos)
PROTO_GEN_DIR = $$clean_path($$PWD/generated_cpp)
PROTOC = $$TOOLS_DIR/run_protoc.cmd
GRPC_CPP_PLUGIN = $$TOOLS_DIR/grpc_cpp_plugin.exe
MSQUIC_DLL = $$LIB_DIR/msquic.dll
MSQUIC_TEST_CERT = $$CERT_DIR/quic-test-server.pfx
MSQUIC_TEST_CA = $$CERT_DIR/quic-test-ca.crt
RUNTIME_DLLS = $$files($$LIB_DIR/*.dll)
DEMO_URDF = $$clean_path($$PWD/models/demo_arm.urdf)
QT_SCENEPARSER_DIR = $$clean_path($$[QT_INSTALL_PLUGINS]/sceneparsers)
!exists($$PROTOC): error("protoc launcher not found. Run scripts/build_native_deps.ps1 first.")
!exists($$GRPC_CPP_PLUGIN): error("grpc_cpp_plugin.exe not found. Run scripts/build_native_deps.ps1 first.")
!exists($$MSQUIC_DLL): error("msquic.dll not found. Run scripts/install_msquic.ps1 first.")
!exists($$MSQUIC_TEST_CERT): error("QUIC test certificate not found. Run scripts/install_msquic.ps1 first.")
!exists($$MSQUIC_TEST_CA): error("QUIC test CA not found. Run scripts/install_msquic.ps1 first.")
!exists($$INCLUDE_DIR/libavcodec/avcodec.h): error("FFmpeg headers not found in include.")
!exists($$LIB_DIR/avcodec-58.dll): error("FFmpeg runtime DLLs not found in lib.")
!exists($$INCLUDE_DIR/urdf_parser/urdf_parser.h): error("urdfdom headers not found in include.")
!exists($$LIB_DIR/liburdfdom_model.dll.a): error("urdfdom link library not found in lib.")
!exists($$LIB_DIR/liburdfdom_model.dll): error("urdfdom runtime DLL not found in lib.")
PROTO_FILES = \
$$PROTO_ROOT/cmvr/api/common.proto \
$$PROTO_ROOT/cmvr/api/agv_command.proto \
$$PROTO_ROOT/cmvr/api/agv_service.proto \
$$PROTO_ROOT/cmvr/api/arm_command.proto \
$$PROTO_ROOT/cmvr/api/arm_service.proto \
$$PROTO_ROOT/cmvr/api/biohead_command.proto \
$$PROTO_ROOT/cmvr/api/biohead_service.proto \
$$PROTO_ROOT/cmvr/api/camera_command.proto \
$$PROTO_ROOT/cmvr/api/camera_service.proto \
$$PROTO_ROOT/cmvr/api/configuration_command.proto \
$$PROTO_ROOT/cmvr/api/configuration_service.proto \
$$PROTO_ROOT/cmvr/api/dexhand_command.proto \
$$PROTO_ROOT/cmvr/api/dexhand_service.proto \
$$PROTO_ROOT/cmvr/api/hlc_command.proto \
$$PROTO_ROOT/cmvr/api/hlc_service.proto \
$$PROTO_ROOT/cmvr/api/microphone_command.proto \
$$PROTO_ROOT/cmvr/api/microphone_service.proto \
$$PROTO_ROOT/cmvr/api/speaker_command.proto \
$$PROTO_ROOT/cmvr/api/speaker_service.proto \
$$PROTO_ROOT/cmvr/api/system_command.proto \
$$PROTO_ROOT/cmvr/api/system_service.proto \
$$PROTO_ROOT/cmvr/api/test_service.proto
GRPC_PROTO_FILES = \
$$PROTO_ROOT/cmvr/api/agv_service.proto \
$$PROTO_ROOT/cmvr/api/arm_service.proto \
$$PROTO_ROOT/cmvr/api/biohead_service.proto \
$$PROTO_ROOT/cmvr/api/camera_service.proto \
$$PROTO_ROOT/cmvr/api/configuration_service.proto \
$$PROTO_ROOT/cmvr/api/dexhand_service.proto \
$$PROTO_ROOT/cmvr/api/hlc_service.proto \
$$PROTO_ROOT/cmvr/api/microphone_service.proto \
$$PROTO_ROOT/cmvr/api/speaker_service.proto \
$$PROTO_ROOT/cmvr/api/system_service.proto \
$$PROTO_ROOT/cmvr/api/test_service.proto
MSG_PROTO_FILES = \
$$PROTO_ROOT/cmvr/msgs/agv.proto
CONFIG_PROTO_FILES = \
$$PROTO_ROOT/cmvr/config/agv_config/agv_config.proto \
$$PROTO_ROOT/cmvr/config/arm_config/arm_config.proto \
$$PROTO_ROOT/cmvr/config/aubo_robot_config/aubo_robot_config.proto \
$$PROTO_ROOT/cmvr/config/biohead_config/biohead_config.proto \
$$PROTO_ROOT/cmvr/config/camera_config/camera_config.proto \
$$PROTO_ROOT/cmvr/config/cmvr_es_config/cmvr_es_config.proto \
$$PROTO_ROOT/cmvr/config/device_manager_config/device_manager_config.proto \
$$PROTO_ROOT/cmvr/config/dexhand_config/dexhand_config.proto \
$$PROTO_ROOT/cmvr/config/grpc_server_config/grpc_server_config.proto \
$$PROTO_ROOT/cmvr/config/logger_config/logger_config.proto \
$$PROTO_ROOT/cmvr/config/microphone_config/microphone_config.proto \
$$PROTO_ROOT/cmvr/config/motor_config/motor_config.proto \
$$PROTO_ROOT/cmvr/config/quic_edge_config/quic_edge_config.proto \
$$PROTO_ROOT/cmvr/config/self_collision_task_config/self_collision_task_config.proto \
$$PROTO_ROOT/cmvr/config/speaker_config/speaker_config.proto \
$$PROTO_ROOT/cmvr/config/task_manager_config/task_manager_config.proto \
$$PROTO_ROOT/cmvr/config/touch_screen_task_config/touch_screen_task_config.proto
CONFIG_ROOT_PROTO_FILES = \
$$PROTO_ROOT/cmvr/config/cartesian_motion_validation_config.proto \
$$PROTO_ROOT/cmvr/config/joint_limits_config.proto \
$$PROTO_ROOT/cmvr/config/lawba_ik_config.proto \
$$PROTO_ROOT/cmvr/config/pinocchio_dls_ik_config.proto \
$$PROTO_ROOT/cmvr/config/pinocchio_qp_ik_config.proto \
$$PROTO_ROOT/cmvr/config/srs_ik_config.proto \
$$PROTO_ROOT/cmvr/config/touch_screen_algorithm_config.proto \
$$PROTO_ROOT/cmvr/config/touch_screen_common_config.proto
COMMON_PROTO_FILES = \
$$PROTO_ROOT/cmvr/common/geometry.proto
MUJOCO_PROTO_FILES = \
$$PROTO_ROOT/cmvr/config/mujoco_config/mujoco_world_config.proto
QUIC_PROTO_FILES = \
$$PROTO_ROOT/cmvr/quic_edge/v1/quic_edge.proto
# Show the complete local proto tree in Qt Creator without compiling unused APIs.
OTHER_FILES += $$files($$PROTO_ROOT/*.proto, true) $$DEMO_URDF
INCLUDEPATH += \
$$PROTO_GEN_DIR \
$$INCLUDE_DIR \
$$INCLUDE_DIR/urdfdom_headers
protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
protobuf_compiler.input = PROTO_FILES
protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/api/${QMAKE_FILE_BASE}.pb.cc
protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PROTO_ROOT/cmvr/api/${QMAKE_FILE_BASE}.proto)
protobuf_compiler.depends = $$PROTO_FILES $$MSG_PROTO_FILES
protobuf_compiler.variable_out = SOURCES
protobuf_compiler.CONFIG += target_predeps
msg_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
msg_protobuf_compiler.input = MSG_PROTO_FILES
msg_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/msgs/${QMAKE_FILE_BASE}.pb.cc
msg_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PROTO_ROOT/cmvr/msgs/${QMAKE_FILE_BASE}.proto)
msg_protobuf_compiler.depends = $$MSG_PROTO_FILES
msg_protobuf_compiler.variable_out = SOURCES
msg_protobuf_compiler.CONFIG += target_predeps
config_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
config_protobuf_compiler.input = CONFIG_PROTO_FILES
config_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/config/${QMAKE_FILE_BASE}/${QMAKE_FILE_BASE}.pb.cc
config_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PWD/${QMAKE_FILE_IN})
config_protobuf_compiler.depends = $$CONFIG_PROTO_FILES
config_protobuf_compiler.variable_out = SOURCES
config_protobuf_compiler.CONFIG += target_predeps
config_root_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
config_root_protobuf_compiler.input = CONFIG_ROOT_PROTO_FILES
config_root_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/config/${QMAKE_FILE_BASE}.pb.cc
config_root_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PWD/${QMAKE_FILE_IN})
config_root_protobuf_compiler.depends = $$CONFIG_ROOT_PROTO_FILES $$COMMON_PROTO_FILES
config_root_protobuf_compiler.variable_out = SOURCES
config_root_protobuf_compiler.CONFIG += target_predeps
common_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
common_protobuf_compiler.input = COMMON_PROTO_FILES
common_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/common/${QMAKE_FILE_BASE}.pb.cc
common_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PWD/${QMAKE_FILE_IN})
common_protobuf_compiler.depends = $$COMMON_PROTO_FILES
common_protobuf_compiler.variable_out = SOURCES
common_protobuf_compiler.CONFIG += target_predeps
mujoco_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
mujoco_protobuf_compiler.input = MUJOCO_PROTO_FILES
mujoco_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/config/mujoco_config/${QMAKE_FILE_BASE}.pb.cc
mujoco_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PWD/${QMAKE_FILE_IN})
mujoco_protobuf_compiler.depends = $$MUJOCO_PROTO_FILES
mujoco_protobuf_compiler.variable_out = SOURCES
mujoco_protobuf_compiler.CONFIG += target_predeps
grpc_compiler.name = gRPC ${QMAKE_FILE_IN}
grpc_compiler.input = GRPC_PROTO_FILES
grpc_compiler.output = $$PROTO_GEN_DIR/cmvr/api/${QMAKE_FILE_BASE}.grpc.pb.cc
grpc_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --grpc_out=$$quote($$PROTO_GEN_DIR) --plugin=protoc-gen-grpc=$$quote($$GRPC_CPP_PLUGIN) $$quote($$PROTO_ROOT/cmvr/api/${QMAKE_FILE_BASE}.proto)
grpc_compiler.depends = $$PROTO_FILES $$MSG_PROTO_FILES
grpc_compiler.variable_out = SOURCES
grpc_compiler.CONFIG += target_predeps
quic_protobuf_compiler.name = Protobuf ${QMAKE_FILE_IN}
quic_protobuf_compiler.input = QUIC_PROTO_FILES
quic_protobuf_compiler.output = $$PROTO_GEN_DIR/cmvr/quic_edge/v1/${QMAKE_FILE_BASE}.pb.cc
quic_protobuf_compiler.commands = $$quote($$PROTOC) --proto_path=$$quote($$PROTO_ROOT) --cpp_out=$$quote($$PROTO_GEN_DIR) $$quote($$PROTO_ROOT/cmvr/quic_edge/v1/${QMAKE_FILE_BASE}.proto)
quic_protobuf_compiler.depends = $$QUIC_PROTO_FILES
quic_protobuf_compiler.variable_out = SOURCES
quic_protobuf_compiler.CONFIG += target_predeps
QMAKE_EXTRA_COMPILERS += protobuf_compiler msg_protobuf_compiler config_protobuf_compiler config_root_protobuf_compiler common_protobuf_compiler mujoco_protobuf_compiler grpc_compiler quic_protobuf_compiler
ABSL_STATIC_LIBS = $$files($$LIB_DIR/libabsl_*.a)
LIBS += \
-Wl,--start-group \
$$LIB_DIR/libgrpc++.a \
$$LIB_DIR/libgrpc.a \
$$LIB_DIR/libgpr.a \
$$LIB_DIR/libaddress_sorting.a \
$$LIB_DIR/libre2.a \
$$LIB_DIR/libupb.a \
$$LIB_DIR/libcares.a \
$$LIB_DIR/libssl.a \
$$LIB_DIR/libcrypto.a \
$$LIB_DIR/libzlibstatic.a \
$$LIB_DIR/libprotobuf.a \
$$ABSL_STATIC_LIBS \
-Wl,--end-group \
$$LIB_DIR/libavcodec.dll.a \
$$LIB_DIR/libavutil.dll.a \
$$LIB_DIR/libswscale.dll.a \
$$LIB_DIR/liburdfdom_model.dll.a \
-lws2_32 \
-lcrypt32 \
-ladvapi32 \
-lbcrypt \
-ldbghelp \
-liphlpapi \
-lsecur32 \
-lntdll
DEFINES += CMVR_WITH_GRPC=1
CONFIG(debug, debug|release) {
TARGET = CmvrControlStation_d
DESTDIR = $$clean_path($$PWD/bin/debug)
OBJECTS_DIR = build/debug/obj
MOC_DIR = build/debug/moc
RCC_DIR = build/debug/rcc
UI_DIR = build/debug/ui
DEFINES += CMVR_DEBUG_BUILD
ASSIMP_SCENE_PARSER = $$QT_SCENEPARSER_DIR/assimpsceneimportd.dll
} else {
TARGET = CmvrControlStation
DESTDIR = $$clean_path($$PWD/bin/release)
OBJECTS_DIR = build/release/obj
MOC_DIR = build/release/moc
RCC_DIR = build/release/rcc
UI_DIR = build/release/ui
DEFINES += NDEBUG
ASSIMP_SCENE_PARSER = $$QT_SCENEPARSER_DIR/assimpsceneimport.dll
}
!exists($$ASSIMP_SCENE_PARSER): error("Qt3D Assimp scene parser not found in the selected Qt Kit.")
SOURCES += \
src/audiostreammanager.cpp \
src/configeditorwidget.cpp \
src/main.cpp \
src/mainwindow.cpp \
src/mainwindow_ui.cpp \
src/quictestserver.cpp \
src/rpcservicewidget.cpp \
src/robotclient.cpp \
src/trendwidget.cpp \
src/urdfviewerwidget.cpp \
src/videodecoder.cpp \
src/videorenderwidget.cpp \
ui/handeyecalibrationwidget.cpp
HEADERS += \
src/audiostreammanager.h \
src/configeditorwidget.h \
src/mainwindow.h \
src/quictestserver.h \
src/rpcservicewidget.h \
src/robotclient.h \
src/trendwidget.h \
src/uiicons.h \
src/urdfviewerwidget.h \
src/videodecoder.h \
src/videoframe.h \
src/videorenderwidget.h \
ui/handeyecalibrationwidget.h
FORMS += \
ui/handeyecalibrationwidget.ui \
ui/mainwindow.ui \
ui/systemservicepage.ui \
ui/armservicepage.ui \
ui/cameraservicepage.ui \
ui/agvservicepage.ui \
ui/agvstatusdialog.ui \
ui/audioservicepage.ui \
ui/quicserverpage.ui \
ui/diagnosticspage.ui \
ui/rpcservicewidget.ui
RESOURCES += resources.qrc
runtime_library_deployment.files = $$RUNTIME_DLLS
runtime_library_deployment.path = $$DESTDIR
quic_certificate_deployment.files = $$MSQUIC_TEST_CERT
quic_certificate_deployment.path = $$DESTDIR
quic_ca_deployment.files = $$MSQUIC_TEST_CA
quic_ca_deployment.path = $$DESTDIR
demo_urdf_deployment.files = $$DEMO_URDF
demo_urdf_deployment.path = $$DESTDIR/models
assimp_scene_parser_deployment.files = $$ASSIMP_SCENE_PARSER
assimp_scene_parser_deployment.path = $$DESTDIR/sceneparsers
COPIES += runtime_library_deployment quic_certificate_deployment quic_ca_deployment demo_urdf_deployment assimp_scene_parser_deployment
win32 {
QMAKE_POST_LINK += $$QMAKE_COPY_FILE $$shell_quote($$shell_path($$MSQUIC_TEST_CERT)) $$shell_quote($$shell_path($$DESTDIR/quic-test-server.pfx))
QMAKE_POST_LINK += $$escape_expand(\n\t) $$QMAKE_COPY_FILE $$shell_quote($$shell_path($$MSQUIC_TEST_CA)) $$shell_quote($$shell_path($$DESTDIR/quic-test-ca.crt))
}
win32:RC_ICONS =