Skip to content
Snippets Groups Projects
CMakeLists.txt 4.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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()
    
    
    #=============================================================================
    # Compile QML
    #
    option(COMPILE_QML "Pre-compile QML files using the Qt Quick compiler." FALSE)
    add_feature_info(COMPILE_QML COMPILE_QML "Pre-compile QML files using the Qt Quick compiler.")
    if(COMPILE_QML)
        find_package(Qt5QuickCompiler)
    
        set_package_properties(Qt5QuickCompiler PROPERTIES
            DESCRIPTION "Pre-compile QML files using the Qt Quick compiler."
            TYPE OPTIONAL
        )
    endif()
    
    #=============================================================================
    # Debug QML
    #
    option(DEBUG_QML "Build QGroundControl with QML debugging/profiling support." FALSE)
    add_feature_info(DEBUG_QML DEBUG_QML "Build QGroundControl with QML debugging/profiling support.")
    if(DEBUG_QML)
        message(STATUS "To enable the QML debugger/profiler, run with: '-qmljsdebugger=port:1234'")
        add_definitions(-DQMLJSDEBUGGER)
        add_definitions(-DQT_DECLARATIVE_DEBUG)
        add_definitions(-DQT_QML_DEBUG)
    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
    
    #=============================================================================
    # Qt5
    #
    
    include(Qt5QGCConfiguration)
    
    find_package(Qt5 ${QT_VERSION}
    	COMPONENTS
    		Bluetooth
    
    		Concurrent
    		Core
    		Location
    		Multimedia
    		Network
    		Positioning
    		Quick
    		QuickWidgets
    
    		Sql
    		Svg
    		Test
    		TextToSpeech
    		Widgets
    		Xml
    	REQUIRED
    	HINTS
    
    Tomaz Canabrava's avatar
    Tomaz Canabrava committed
    		${QT_LIBRARY_HINTS}
    
    )
    
    if(NOT QT_MKSPEC MATCHES "winrt")
    	find_package(Qt5 ${QT_VERSION}
    		COMPONENTS
    			SerialPort
    		REQUIRED
    		HINTS
    
    Tomaz Canabrava's avatar
    Tomaz Canabrava committed
    			${QT_LIBRARY_HINTS}
    
    # 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
    
    Daniel Agar's avatar
    Daniel Agar committed
    
    	libs/shapelib
    
    add_subdirectory(libs)
    
    add_subdirectory(src)
    
    
    Daniel Agar's avatar
    Daniel Agar committed
    set(QGC_RESOURCES
    	#HackAndroidFileDialog.qrc
    	HackFileDialog.qrc
    	qgcresources.qrc
    	qgroundcontrol.qrc
    
    	src/FirmwarePlugin/APM/APMResources.qrc
    	src/FirmwarePlugin/PX4/PX4Resources.qrc
    	src/Airmap/airmap.qrc
    	src/Airmap/dummy/airmap_dummy.qrc
    
    Daniel Agar's avatar
    Daniel Agar committed
    	)
    
    if(BUILD_TESTING)
    	list(APPEND QGC_RESOURCES
    		UnitTest.qrc
    	)
    endif()
    
    
    if(ANDROID)
    
    Daniel Agar's avatar
    Daniel Agar committed
    	add_library(QGroundControl SHARED ${QGC_RESOURCES})
    
    	add_executable(QGroundControl ${QGC_RESOURCES})
    
    target_link_libraries(QGroundControl PRIVATE qgc)
    
    Daniel Agar's avatar
    Daniel Agar committed
    if(BUILD_TESTING)
            target_link_libraries(QGroundControl PRIVATE Qt5::Test)
    endif()
    
    
    if(NOT QT_MKSPEC MATCHES "winrt")
    	target_link_libraries(QGroundControl
    
    include(QGCDeploy)