QT += core gui widgets multimedia 3dcore 3drender 3dextras 3dinput 3danimation 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) MODEL_DIR = $$clean_path($$PWD/models) 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) $$files($$MODEL_DIR/*.urdf, true) 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 CMVR_WITH_MSQUIC=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 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 assimp_scene_parser_deployment QMAKE_POST_LINK += $$QMAKE_COPY_DIR $$shell_quote($$shell_path($$MODEL_DIR)) $$shell_quote($$shell_path($$DESTDIR/models)) win32 { QMAKE_POST_LINK += $$escape_expand(\n\t) $$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 =