1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 11:29:51 +03:00

Build system updates, including -Werror on TravisCI (#4202)

* [TravisCI] Build using avr-gcc 4.9.2 (up from 4.8.2). Relies on https://github.com/opentx/opentx/pull/4169 . Fixes all linker warnings, makes clean build.

* [build] Add ARM/AVR compiler version check/display and a workaround for avr-gcc linker warnings when using WARNINGS_AS_ERRORS=true.

* [TravisCI] Enable -Werror on all build targets (WARNINGS_AS_ERRORS=true).

* [build] CMake script updates:
  Enable WARNINGS_AS_ERRORS option for all targets (not just firmware);
  Consolidate some C/CXX flag settings for firmware target, avoid duplication/redundancy;
  All warning flags are now passed to linker (GCC only);
  Add a "build report" for each main target showing compiler, flags, and defines, with verbosity controlled by new VERBOSE_CMAKELISTS option;
  Added properties to PCB, TRANSLATIONS, and a few other options (makes option selector lists in cmake-gui);
  Add macro for conditionally adding C++11 flag;
  Silence CMake >3.0 warnings about CMP0054 policy not being set;
  Reverts AVR linker -Werror workaround;
  Misc. cleanup/consolidation.

* [build] More CMakeLists updates:
  Silence superfluous "CRT_SECURE" series MSVC warnings;
  Formalize finding pthread lib/dll on MSVC builds and fix some issues with install target script;
  Add property string lists to more options;
  Quotes some paths with possible spaces, & other minor cosmetics.

* [build] firmware/bootloader: Remove remaining CMake default compiler flags and add FIRMWARE_C[XX}_FLAGS[_DEBUG] options for user to specify additional flags. Also move ASM language call to silence CMake warning w/MSVC.

* [build] Workaround bogus "uninitialized" warnings from AVR linker.

* [tests] Add custom printer for less verbose gtest output (use --verbose option to revert to gtest default).

* [build] Use less verbose CMake output for TravisCI builds. Formalize search for gtest code and enable gtests target on WIN32-GCC. Minor language fix.
This commit is contained in:
Max Paperno 2017-01-08 03:44:33 -05:00 committed by Bertrand Songis
parent 54742fcad9
commit 1f788723f9
15 changed files with 387 additions and 173 deletions

View file

@ -15,13 +15,11 @@ before_install:
- sudo apt-get update -qq - sudo apt-get update -qq
install: install:
- sudo apt-get --yes --force-yes install qtbase5-dev qtmultimedia5-dev qttools5-dev qttools5-dev-tools python3-pyqt5 curl gcc-arm-none-eabi libfox-1.6-dev libgtest-dev - sudo apt-get --yes --force-yes install qtbase5-dev qtmultimedia5-dev qttools5-dev qttools5-dev-tools python3-pyqt5 curl gcc-arm-none-eabi libmpfr4 libmpc3 libfox-1.6-dev libgtest-dev
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb - wget --quiet https://launchpad.net/ubuntu/+source/gcc-avr/1:4.9.2+Atmel3.5.0-1/+build/8403710/+files/gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpfr4_3.1.2-1_amd64.deb - wget --quiet https://launchpad.net/ubuntu/+source/avr-libc/1:1.8.0+Atmel3.5.0-1/+build/8435473/+files/avr-libc_1.8.0+Atmel3.5.0-1_all.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb - wget --quiet https://launchpad.net/ubuntu/+source/binutils-avr/2.25+Atmel3.5.0-2/+build/8435474/+files/binutils-avr_2.25+Atmel3.5.0-2_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb - sudo dpkg --install gcc-avr_4.9.2+Atmel3.5.0-1_amd64.deb avr-libc_1.8.0+Atmel3.5.0-1_all.deb binutils-avr_2.25+Atmel3.5.0-2_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpc3_1.0.1-1ubuntu1_amd64.deb
- sudo dpkg --install gcc-avr_1%3a4.8-2.1_amd64.deb avr-libc_1%3a1.8.0-4.1_all.deb libmpfr4_3.1.2-1_amd64.deb binutils-avr_2.23.1-2.1_amd64.deb libmpc3_1.0.1-1ubuntu1_amd64.deb
script: script:
- ./tools/commit-tests.sh - ./tools/commit-tests.sh

View file

@ -20,6 +20,9 @@ endif()
if(POLICY CMP0043) if(POLICY CMP0043)
cmake_policy(SET CMP0043 NEW) cmake_policy(SET CMP0043 NEW)
endif() endif()
if(POLICY CMP0054)
cmake_policy(SET CMP0054 NEW)
endif()
set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_COLOR_MAKEFILE ON)
@ -28,11 +31,15 @@ set(CMAKE_CXX_STANDARD 11)
set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio) set(RADIO_DIRECTORY ${PROJECT_SOURCE_DIR}/radio)
set(RADIO_SRC_DIRECTORY ${RADIO_DIRECTORY}/src) set(RADIO_SRC_DIRECTORY ${RADIO_DIRECTORY}/src)
set(COMPANION_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/companion/src) set(COMPANION_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/companion/src)
set(SIMU_SRC_DIRECTORY ${COMPANION_SRC_DIRECTORY}/simulation)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
# options shared by all targets
option(VERBOSE_CMAKELISTS "Show extra information while processing CMakeLists.txt files." OFF)
option(WARNINGS_AS_ERRORS "Treat any compiler warning as an error (adds -Werror flag)." OFF)
if(WIN32) if(WIN32)
set(WIN_EXTRA_LIBS_PATH "C:/Programs" CACHE PATH set(WIN_EXTRA_LIBS_PATH "C:/Programs" CACHE PATH
"Base path to extra libs/headers on Windows (SDL, dirent, pthreads, msinttypes folders should be in here).") "Base path to extra libs/headers on Windows (SDL, dirent, pthreads, msinttypes folders should be in here).")
@ -81,8 +88,19 @@ if(WIN32)
if(MSVC) if(MSVC)
set(WIN_PTHREAD_BASE_PATH "${WIN_EXTRA_LIBS_PATH}/pthreads/Pre-built.2") set(WIN_PTHREAD_BASE_PATH "${WIN_EXTRA_LIBS_PATH}/pthreads/Pre-built.2")
list(APPEND WIN_INCLUDE_DIRS "${WIN_PTHREAD_BASE_PATH}/include" "${WIN_EXTRA_LIBS_PATH}/msinttypes") list(APPEND WIN_INCLUDE_DIRS "${WIN_PTHREAD_BASE_PATH}/include" "${WIN_EXTRA_LIBS_PATH}/msinttypes")
list(APPEND WIN_LINK_LIBRARIES "${WIN_PTHREAD_BASE_PATH}/lib/pthreadVC2.lib") find_file(WIN_PTHREAD_LIB pthreadVC2.lib PATHS "${WIN_PTHREAD_BASE_PATH}" PATH_SUFFIXES lib/x86 lib NO_DEFAULT_PATH)
endif(MSVC) find_file(WIN_PTHREAD_DLL pthreadVC2.dll PATHS "${WIN_PTHREAD_BASE_PATH}" PATH_SUFFIXES lib/x86 lib dll/x86 dll NO_DEFAULT_PATH)
if(WIN_PTHREAD_LIB)
list(APPEND WIN_LINK_LIBRARIES "${WIN_PTHREAD_LIB}")
else()
message(SEND_ERROR "pthreadVC2.lib not found!")
endif()
else()
set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES OFF)
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES OFF)
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES OFF)
endif()
endif() endif()
include(Macros) include(Macros)

View file

@ -9,8 +9,6 @@ FIND_PROGRAM( LUPDATE_EXECUTABLE
lupdate lupdate-qt4 lupdate lupdate-qt4
) )
MESSAGE( STATUS ${LUPDATE_EXECUTABLE} )
# if the program is found then we have it # if the program is found then we have it
IF( LUPDATE_EXECUTABLE ) IF( LUPDATE_EXECUTABLE )
SET( LUPDATE_FOUND "YES" ) SET( LUPDATE_FOUND "YES" )

View file

@ -37,3 +37,35 @@ macro(git_id RESULT)
set(${RESULT} 0) set(${RESULT} 0)
endif(WIN32) endif(WIN32)
endmacro(git_id) endmacro(git_id)
macro(use_cxx11)
if (CMAKE_VERSION VERSION_LESS "3.1" AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set (CMAKE_CXX_FLAGS "--std=gnu++11 ${CMAKE_CXX_FLAGS}")
endif ()
endmacro(use_cxx11)
macro(PrintTargetReport targetName)
if(CMAKE_CXX_COMPILER MATCHES "/cl\\.exe$")
set(cpp_version ${MSVC_VERSION})
else()
execute_process(COMMAND ${CMAKE_CXX_COMPILER} -dumpversion OUTPUT_VARIABLE cpp_version)
endif()
if(cpp_version)
string(STRIP "v${cpp_version}" cpp_version)
else()
set(cpp_version "WARNING: COMPILER NOT FOUND!")
endif()
message("TARGET ${targetName}: cpp compiler ${CMAKE_CXX_COMPILER} ${cpp_version}")
if(VERBOSE_CMAKELISTS)
get_directory_property(DirOpts COMPILE_OPTIONS)
get_directory_property(DirDefs COMPILE_DEFINITIONS)
string(REPLACE ";" " " DirOpts "${DirOpts}")
string(REPLACE ";" "; " DirDefs "${DirDefs}")
string(TOUPPER "${CMAKE_BUILD_TYPE}" build_type)
message("\twith cpp flags: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${build_type}} ${DirOpts}")
message("\twith link flags: ${CMAKE_EXE_LINKER_FLAGS}")
message("\twith defs: ${DirDefs}")
message("--------------")
endif()
endmacro(PrintTargetReport)

View file

@ -53,41 +53,39 @@ else()
remove_definitions(-DSIMU_AUDIO) remove_definitions(-DSIMU_AUDIO)
endif() endif()
find_package(Lupdate)
if(LUPDATE_FOUND)
message("Qt lupdate: " ${LUPDATE_EXECUTABLE})
else()
message("Qt lupdate not found, 'translations' target will not be availabe.")
endif()
add_definitions(-DSIMU) add_definitions(-DSIMU)
add_definitions(-DQXT_STATIC) add_definitions(-DQXT_STATIC)
if (NOT MSVC AND ${CMAKE_VERSION} VERSION_LESS 3.1.0}) if(NOT MSVC)
message("companion: adding -std=gnu++11") set(WARNING_FLAGS "${WARNING_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") if(WARNINGS_AS_ERRORS)
set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
endif()
else()
# silence lots of warnings regarding "insecure" use of functions (sprintf, strcpy, etc)
set(WARNING_FLAGS "${WARNING_FLAGS} /D_CRT_SECURE_NO_WARNINGS")
if(WARNINGS_AS_ERRORS)
set(WARNING_FLAGS "${WARNING_FLAGS} /WX")
endif()
endif() endif()
if(WIN32) if(WIN32)
include_directories(SYSTEM ${WIN_INCLUDE_DIRS}) include_directories(SYSTEM ${WIN_INCLUDE_DIRS})
if(MSVC) if(MSVC)
set(CMAKE_CXX_FLAGS "/EHsc /LD /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /LD /MP")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,5.01") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,5.01")
message("companion: using MSVC with ${CMAKE_CXX_FLAGS}")
elseif(MINGW) elseif(MINGW)
# struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw # struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields -mwindows") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
message("companion: using MinGW with ${CMAKE_CXX_FLAGS}")
endif() endif()
else() else()
set(PTHREAD_LIBRARY pthread) set(PTHREAD_LIBRARY pthread)
add_definitions(-Wall)
link_directories(/usr/local/lib) link_directories(/usr/local/lib)
endif() endif()
set(RADIO_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/radio/src) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
set(SIMU_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/companion/src/simulation)
set(COMPANION_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/companion/src) use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
include_directories( include_directories(
${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}
@ -101,6 +99,8 @@ include_directories(
${COMPANION_SRC_DIRECTORY}/storage ${COMPANION_SRC_DIRECTORY}/storage
) )
############# Supporting libraries ###############
add_subdirectory(shared) add_subdirectory(shared)
add_subdirectory(modeledit) add_subdirectory(modeledit)
add_subdirectory(generaledit) add_subdirectory(generaledit)
@ -109,6 +109,8 @@ add_subdirectory(storage)
add_subdirectory(thirdparty/qcustomplot) add_subdirectory(thirdparty/qcustomplot)
add_subdirectory(thirdparty/qxtcommandoptions) add_subdirectory(thirdparty/qxtcommandoptions)
############# Common lib ###############
set(common_SRCS set(common_SRCS
eeprominterface.cpp eeprominterface.cpp
firmwares/er9x/er9xeeprom.cpp firmwares/er9x/er9xeeprom.cpp
@ -124,6 +126,8 @@ qt5_wrap_cpp(common_SRCS)
add_library(common ${common_SRCS}) add_library(common ${common_SRCS})
qt5_use_modules(common Core Xml Widgets) qt5_use_modules(common Core Xml Widgets)
############# Companion ###############
set(companion_SRCS set(companion_SRCS
helpers.cpp helpers.cpp
helpers_html.cpp helpers_html.cpp
@ -222,10 +226,7 @@ configure_file(${COMPANION_SRC_DIRECTORY}/companion.desktop.in ${CMAKE_CURRENT_B
configure_file(${COMPANION_SRC_DIRECTORY}/simulator.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/simulator.desktop @ONLY) configure_file(${COMPANION_SRC_DIRECTORY}/simulator.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/simulator.desktop @ONLY)
if(WIN32) if(WIN32)
set(companion_SRCS ${companion_SRCS} icon.rc) list(APPEND companion_SRCS icon.rc)
if(NOT MSVC)
set(CMAKE_EXE_LINKER_FLAGS -mwindows)
endif()
endif() endif()
include_directories(${CMAKE_BINARY_DIR}) include_directories(${CMAKE_BINARY_DIR})
@ -233,7 +234,7 @@ include_directories(${CMAKE_SOURCE_DIR})
set(LANGUAGES he pl pt ru de fr es it sv cs fi nl cn) set(LANGUAGES he pl pt ru de fr es it sv cs fi nl cn)
foreach(language ${LANGUAGES}) foreach(language ${LANGUAGES})
set(companion_TS ${companion_TS} translations/companion_${language}.ts) list(APPEND companion_TS translations/companion_${language}.ts)
endforeach(language) endforeach(language)
qt5_wrap_ui(companion_SRCS ${companion_UIS}) qt5_wrap_ui(companion_SRCS ${companion_UIS})
@ -251,11 +252,13 @@ qt5_use_modules(${COMPANION_NAME} Core Widgets Network)
target_link_libraries(${COMPANION_NAME} PRIVATE generaledit modeledit simulation common qcustomplot shared storage ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${WIN_LINK_LIBRARIES}) target_link_libraries(${COMPANION_NAME} PRIVATE generaledit modeledit simulation common qcustomplot shared storage ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${WIN_LINK_LIBRARIES})
############# Standalone simu ############### PrintTargetReport("${COMPANION_NAME}")
############# Standalone simulator ###############
set(simu_SRCS set(simu_SRCS
modeledit/node.cpp modeledit/node.cpp
modeledit/edge.cpp # TODO not needed modeledit/edge.cpp
simulator.cpp simulator.cpp
) )
@ -266,15 +269,28 @@ set(simu_MOC_HDRS
qt5_wrap_cpp(simu_SRCS ${simu_MOC_HDRS} ) qt5_wrap_cpp(simu_SRCS ${simu_MOC_HDRS} )
if(WIN32) if(WIN32)
set(simu_SRCS ${simu_SRCS} icon.rc) list(APPEND simu_SRCS icon.rc)
endif() endif()
add_executable(${SIMULATOR_NAME} MACOSX_BUNDLE WIN32 ${simu_SRCS} ${companion_RCC}) add_executable(${SIMULATOR_NAME} MACOSX_BUNDLE WIN32 ${simu_SRCS} ${companion_RCC})
add_dependencies(${SIMULATOR_NAME} gen_qrc) add_dependencies(${SIMULATOR_NAME} gen_qrc)
qt5_use_modules(${SIMULATOR_NAME} Core Widgets Multimedia)
# TODO not the same link command than companion? target_link_libraries(${SIMULATOR_NAME} PRIVATE simulation common storage qxtcommandoptions ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${WIN_LINK_LIBRARIES})
target_link_libraries(${SIMULATOR_NAME} PRIVATE simulation common storage qxtcommandoptions ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${OPENTX_SIMULATOR_LIBS} ${WIN_LINK_LIBRARIES})
############# Translations ####################
find_package(Lupdate)
if(LUPDATE_FOUND)
message(STATUS "Qt lupdate: " ${LUPDATE_EXECUTABLE})
add_custom_target(translations
WORKING_DIRECTORY ${COMPANION_SRC_DIRECTORY}
COMMAND ${LUPDATE_EXECUTABLE} ${CMAKE_SOURCE_DIR} -no-obsolete -ts ${companion_TS}
)
else()
message(STATUS "Qt lupdate not found, 'translations' target will not be availabe.")
endif()
############# Install #################### ############# Install ####################
@ -316,11 +332,11 @@ elseif(WIN32)
if(NOT WIN_DO_FULL_INSTALL) if(NOT WIN_DO_FULL_INSTALL)
# Just copy supporting DLLs to build folder # Just copy supporting DLLs to build folder
set(INSTALL_DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) set(INSTALL_DESTINATION "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
message(STATUS "Partial install to " ${INSTALL_DESTINATION}) message(STATUS "Partial install to " ${INSTALL_DESTINATION})
else() else()
# Full Windows installation with all supporting files # Full Windows installation with all supporting files
set(INSTALL_DESTINATION ${CMAKE_INSTALL_PREFIX}) set(INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}")
message(STATUS "Full install to " ${INSTALL_DESTINATION}) message(STATUS "Full install to " ${INSTALL_DESTINATION})
# companion & simulator binaries # companion & simulator binaries
install(TARGETS ${COMPANION_NAME} DESTINATION ${INSTALL_DESTINATION}) install(TARGETS ${COMPANION_NAME} DESTINATION ${INSTALL_DESTINATION})
@ -341,30 +357,33 @@ elseif(WIN32)
install(FILES ${QT_DLL_DIR}/../plugins/platforms/qwindows${INSTALL_TEMP_QTDLL_SFX}.dll DESTINATION ${INSTALL_DESTINATION}/platforms) install(FILES ${QT_DLL_DIR}/../plugins/platforms/qwindows${INSTALL_TEMP_QTDLL_SFX}.dll DESTINATION ${INSTALL_DESTINATION}/platforms)
# ICU dlls # ICU dlls
foreach(tmpfile ${INSTALL_TEMP_ICUDLL_FILES}) foreach(tmpfile ${INSTALL_TEMP_ICUDLL_FILES})
# Qt5.7+ doesn't use icu dlls anymore (at least with MinGW), hence optional # Qt5.7+ doesn't use icu dlls anymore, hence optional
install(FILES ${QT_DLL_DIR}/${tmpfile}.dll DESTINATION ${INSTALL_DESTINATION} OPTIONAL) install(FILES ${QT_DLL_DIR}/${tmpfile}.dll DESTINATION ${INSTALL_DESTINATION} OPTIONAL)
endforeach() endforeach()
# SDL dll # SDL dll
if(SDL_FOUND AND SDL_LIBRARY_PATH AND EXISTS "${SDL_LIBRARY_PATH}/SDL.dll") if(SDL_FOUND AND SDL_LIBRARY_PATH AND EXISTS "${SDL_LIBRARY_PATH}/SDL.dll")
set(SDL_DIR ${SDL_LIBRARY_PATH}) # this is also used by NSIS installer script set(SDL_DIR ${SDL_LIBRARY_PATH}) # this is also used by NSIS installer script
install(FILES ${SDL_DIR}/SDL.dll DESTINATION ${INSTALL_DESTINATION}) install(FILES ${SDL_DIR}/SDL.dll DESTINATION ${INSTALL_DESTINATION})
else() elseif(SDL_FOUND)
message(WARNING "Installer: SDL.dll not found!") message(WARNING "Installer: SDL.dll not found!")
endif() endif()
# C++/system dlls, depends on compiler # C++/system dlls, depends on compiler
if(MSVC) if(MSVC)
set(WIN_SYSDIR "$ENV{windir}/SysWOW64") # This would be "system32" for a 64-bit build or on x86... but how to tell? string(REPLACE "\\" "/" WIN_SYSDIR "$ENV{windir}")
if(IS_DIRECTORY ${WIN_SYSDIR}) set(WIN_SYSDIR "${WIN_SYSDIR}/SysWOW64") # This would be "system32" for a 64-bit build or on x86... but how to tell?
install(FILES ${WIN_SYSDIR}/msvcp140.dll ${WIN_SYSDIR}/vcruntime140.dll DESTINATION ${INSTALL_DESTINATION} OPTIONAL) if(IS_DIRECTORY "${WIN_SYSDIR}")
install(FILES "${WIN_SYSDIR}/msvcp140.dll" "${WIN_SYSDIR}/vcruntime140.dll" DESTINATION ${INSTALL_DESTINATION} OPTIONAL)
endif()
if(WIN_PTHREAD_DLL)
install(FILES "${WIN_PTHREAD_DLL}" DESTINATION ${INSTALL_DESTINATION})
endif() endif()
install(FILES "${WIN_PTHREAD_BASE_PATH}/lib/pthreadVC2.dll" DESTINATION ${INSTALL_DESTINATION})
elseif(MINGW) elseif(MINGW)
get_filename_component(MINGW_DIR ${CMAKE_CXX_COMPILER} PATH) get_filename_component(MINGW_DIR ${CMAKE_CXX_COMPILER} PATH)
if(IS_DIRECTORY ${MINGW_DIR}) if(IS_DIRECTORY ${MINGW_DIR})
install(FILES ${MINGW_DIR}/libgcc_s_dw2-1.dll ${MINGW_DIR}/libstdc++-6.dll ${MINGW_DIR}/libwinpthread-1.dll DESTINATION ${INSTALL_DESTINATION}) install(FILES "${MINGW_DIR}/libgcc_s_dw2-1.dll" "${MINGW_DIR}/libstdc++-6.dll" "${MINGW_DIR}/libwinpthread-1.dll" DESTINATION ${INSTALL_DESTINATION})
set(MINGW_DIR "${MINGW_DIR}/../opt/bin") set(MINGW_DIR "${MINGW_DIR}/../opt/bin")
# SSL support # SSL support
install(FILES ${MINGW_DIR}/libeay32.dll ${MINGW_DIR}/ssleay32.dll DESTINATION ${INSTALL_DESTINATION} OPTIONAL) install(FILES "${MINGW_DIR}/libeay32.dll" "${MINGW_DIR}/ssleay32.dll" DESTINATION ${INSTALL_DESTINATION} OPTIONAL)
endif() endif()
endif() endif()
@ -410,17 +429,6 @@ if(WIN32)
) )
endif() endif()
if(LUPDATE_FOUND)
add_custom_target(translations
WORKING_DIRECTORY ${COMPANION_SRC_DIRECTORY}
COMMAND ${LUPDATE_EXECUTABLE} ${COMPANION_SRC_DIRECTORY} -no-obsolete -ts ${companion_TS}
)
else()
add_custom_target(translations
COMMAND echo "Sorry, QT lupdate was not found."
)
endif()
set(CPACK_PACKAGE_NAME "companion${C9X_NAME_SUFFIX}") set(CPACK_PACKAGE_NAME "companion${C9X_NAME_SUFFIX}")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Models and settings editor for the OpenTX open source firmware") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Models and settings editor for the OpenTX open source firmware")
string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE) string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)

View file

@ -1,15 +1,25 @@
include(CMakeForceCompiler) include(CMakeForceCompiler)
include(Bitmaps) include(Bitmaps)
set(PCB "X9D+" CACHE STRING "Radio type") set(PCB_TYPES X9D X9D+ X9E X7 HORUS 9X 9XR 9X128 9XR128 SKY9X 9XRPRO AR9X 9X2561 GRUVIN9X MEGA2560)
set(TRANSLATIONS "EN" CACHE STRING "Radio language") set(GUI_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU NL)
set(TTS_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU)
set(PCB "X9D+" CACHE STRING "Radio type, one of: ${PCB_TYPES}")
set_property(CACHE PCB PROPERTY STRINGS ${PCB_TYPES})
set(TRANSLATIONS "EN" CACHE STRING "Radio language, one of: ${GUI_LANGUAGES}")
set_property(CACHE TRANSLATIONS PROPERTY STRINGS ${GUI_LANGUAGES})
set(SPLASH "DEFAULT" CACHE STRING "Splash (DEFAULT/OFF/FRSKY)")
set_property(CACHE SPLASH PROPERTY STRINGS DEFAULT OFF FRSKY)
set(PPM_UNIT "PERCENT_PREC1" CACHE STRING "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)")
set_property(CACHE PPM_UNIT PROPERTY STRINGS US PERCENT_PREC1 PERCENT_PREC0)
set(DEFAULT_MODE "" CACHE STRING "Default sticks mode")
option(HELI "Heli menu" ON) option(HELI "Heli menu" ON)
option(FLIGHT_MODES "Flight Modes" ON) option(FLIGHT_MODES "Flight Modes" ON)
option(CURVES "Curves" ON) option(CURVES "Curves" ON)
option(GVARS "Global variables" OFF) option(GVARS "Global variables" OFF)
option(GUI "GUI enabled" ON) option(GUI "GUI enabled" ON)
set(SPLASH "DEFAULT" CACHE STRING "Splash (DEFAULT/OFF/FRSKY)")
set(PPM_UNIT "PERCENT_PREC1" CACHE STRING "PPM display unit (US/PERCENT_PREC1/PERCENT_PREC0)")
option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" ON) option(PPM_CENTER_ADJUSTABLE "PPM center adjustable" ON)
option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF) option(PPM_LIMITS_SYMETRICAL "PPM limits symetrical" OFF)
option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON) option(OVERRIDE_CHANNEL_FUNCTION "OverrideChannel function available" ON)
@ -24,9 +34,13 @@ option(SIMU_DISKIO "Enable disk IO simulation in simulator. Simulator will use F
option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON) option(SIMU_LUA_COMPILER "Pre-compile and save Lua scripts in simulator." ON)
option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF) option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF)
option(TEMPLATES "Model templates menu" OFF) option(TEMPLATES "Model templates menu" OFF)
option(WARNINGS_AS_ERRORS "Treat all compiler warnings as error" OFF)
option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON) option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON)
set(DEFAULT_MODE "" CACHE STRING "Default sticks mode")
# since we reset all default CMAKE compiler flags for firmware builds, provide an alternate way for user to specify additional flags.
set(FIRMWARE_C_FLAGS "" CACHE STRING "Additional flags for firmware target c compiler (note: all CMAKE_C_FLAGS[_*] are ignored for firmware/bootloader).")
set(FIRMWARE_C_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c compiler (note: CMAKE_C_FLAGS_DEBUG is ignored for firmware/bootloader).")
set(FIRMWARE_CXX_FLAGS "" CACHE STRING "Additional flags for firmware target c++ compiler (note: all CMAKE_CXX_FLAGS[_*] are ignored for firmware/bootloader).")
set(FIRMWARE_CXX_FLAGS_DEBUG "-g" CACHE STRING "Additional flags for firmware target (Debug config) c++ compiler (note: CMAKE_CXX_FLAGS_DEBUG is ignored for firmware/bootloader).")
# Python check # Python check
find_package("PythonInterp") find_package("PythonInterp")
@ -34,21 +48,15 @@ if(PYTHONINTERP_FOUND)
message(STATUS "Python found, version: ${PYTHON_VERSION_STRING}") message(STATUS "Python found, version: ${PYTHON_VERSION_STRING}")
else() else()
message(WARNING "Python not found! Most firmware and simu flavors not buildable.") message(WARNING "Python not found! Most firmware and simu flavors not buildable.")
set(LUA OFF) set(LUA NO)
endif() endif()
enable_language(ASM)
set(OPT s)
set(THIRDPARTY_DIR thirdparty) set(THIRDPARTY_DIR thirdparty)
set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src) set(LUA_DIR ${THIRDPARTY_DIR}/Lua/src)
set(COOS_DIR ${THIRDPARTY_DIR}/CoOS) set(COOS_DIR ${THIRDPARTY_DIR}/CoOS)
set(FATFS_DIR ${THIRDPARTY_DIR}/FatFs) set(FATFS_DIR ${THIRDPARTY_DIR}/FatFs)
set(RADIO_BIN_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) set(RADIO_BIN_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
set(GUI_LANGUAGES cz de en es fr it pt sk se pl hu nl)
set(TTS_LANGUAGES cz de en es fr it pt sk se pl hu)
configure_file(stamp.h.in stamp.h @ONLY) configure_file(stamp.h.in stamp.h @ONLY)
add_subdirectory(translations) add_subdirectory(translations)
@ -138,9 +146,8 @@ endif()
include_directories(targets/${TARGET_DIR} ${THIRDPARTY_DIR}) include_directories(targets/${TARGET_DIR} ${THIRDPARTY_DIR})
foreach(LANGUAGE ${GUI_LANGUAGES}) foreach(LANGUAGE ${GUI_LANGUAGES})
string(TOUPPER ${LANGUAGE} LANGUAGE_CAPITALIZED) if(TRANSLATIONS STREQUAL ${LANGUAGE})
if(TRANSLATIONS STREQUAL ${LANGUAGE_CAPITALIZED}) add_definitions(-DTRANSLATIONS_${LANGUAGE} -DTRANSLATIONS="${LANGUAGE}")
add_definitions(-DTRANSLATIONS_${LANGUAGE_CAPITALIZED} -DTRANSLATIONS="${LANGUAGE_CAPITALIZED}")
endif() endif()
endforeach() endforeach()
@ -205,6 +212,10 @@ if(NOT LUA STREQUAL NO)
foreach(FILE ${LUA_SRC}) foreach(FILE ${LUA_SRC})
set(SRC ${SRC} ${LUA_DIR}/${FILE}) set(SRC ${SRC} ${LUA_DIR}/${FILE})
endforeach() endforeach()
if(MSVC)
# silence lots of warnings regarding "insecure" use of functions (sprintf, strcpy, etc) from Lua code
set(WARNING_FLAGS "${WARNING_FLAGS} /D_CRT_SECURE_NO_WARNINGS")
endif()
endif() endif()
if(HELI) if(HELI)
@ -347,37 +358,58 @@ endforeach()
add_definitions(-DCORRECT_NEGATIVE_SHIFTS) add_definitions(-DCORRECT_NEGATIVE_SHIFTS)
if(NOT MSVC) if(NOT MSVC)
add_definitions(-Wall -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits) set(WARNING_FLAGS "${WARNING_FLAGS} -Wall -Wno-strict-aliasing -Wformat -Wreturn-type -Wunused -Wuninitialized -Wunknown-pragmas -Wno-switch -Wtype-limits")
if(WARNINGS_AS_ERRORS) if(WARNINGS_AS_ERRORS)
set(WARNING_FLAGS -Werror) set(WARNING_FLAGS "${WARNING_FLAGS} -Werror")
endif(WARNINGS_AS_ERRORS) endif(WARNINGS_AS_ERRORS)
else() else()
add_definitions(-DHAVE_STRUCT_TIMESPEC) add_definitions(-DHAVE_STRUCT_TIMESPEC) # this is for pthread.h
if(WARNINGS_AS_ERRORS)
set(WARNING_FLAGS "${WARNING_FLAGS} /WX")
endif(WARNINGS_AS_ERRORS)
endif() endif()
add_subdirectory(targets/simu) add_subdirectory(targets/simu)
if(NOT WIN32) if(NOT MSVC)
add_subdirectory(tests) add_subdirectory(tests)
endif() endif()
set(SRC ${SRC} ${FIRMWARE_SRC}) set(SRC ${SRC} ${FIRMWARE_SRC})
# trick to remove the -rdynamic and --out-implib issues
##### firmware target #####
set(CMAKE_EXECUTABLE_SUFFIX ".elf") set(CMAKE_EXECUTABLE_SUFFIX ".elf")
# trick to remove the -rdynamic and --out-implib issues
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
set(CMAKE_COMMON_FLAGS "")
# similar for -mmacosx-version-min=" # similar for -mmacosx-version-min="
set(CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG "") set(CMAKE_C_OSX_DEPLOYMENT_TARGET_FLAG "")
set(CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG "") set(CMAKE_CXX_OSX_DEPLOYMENT_TARGET_FLAG "")
# reset some CMake default flags which assume optimization levels/etc
set(CMAKE_C_FLAGS "${FIRMWARE_C_FLAGS}")
set(CMAKE_C_FLAGS_DEBUG "${FIRMWARE_C_FLAGS_DEBUG}")
set(CMAKE_C_FLAGS_RELEASE "")
set(CMAKE_C_FLAGS_MINSIZEREL "")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "")
set(CMAKE_CXX_FLAGS "${FIRMWARE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${FIRMWARE_CXX_FLAGS_DEBUG}")
set(CMAKE_CXX_FLAGS_RELEASE "")
set(CMAKE_CXX_FLAGS_MINSIZEREL "")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "")
# customize linker command
set(CMAKE_EXE_LINKER_FLAGS "") set(CMAKE_EXE_LINKER_FLAGS "")
# similar for -Wl,-search_paths_first (fix "arch_paths_first" warning) set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
set(CMAKE_CXX_LINK_FLAGS "") set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <FLAGS> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>")
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET>") use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
if(NOT MSVC) if(NOT MSVC)
set(OPT s)
if(ARCH STREQUAL ARM) if(ARCH STREQUAL ARM)
enable_language(ASM)
set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++) set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-as) set(CMAKE_ASM_COMPILER arm-none-eabi-as)
@ -387,21 +419,12 @@ if(NOT MSVC)
set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -o <OBJECT> <SOURCE>") set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> -o <OBJECT> <SOURCE>")
set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}") set(COMMON_FLAGS "-mcpu=${MCU} -mthumb -fomit-frame-pointer -fverbose-asm -Wa,-ahlms=firmware.lst -O${OPT} -gdwarf-2 -DHSE_VALUE=${HSE_VALUE} -fno-exceptions -fdata-sections -ffunction-sections ${WARNING_FLAGS}")
# Remove once the minimum cmake version is set to 3.1 in the main CmakeLists.tx
if (${CMAKE_VERSION} VERSION_LESS 3.1.0}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS} -Wimplicit")
set(COMMON_CPP_FLAGS "${COMMON_FLAGS} -std=gnu++11") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}")
else()
set(COMMON_CPP_FLAGS ${COMMON_FLAGS}) # these are in addition to CMAKE_CXX_FLAGS
endif() set(CMAKE_EXE_LINKER_FLAGS "-lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections")
set(CMAKE_C_FLAGS "${COMMON_FLAGS} -Wimplicit")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${COMMON_FLAGS} -Wimplicit -g")
set(CMAKE_C_FLAGS_RELEASE "${COMMON_FLAGS} -Wimplicit")
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS} -Wimplicit -g")
set(CMAKE_CXX_FLAGS "${COMMON_CPP_FLAGS}")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${COMMON_CPP_FLAGS} -g")
set(CMAKE_CXX_FLAGS_RELEASE "${COMMON_CPP_FLAGS}")
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CPP_FLAGS} -g")
set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -lm -T${RADIO_SRC_DIRECTORY}/${LINKER_SCRIPT} -Wl,-Map=firmware.map,--cref,--no-warn-mismatch,--gc-sections")
if(PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7) if(PCB STREQUAL X9D OR PCB STREQUAL X9D+ OR PCB STREQUAL X9E OR PCB STREQUAL X7)
add_subdirectory(targets/${TARGET_DIR}/bootloader) add_subdirectory(targets/${TARGET_DIR}/bootloader)
@ -433,15 +456,16 @@ if(NOT MSVC)
DEPENDS firmware DEPENDS firmware
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )
else()
else() # AVR
set(CMAKE_C_COMPILER avr-gcc) set(CMAKE_C_COMPILER avr-gcc)
set(CMAKE_CXX_COMPILER avr-gcc) set(CMAKE_CXX_COMPILER avr-gcc)
set(CMAKE_CXX_FLAGS "-mmcu=${MCU} -DF_CPU=16000000UL -O${OPT} -gdwarf-2 -fno-exceptions -flto -fwhole-program -fno-inline-small-functions -mstrict-X ${WARNING_FLAGS}")
set(COMMON_FLAGS "-mmcu=${MCU} -DF_CPU=16000000UL -O${OPT} -gdwarf-2 -fno-exceptions -flto -fwhole-program -fno-inline-small-functions -mstrict-X ${WARNING_FLAGS}")
# Remove once the minimum cmake version is set to 3.1 in the main CmakeLists.tx set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${COMMON_FLAGS}")
if (${CMAKE_VERSION} VERSION_LESS 3.1.0}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${COMMON_FLAGS}")
set(CMAKE_CXX_FLAGS "-std=gnu++11 ${CMAKE_CXX_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "-Wno-uninitialized") # bogus "uninitialized" warnings from ld
endif()
include_directories(storage gui/${GUI_DIR}) include_directories(storage gui/${GUI_DIR})
@ -473,7 +497,8 @@ if(NOT MSVC)
DEPENDS firmware DEPENDS firmware
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )
endif()
endif() # ARM or AVR
if(CPU_FAMILY STREQUAL STM32) if(CPU_FAMILY STREQUAL STM32)
add_custom_target(flash add_custom_target(flash
@ -488,6 +513,7 @@ if(NOT MSVC)
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
) )
endif() endif()
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") PrintTargetReport("firmware")
endif(NOT MSVC) endif(NOT MSVC)

View file

@ -1,4 +1,5 @@
set(TIMERS 3 CACHE STRING "Timers count (2 or 3)") set(TIMERS 3 CACHE STRING "Timers count (2 or 3)")
set_property(CACHE TIMERS PROPERTY STRINGS 2 3)
option(CLI "Command Line Interface" OFF) option(CLI "Command Line Interface" OFF)
option(DEBUG "Debug mode" OFF) option(DEBUG "Debug mode" OFF)
option(LOG_TELEMETRY "Telemetry Logs on SD card" OFF) option(LOG_TELEMETRY "Telemetry Logs on SD card" OFF)
@ -82,7 +83,8 @@ add_definitions(-DBOLD_FONT -DBATTGRAPH -DTHRTRACE -DGAUGES)
add_definitions(-DREQUIRED_SDCARD_VERSION="${SDCARD_VERSION}") add_definitions(-DREQUIRED_SDCARD_VERSION="${SDCARD_VERSION}")
include_directories(${COOS_DIR} ${COOS_DIR}/kernel ${COOS_DIR}/portable) include_directories(${COOS_DIR} ${COOS_DIR}/kernel ${COOS_DIR}/portable)
foreach(LANGUAGE ${TTS_LANGUAGES}) foreach(LANGUAGE ${TTS_LANGUAGES})
set(SRC ${SRC} translations/tts_${LANGUAGE}.cpp) string(TOLOWER ${LANGUAGE} lang_lower)
set(SRC ${SRC} translations/tts_${lang_lower}.cpp)
endforeach() endforeach()
set(SRC set(SRC
${SRC} ${SRC}

View file

@ -1,7 +1,10 @@
set(LUA "NO" CACHE STRING "Lua scripts (YES/NO/NO_MODEL_SCRIPTS)") set(LUA "NO" CACHE STRING "Lua scripts (YES/NO/NO_MODEL_SCRIPTS)")
option(LUA_COMPILER "Pre-compile and save Lua scripts" OFF) set_property(CACHE LUA PROPERTY STRINGS YES NO NO_MODEL_SCRIPTS)
set(LUA_SCRIPT_LOAD_MODE "" CACHE STRING "Script loading mode and compilation flags [btTxcd] (see loadScript() API docs). Blank for default ('bt' on radio, 'T' on SIMU/DEBUG builds)") set(LUA_SCRIPT_LOAD_MODE "" CACHE STRING "Script loading mode and compilation flags [btTxcd] (see loadScript() API docs). Blank for default ('bt' on radio, 'T' on SIMU/DEBUG builds)")
set(USB "JOYSTICK" CACHE STRING "USB option (JOYSTICK/MASSSTORAGE/SERIAL)") set(USB "JOYSTICK" CACHE STRING "USB option (JOYSTICK/MASSSTORAGE/SERIAL)")
set_property(CACHE USB PROPERTY STRINGS JOYSTICK MASSSTORAGE SERIAL)
option(LUA_COMPILER "Pre-compile and save Lua scripts" OFF)
set(ARCH ARM) set(ARCH ARM)
set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries) set(STM32USB_DIR ${THIRDPARTY_DIR}/STM32_USB-Host-Device_Lib_V2.2.0/Libraries)
add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO -DSBUS -DCROSSFIRE) add_definitions(-DSTM32 -DLUA_INPUTS -DVARIO -DSBUS -DCROSSFIRE)

View file

@ -5,9 +5,14 @@ option(GRAPHICS "Additional graphics" ON)
option(BOLD "Bold font" ON) option(BOLD "Bold font" ON)
option(BATTGRAPH "Battery graph" OFF) option(BATTGRAPH "Battery graph" OFF)
option(HAPTIC "Haptic support" OFF) option(HAPTIC "Haptic support" OFF)
set(TTS "EN" CACHE STRING "TTS language") set(TTS "EN" CACHE STRING "TTS language, one of: ${TTS_LANGUAGES}")
set(LCD "DEFAULT" CACHE STRING "LCD type (DEFAULT/ST7565P/ST7565R/ERC12864FSF/ST7920/KS108)") set_property(CACHE TTS PROPERTY STRINGS ${TTS_LANGUAGES})
set(DSM2 "NO" CACHE STRING "LCD type (NO/PPM/SERIAL)") set(LCD_TYPES DEFAULT ST7565P ST7565R ERC12864FSF ST7920 KS108)
set(LCD "DEFAULT" CACHE STRING "LCD type (${LCD_TYPES})")
set_property(CACHE LCD PROPERTY STRINGS ${LCD_TYPES})
set(DSM2 "NO" CACHE STRING "DSM2 support/interface (NO/PPM/SERIAL)")
set_property(CACHE DSM2 PROPERTY STRINGS NO PPM SERIAL)
set(LUA NO) set(LUA NO)
set(PULSES_SRC pulses_avr.cpp) set(PULSES_SRC pulses_avr.cpp)
set(SRC ${SRC} main_avr.cpp) set(SRC ${SRC} main_avr.cpp)
@ -38,10 +43,10 @@ if(VOICE)
add_definitions(-DVOICE) add_definitions(-DVOICE)
set(TARGET_SRC ${TARGET_SRC} voice.cpp) set(TARGET_SRC ${TARGET_SRC} voice.cpp)
foreach(LANGUAGE ${TTS_LANGUAGES}) foreach(LANGUAGE ${TTS_LANGUAGES})
string(TOUPPER ${LANGUAGE} LANGUAGE_CAPITALIZED) if(TTS STREQUAL ${LANGUAGE})
if(TTS STREQUAL ${LANGUAGE_CAPITALIZED}) add_definitions(-DTTS_${LANGUAGE})
add_definitions(-DTTS_${LANGUAGE_CAPITALIZED}) string(TOLOWER ${LANGUAGE} lang_lower)
set(SRC ${SRC} translations/tts_${LANGUAGE}.cpp) set(SRC ${SRC} translations/tts_${lang_lower}.cpp)
endif() endif()
endforeach() endforeach()
endif() endif()

View file

@ -6,7 +6,7 @@ if(${PCBREV} GREATER 10)
else() else()
option(INTERNAL_GPS "Internal GPS installed" NO) option(INTERNAL_GPS "Internal GPS installed" NO)
if(NOT INTERNAL_GPS) if(NOT INTERNAL_GPS)
message("Internal GPS is optional, use INTERNAL_GPS=YES option to enable it") message("Horus: Internal GPS is optional, use INTERNAL_GPS=YES option to enable it")
endif() endif()
endif() endif()
option(BLUETOOTH_CLI_PASSTHROUGH "Enable direct communicaton with Bluetooth module from CLI" NO) option(BLUETOOTH_CLI_PASSTHROUGH "Enable direct communicaton with Bluetooth module from CLI" NO)
@ -69,7 +69,7 @@ endif()
if(INTERNAL_GPS) if(INTERNAL_GPS)
set(SRC ${SRC} gps.cpp) set(SRC ${SRC} gps.cpp)
add_definitions(-DINTERNAL_GPS) add_definitions(-DINTERNAL_GPS)
message("Internal GPS enabled") message("Horus: Internal GPS enabled")
endif() endif()
set(SERIAL2_DRIVER ../common/arm/stm32/serial2_driver.cpp) set(SERIAL2_DRIVER ../common/arm/stm32/serial2_driver.cpp)
set(GVAR_SCREEN model_gvars.cpp) set(GVAR_SCREEN model_gvars.cpp)
@ -92,7 +92,7 @@ set(FIRMWARE_TARGET_SRC
) )
if(BLUETOOTH_CLI_PASSTHROUGH) if(BLUETOOTH_CLI_PASSTHROUGH)
add_definitions(-DBLUETOOTH_CLI_PASSTHROUGH) add_definitions(-DBLUETOOTH_CLI_PASSTHROUGH)
message("Bluetooth pass-trough enabled") message("Horus: Bluetooth pass-trough enabled")
endif() endif()
set(STM32LIB_SRC set(STM32LIB_SRC
STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c

View file

@ -41,22 +41,21 @@ endif(WIN32)
if(MSVC) if(MSVC)
set(CMAKE_CXX_FLAGS "/EHsc /LD /MP") set(CMAKE_CXX_FLAGS "/EHsc /LD /MP")
message("simu: using MSVC with ${CMAKE_CXX_FLAGS}")
else() else()
if (${CMAKE_VERSION} VERSION_LESS 3.1.0})
message("simu: adding -std=gnu++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
endif()
if(MINGW) if(MINGW)
# struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw # struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields -mwindows") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
message("simu: using MinGW with ${CMAKE_CXX_FLAGS}")
endif() endif()
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
endif() endif()
if((NOT WIN32) AND FOX_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS}")
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
if(FOX_FOUND)
if(SIMU_DISKIO) if(SIMU_DISKIO)
add_definitions(-DSIMU_DISKIO) add_definitions(-DSIMU_DISKIO)
set(SIMU_SRC ${SIMU_SRC} ${FATFS_DIR}/FatFs/ff.c ${FATFS_DIR}/option/ccsbcs.c) set(SIMU_SRC ${SIMU_SRC} ${FATFS_DIR}/FatFs/ff.c ${FATFS_DIR}/option/ccsbcs.c)
@ -90,3 +89,5 @@ if(APPLE)
endforeach() endforeach()
add_custom_target(opentx-simulators-bundle DEPENDS ${SIMULATOR_BUNDLES}) add_custom_target(opentx-simulators-bundle DEPENDS ${SIMULATOR_BUNDLES})
endif(APPLE) endif(APPLE)
PrintTargetReport("simu/libsimulator")

View file

@ -69,10 +69,15 @@ set(CMAKE_EXE_LINKER_FLAGS "-mcpu=${MCU} -mthumb -nostartfiles -lm -T${RADIO_SRC
add_executable(bootloader ${BOOTLOADER_SRC}) add_executable(bootloader ${BOOTLOADER_SRC})
add_dependencies(bootloader ${BITMAPS_TARGET} firmware_translations) add_dependencies(bootloader ${BITMAPS_TARGET} firmware_translations)
add_custom_command(
TARGET bootloader POST_BUILD
COMMAND arm-none-eabi-objcopy -O binary bootloader.elf bootloader.bin
)
if(PYTHONINTERP_FOUND) if(PYTHONINTERP_FOUND)
add_custom_command( add_custom_command(
TARGET bootloader POST_BUILD TARGET bootloader POST_BUILD
COMMAND arm-none-eabi-objcopy -O binary bootloader.elf bootloader.bin
COMMAND ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/bin2lbm.py bootloader.bin bootloader.lbm COMMAND ${PYTHON_EXECUTABLE} ${RADIO_DIRECTORY}/util/bin2lbm.py bootloader.bin bootloader.lbm
) )
endif() endif()
PrintTargetReport("bootloader")

View file

@ -1,38 +1,46 @@
set(GTEST_INCDIR /usr/include/gtest CACHE string "Location of Google Test includes") set(GTEST_ROOT /usr CACHE string "Base path to Google Test headers and source.")
set(GTEST_SRCDIR /usr/src/gtest CACHE string "Location of Google Test directory")
if(EXISTS "${GTEST_SRCDIR}/src/gtest-all.cc") find_path(GTEST_INCDIR gtest/gtest.h HINTS "${GTEST_ROOT}/include" DOC "Path to Google Test header files folder ('gtest/gtest.h').")
if(Qt5Widgets_FOUND) find_path(GTEST_SRCDIR src/gtest-all.cc HINTS "${GTEST_ROOT}" "${GTEST_ROOT}/src/gtest" DOC "Path of Google Test 'src' folder.")
add_library(gtests-lib STATIC EXCLUDE_FROM_ALL ${GTEST_SRCDIR}/src/gtest-all.cc )
target_include_directories(gtests-lib PUBLIC ${GTEST_INCDIR} PUBLIC ${GTEST_SRCDIR})
add_definitions(-DSIMU)
set(TESTS_PATH ${RADIO_SRC_DIRECTORY})
configure_file(${RADIO_SRC_DIRECTORY}/tests/location.h.in ${CMAKE_CURRENT_BINARY_DIR}/location.h @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
foreach(FILE ${SRC}) if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND)
set(RADIO_SRC ${RADIO_SRC} ../${FILE}) add_library(gtests-lib STATIC EXCLUDE_FROM_ALL ${GTEST_SRCDIR}/src/gtest-all.cc )
endforeach() target_include_directories(gtests-lib PUBLIC ${GTEST_INCDIR} ${GTEST_INCDIR}/gtest ${GTEST_SRCDIR})
add_definitions(-DSIMU)
file(GLOB TEST_SRC_FILES ${RADIO_SRC_DIRECTORY}/tests/*.cpp) set(TESTS_PATH ${RADIO_SRC_DIRECTORY})
configure_file(${RADIO_SRC_DIRECTORY}/tests/location.h.in ${CMAKE_CURRENT_BINARY_DIR}/location.h @ONLY)
if (${CMAKE_VERSION} VERSION_LESS 3.1.0}) include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(COMMON_CPP_FLAGS "${COMMON_FLAGS} -std=gnu++11")
message("USING -std=gnu++11") if(WIN32)
else() target_include_directories(gtests-lib PUBLIC ${WIN_INCLUDE_DIRS})
set(COMMON_CPP_FLAGS ${COMMON_FLAGS}) target_link_libraries(gtests-lib PRIVATE ${WIN_LINK_LIBRARIES})
endif() endif(WIN32)
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS} -g -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CPP_FLAGS} -g -O0") if(SDL_FOUND AND SIMU_AUDIO)
target_include_directories(gtests-lib PUBLIC ${SDL_INCLUDE_DIR})
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp) target_link_libraries(gtests-lib PRIVATE ${SDL_LIBRARY})
qt5_use_modules(gtests Core Widgets)
add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib)
target_link_libraries(gtests gtests-lib pthread)
message("Added optional gtests target")
else()
message("WARNING: Qt5 widgets not found, gtest target will not be available!")
endif() endif()
foreach(FILE ${SRC})
set(RADIO_SRC ${RADIO_SRC} ../${FILE})
endforeach()
file(GLOB TEST_SRC_FILES ${RADIO_SRC_DIRECTORY}/tests/*.cpp)
if(MINGW)
# struct packing breaks on MinGW w/out -mno-ms-bitfields: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52991 & http://stackoverflow.com/questions/24015852/struct-packing-and-alignment-with-mingw
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
endif()
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp ../targets/simu/simueeprom.cpp)
qt5_use_modules(gtests Core Widgets)
add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib)
target_link_libraries(gtests gtests-lib pthread)
message(STATUS "Added optional gtests target")
else() else()
message("WARNING: can't find gtests source, gtest target will not be available!") message(WARNING "WARNING: gtests target will not be available (check that GTEST_INCDIR, GTEST_SRCDIR, and Qt5Widgets are configured).")
endif() endif()

View file

@ -19,8 +19,106 @@
*/ */
#include <QApplication> #include <QApplication>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <memory>
#include "gtests.h" #include "gtests.h"
using ::testing::TestEventListener;
using ::testing::EmptyTestEventListener;
using ::testing::Test;
using ::testing::TestCase;
using ::testing::TestEventListeners;
using ::testing::TestInfo;
using ::testing::TestPartResult;
using ::testing::UnitTest;
using ::testing::InitGoogleTest;
namespace {
void printColorCode(int color)
{
#if !GTEST_OS_WINDOWS
if (isatty(fileno(stdout)))
fprintf(stdout, "\033[0;%dm", color);
#endif
}
/**
* Replaces gtest's PrettyUnitTestResultPrinter with something less verbose.
* Uses the default printer if/when the messages might be interesting,
* e.g. for full error info or tests summary.
*/
class TersePrinter : public EmptyTestEventListener {
public:
explicit TersePrinter(TestEventListener * prettyPrinter)
: prettyPrinter(prettyPrinter), currentTestInfo(NULL)
{
}
void OnTestProgramStart(const UnitTest & unit_test)
{
prettyPrinter->OnTestProgramStart(unit_test);
}
void OnTestIterationStart(const UnitTest & unit_test, int iteration)
{
printColorCode(36);
fprintf(stdout, "############ ");
fprintf(stdout, "Running %d test(s) from %d test case(s), iteration: %d.\n", unit_test.test_to_run_count(), unit_test.test_case_to_run_count(), iteration + 1);
printColorCode(0);
fflush(stdout);
}
void OnTestCaseStart(const TestCase & test_case)
{
prettyPrinter->OnTestCaseStart(test_case);
}
void OnTestStart(const TestInfo & test_info)
{
currentTestInfo = &test_info;
}
void OnTestPartResult(const TestPartResult & test_part_result)
{
if (test_part_result.failed()) {
prettyPrinter->OnTestStart(*currentTestInfo);
prettyPrinter->OnTestPartResult(test_part_result);
}
}
void OnTestEnd(const TestInfo & test_info)
{
currentTestInfo = NULL;
if (test_info.result()->Failed()) {
prettyPrinter->OnTestEnd(test_info);
}
else {
printColorCode(32);
fprintf(stdout, "+");
printColorCode(0);
fflush(stdout);
}
}
void OnTestCaseEnd(const TestCase & test_case)
{
fprintf(stdout, "\n");
fflush(stdout);
}
void OnTestIterationEnd(const UnitTest & unit_test, int iteration)
{
prettyPrinter->OnTestIterationEnd(unit_test, iteration);
}
void OnTestProgramEnd(const UnitTest & unit_test)
{
prettyPrinter->OnTestProgramEnd(unit_test);
}
private:
// gtest's default unit test result printer.
std::unique_ptr<TestEventListener> prettyPrinter;
// The currently running TestInfo, if any.
const TestInfo * currentTestInfo;
};
} // anonymous namespace
int32_t lastAct = 0; int32_t lastAct = 0;
uint16_t anaInValues[NUM_STICKS+NUM_POTS+NUM_SLIDERS] = { 0 }; uint16_t anaInValues[NUM_STICKS+NUM_POTS+NUM_SLIDERS] = { 0 };
uint16_t anaIn(uint8_t chan) uint16_t anaIn(uint8_t chan)
@ -53,6 +151,18 @@ int main(int argc, char **argv)
StartEepromThread(NULL); StartEepromThread(NULL);
menuLevel = 0; menuLevel = 0;
menuHandlers[0] = menuMainView; menuHandlers[0] = menuMainView;
::testing::InitGoogleTest(&argc, argv); InitGoogleTest(&argc, argv);
// use --verbose option to revert to gtest's default output format
bool verbose = false;
if (argc > 1 && !strcmp(argv[1], "--verbose"))
verbose = true;
if (!verbose) {
TestEventListeners & listeners = UnitTest::GetInstance()->listeners();
TestEventListener * defaultPrinter = listeners.Release(listeners.default_result_printer());
listeners.Append(new TersePrinter(defaultPrinter));
}
return RUN_ALL_TESTS(); return RUN_ALL_TESTS();
} }

View file

@ -27,7 +27,7 @@ else
fi fi
SRCDIR=$(dirname "$SCRIPT")/.. SRCDIR=$(dirname "$SCRIPT")/..
COMMON_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/opt/qt55" COMMON_OPTIONS="-DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/opt/qt55 -DWARNINGS_AS_ERRORS=YES -DVERBOSE_CMAKELISTS=YES -DCMAKE_RULE_MESSAGES=OFF -Wno-dev"
mkdir build || true mkdir build || true
cd build cd build
@ -86,42 +86,42 @@ make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break
# OpenTX on X7 # OpenTX on X7
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=X7 -DHELI=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=X7 -DHELI=YES ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
# OpenTX on X9D # OpenTX on X9D
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=X9D -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
# OpenTX on X9D+ # OpenTX on X9D+
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=X9D+ -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
# OpenTX on Taranis X9E # OpenTX on Taranis X9E
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=X9E -DHELI=YES -DLUA=YES -DGVARS=YES -DPPM_UNIT=PERCENT_PREC1 ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
# OpenTX on Horus beta boards # OpenTX on Horus beta boards
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=HORUS -DPCBREV=10 -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure
# OpenTX on Horus # OpenTX on Horus
rm -rf * rm -rf *
cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES -DWARNINGS_AS_ERRORS=YES ${SRCDIR} cmake ${COMMON_OPTIONS} -DPCB=HORUS -DHELI=YES -DLUA=YES -DGVARS=YES ${SRCDIR}
make -j${CORES} firmware make -j${CORES} firmware
make -j${CORES} simu make -j${CORES} simu
make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure make -j${CORES} gtests ; ./gtests --gtest_shuffle --gtest_repeat=5 --gtest_break_on_failure