cmake_minimum_required(VERSION 3.2) project(QGroundControl LANGUAGES C CXX) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release;RelWithDebInfo;MinSizeRel;Coverage") set(CMAKE_CXX_STANDARD 14) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) set(CMAKE_INCLUDE_CURRENT_DIR ON) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") add_compile_options(-Wall -Wextra -Wno-address-of-packed-member) endif() # CMake build type # Debug Release RelWithDebInfo MinSizeRel Coverage if (NOT CMAKE_BUILD_TYPE) # default to release with debug symbols set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Build type" FORCE) endif() # Add folder where are supportive functions list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}") message(STATUS "Qt version: ${QT_VERSION}") message(STATUS "Qt spec: ${QT_MKSPEC}") set(COMPANY "Mavlink") set(COPYRIGHT "Copyright (c) 2018 QGroundControl. All rights reserved.") set(IDENTIFIER "io.mavlink.qgroundcontrol") execute_process( COMMAND git submodule update --init WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) execute_process( COMMAND git describe --always --tags OUTPUT_VARIABLE git_tag OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} ) add_definitions( -DQGC_APPLICATION_NAME="QGroundControl" -DQGC_ORG_NAME="QGroundControl.org" -DQGC_ORG_DOMAIN="org.qgroundcontrol" ) message(STATUS "QGroundControl version: ${git_tag}") #============================================================================= # ccache # option(CCACHE "Use ccache if available" ON) find_program(CCACHE_PROGRAM ccache) if (CCACHE AND CCACHE_PROGRAM AND NOT DEFINED ENV{CCACHE_DISABLE}) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}") endif() #============================================================================= # GStreamer # find_package(PkgConfig) pkg_check_modules(GST gstreamer-1.0>=1.14 gstreamer-video-1.0>=1.14 ) if (GST_FOUND) include_directories( ${GST_INCLUDE_DIRS} src/Taisync src/Microhard ) add_definitions( -DQGC_GST_STREAMING -DQGC_GST_TAISYNC_ENABLED -DQGC_GST_MICROHARD_ENABLED ) endif() #============================================================================= # Qt5 # include(Qt5QGCConfiguration) find_package(Qt5 ${QT_VERSION} COMPONENTS Bluetooth Concurrent Core Location Multimedia Network Positioning Quick QuickWidgets OpenGL Sql Svg Test TextToSpeech Widgets Xml REQUIRED HINTS ${QT_LIBRARY_HINTS} ) if(NOT QT_MKSPEC MATCHES "winrt") find_package(Qt5 ${QT_VERSION} COMPONENTS SerialPort REQUIRED HINTS ${QT_LIBRARY_HINTS} ) endif() # Sets the default flags for compilation and linking. include(CompileOptions) # TODO: get qtquick compiler working #qtquick_compiler_add_resources(QGC_RESOURCES ${QGC_RESOURCES} #find_package(Qt5QuickCompiler) include_directories( libs/eigen libs/mavlink/include/mavlink/v2.0 libs/mavlink/include/mavlink/v2.0/ardupilotmega libs/mavlink/include/mavlink/v2.0/common libs/shapelib ) add_subdirectory(libs) add_subdirectory(src) set(QGC_RESOURCES #HackAndroidFileDialog.qrc HackFileDialog.qrc qgcresources.qrc qgroundcontrol.qrc qgcimages.qrc src/FirmwarePlugin/APM/APMResources.qrc src/FirmwarePlugin/PX4/PX4Resources.qrc src/Airmap/airmap.qrc src/Airmap/dummy/airmap_dummy.qrc ) if(BUILD_TESTING) list(APPEND QGC_RESOURCES UnitTest.qrc ) endif() if(ANDROID) add_library(QGroundControl SHARED ${QGC_RESOURCES}) else() add_executable(QGroundControl ${QGC_RESOURCES}) endif() target_link_libraries(QGroundControl PRIVATE qgc) if(BUILD_TESTING) target_link_libraries(QGroundControl PRIVATE Qt5::Test) endif() if(NOT QT_MKSPEC MATCHES "winrt") target_link_libraries(QGroundControl PUBLIC Qt5::SerialPort ) endif() include(QGCDeploy)