Merge branch 'next' into kilrah/companion_sdcard_download
[opentx.git] / CMakeLists.txt
blobf5629bc2dc627089b2a389c8a85c915241fc91e0
1 project(OpenTX)
3 set(VERSION_MAJOR "2")
4 set(VERSION_MINOR "2")
5 set(VERSION_REVISION "0")
6 set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX})
7 set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR})
8 set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX})
9 set(SDCARD_REVISION "0010")
10 set(SDCARD_VERSION  ${VERSION_MAJOR}.${VERSION_MINOR}V${SDCARD_REVISION})
12 cmake_minimum_required(VERSION 2.8)
13 cmake_policy(SET CMP0020 NEW)
14 cmake_policy(SET CMP0023 OLD)
15 if(POLICY CMP0042)
16   cmake_policy(SET CMP0042 NEW)
17 endif()
18 if(POLICY CMP0043)
19   cmake_policy(SET CMP0043 NEW)
20 endif()
21 if(POLICY CMP0054)
22   cmake_policy(SET CMP0054 NEW)
23 endif()
24 if(POLICY CMP0058)
25   cmake_policy(SET CMP0058 NEW)  # for ninja
26 endif()
28 set(CMAKE_COLOR_MAKEFILE ON)
30 set(CMAKE_CXX_STANDARD 11)
32 set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio)
33 set(RADIO_SRC_DIRECTORY ${RADIO_DIRECTORY}/src)
34 set(COMPANION_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/companion/src)
35 set(SIMU_SRC_DIRECTORY ${COMPANION_SRC_DIRECTORY}/simulation)
37 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
38 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
39 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
41 include(Macros)
42 today(DATE)
43 now(TIME)
44 git_id(GIT_STR)
46 message(STATUS "OpenTX ${VERSION} @${GIT_STR}")
48 # options shared by all targets
50 option(APP_CUSTOM_DBG_HANDLER "Use custom message handler for debug output in all Qt apps." ON)
51 set(APP_CUSTOM_DBG_LEVEL "0" CACHE STRING
52   "Debug output level: 0=debug+; 1=info+; 2=warn+; 3=critical+; 4=fatal only.")
53 set(APP_CUSTOM_DBG_SHOW_FILE "DEFAULT" CACHE STRING
54   "Show source file names in debug output. 1/0/DEFAULT (default is ON with DEBUG builds).")
56 option(VERBOSE_CMAKELISTS "Show extra information while processing CMakeLists.txt files." OFF)
57 option(WARNINGS_AS_ERRORS "Treat any compiler warning as an error (adds -Werror flag)." OFF)
59 if(WIN32)
60   set(WIN_EXTRA_LIBS_PATH "C:/Programs" CACHE PATH
61     "Base path to extra libs/headers on Windows (SDL & pthreads folders should be in here).")
62   list(APPEND CMAKE_PREFIX_PATH "${WIN_EXTRA_LIBS_PATH}" "${WIN_EXTRA_LIBS_PATH}/SDL")  # hints for FindSDL
63 endif()
65 find_package(Qt5Core)
66 find_package(Qt5Widgets)
67 find_package(Qt5Xml)
68 find_package(Qt5LinguistTools)
69 find_package(Qt5PrintSupport)
70 find_package(Qt5Multimedia)
71 find_package(Qt5Svg)
73 if(Qt5Core_FOUND)
74   message(STATUS "Qt Version: ${Qt5Core_VERSION}")
76   ### Get locations of Qt binary executables & libs (libs are for distros, not for linking)
77   # first set up some hints
78   get_target_property(QtCore_LOCATION Qt5::Core LOCATION)
79   get_filename_component(qt_core_path ${QtCore_LOCATION} PATH)
80   if(APPLE)
81     get_filename_component(qt_core_path "${qt_core_path}/.." ABSOLUTE)
82   endif()
84   set(QT_LIB_DIR ${qt_core_path} CACHE PATH "Path to Qt libraries (.dll|.framework|.so).")
85   find_path(QT_BIN_DIR NAMES "qmake" "qmake.exe" HINTS "${CMAKE_PREFIX_PATH}/bin" "${qt_core_path}/../bin" "${qt_core_path}" DOC "Path to Qt binaries (qmake, lupdate, etc.).")
86   find_program(QT_QMAKE_EXECUTABLE qmake HINTS "${QT_BIN_DIR}" DOC "Location of qmake program.")
87   find_program(QT_LUPDATE_EXECUTABLE lupdate HINTS "${QT_BIN_DIR}" DOC "Location of Qt's 'lupdate' program for updating translation files.")
89   # Try to find Qt translations
90   if(QT_QMAKE_EXECUTABLE)
91     execute_process(
92       COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_TRANSLATIONS
93       OUTPUT_VARIABLE qt_translations_hint
94       OUTPUT_STRIP_TRAILING_WHITESPACE
95       )
96   endif()
97   find_path(QT_TRANSLATIONS_DIR NAMES "qt_en.qm" HINTS "${qt_translations_hint}" DOC "Path to prebuilt Qt translations (qt_*.qm).")
99   ### Common definitions for the Qt-based apps
100   list(APPEND APP_COMMON_DEFINES -DSIMU)
101   list(APPEND APP_COMMON_DEFINES -DQXT_STATIC)
102   list(APPEND APP_COMMON_DEFINES -DQT_USE_QSTRINGBUILDER)  # more efficient QString construction using % operator
104   if(APP_CUSTOM_DBG_HANDLER)
105     # provide full qDebug log context to our custom handler. This may also affect libsimulator, which is why it is here
106     list(APPEND APP_COMMON_DEFINES -DQT_MESSAGELOGCONTEXT)
107     list(APPEND APP_COMMON_DEFINES -DAPP_DBG_HANDLER_ENABLE=1)
108     if(APP_CUSTOM_DBG_LEVEL GREATER -1 AND APP_CUSTOM_DBG_LEVEL LESS 5)
109       list(APPEND APP_COMMON_DEFINES -DAPP_DBG_HANDLER_DEFAULT_LEVEL=${APP_CUSTOM_DBG_LEVEL})
110     endif()
111     if(NOT APP_CUSTOM_DBG_SHOW_FILE STREQUAL "DEFAULT" AND (APP_CUSTOM_DBG_SHOW_FILE STREQUAL "1" OR APP_CUSTOM_DBG_SHOW_FILE STREQUAL "0"))
112       list(APPEND APP_COMMON_DEFINES -DAPP_DBG_HANDLER_SHOW_SRC_PATH=${APP_CUSTOM_DBG_SHOW_FILE})
113     endif()
114   else()
115     list(APPEND APP_COMMON_DEFINES -DAPP_DBG_HANDLER_ENABLE=0)
116   endif()
118 else()
119   message(WARNING "Qt not found! Companion and Simulator builds disabled.")
120 endif()
122 if(NOT WIN32)
123   find_package(Fox QUIET)  # QUIET not working on WIN32?
124   if (FOX_FOUND)
125     message(STATUS "Foxlib found at ${FOX_LIBRARY}")
126   else() # if(NOT WIN32)
127     message("Libfox not found, simu target will not be available")
128   endif()
129 endif()
131 if(Qt5Core_FOUND OR FOX_FOUND)
132   set(SDL_BUILDING_LIBRARY YES)  # this prevents FindSDL from appending SDLmain lib to the results, which we don't want
133   find_package("SDL")
134   if(SDL_FOUND)
135     message(STATUS "SDL Lib: ${SDL_LIBRARY}; Headers: ${SDL_INCLUDE_DIR}; Version: ${SDL_VERSION_STRING}")
136   else()
137     message(STATUS "SDL not found! Simulator audio, and joystick inputs, will not work.")
138   endif()
139 endif()
141 # Check for a file that is typically left from a OpenTX 2.1 build and abort if found
142 if (EXISTS ${RADIO_SRC_DIRECTORY}/stamp.h OR EXISTS ${RADIO_SRC_DIRECTORY}/translations/en.h)
143    message(FATAL_ERROR "Source directory contains files leftover from a OpenTX 2.1 build. Please run `git clean -f` in source directory (Careful: Will remove any extra files) or do a new clean git checkout")
144 endif()
146 # Windows-specific includes and libs shared by sub-projects
147 if(WIN32)
148   list(APPEND WIN_INCLUDE_DIRS "${RADIO_SRC_DIRECTORY}/thirdparty/windows/dirent")
149   if(MSVC)
150     list(APPEND WIN_INCLUDE_DIRS "${RADIO_SRC_DIRECTORY}/thirdparty/windows/msinttypes")
151     set(WIN_PTHREAD_BASE_PATH "${WIN_EXTRA_LIBS_PATH}/pthreads/Pre-built.2" CACHE PATH "Where to find pthreads include and lib folders.")
152     list(APPEND WIN_INCLUDE_DIRS "${WIN_PTHREAD_BASE_PATH}/include")
153     find_file(WIN_PTHREAD_LIB pthreadVC2.lib PATHS "${WIN_PTHREAD_BASE_PATH}" PATH_SUFFIXES lib/x86 lib NO_DEFAULT_PATH)
154     find_file(WIN_PTHREAD_DLL pthreadVC2.dll PATHS "${WIN_PTHREAD_BASE_PATH}" PATH_SUFFIXES lib/x86 lib dll/x86 dll NO_DEFAULT_PATH)
155     if(WIN_PTHREAD_LIB)
156       list(APPEND WIN_LINK_LIBRARIES "${WIN_PTHREAD_LIB}")
157     else()
158       message(SEND_ERROR "pthreadVC2.lib not found!")
159     endif()
160   else()
161     set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
162     set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES OFF)
163     set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
164     set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES OFF)
165   endif()
166 endif()
168 add_subdirectory(${RADIO_SRC_DIRECTORY})
170 if(Qt5Core_FOUND)
171   add_subdirectory(${COMPANION_SRC_DIRECTORY})
172 endif()