From 969c04e815a05cddd9250aba704ad959edda4b3e Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Thu, 31 Mar 2022 17:59:18 +0200 Subject: [PATCH] Cleanup and allow for setting ARM_TOOLCHAIN_DIR via command line --- CMakeLists.txt | 3 ++ cmake/GenericDefinitions.cmake | 5 ++- cmake/Macros.cmake | 26 ------------- cmake/NativeTargets.cmake | 1 + cmake/toolchain/arm-none-eabi.cmake | 57 ++++++++++------------------- radio/src/CMakeLists.txt | 9 ++--- 6 files changed, 29 insertions(+), 72 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 53bc307fe..a0b85b6b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,6 +106,9 @@ message(STATUS "EdgeTX ${VERSION} @ ${GIT_STR}") if(NATIVE_BUILD) include(NativeTargets) +else() + # Prevent CMake warnings + set(IGNORE "${SDL_LIBRARY_PATH}") endif() add_subdirectory(${RADIO_SRC_DIR}) diff --git a/cmake/GenericDefinitions.cmake b/cmake/GenericDefinitions.cmake index 2fda0c6b7..5f97f15ba 100644 --- a/cmake/GenericDefinitions.cmake +++ b/cmake/GenericDefinitions.cmake @@ -47,9 +47,10 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake) +string(TIMESTAMP DATE "%Y-%m-%d") +string(TIMESTAMP TIME "%H:%M:%S") + include(Macros) -today(DATE) -now(TIME) git_id(GIT_STR) # Python check diff --git a/cmake/Macros.cmake b/cmake/Macros.cmake index 06fbb244b..348f541dc 100644 --- a/cmake/Macros.cmake +++ b/cmake/Macros.cmake @@ -1,29 +1,3 @@ -macro(today RESULT) - if(WIN32) - execute_process(COMMAND "cmd" " /C date /T" OUTPUT_VARIABLE ${RESULT}) - string(REGEX REPLACE "[^0-9]*([0-9]+)[^0-9]([0-9]+)[^0-9]([0-9]+).*" "\\1-\\2-\\3" ${RESULT} ${${RESULT}}) - elseif(UNIX) - execute_process(COMMAND "date" "+%Y-%m-%d" OUTPUT_VARIABLE ${RESULT}) - string(REGEX REPLACE "(....)-(..)-(..).*" "\\1-\\2-\\3" ${RESULT} ${${RESULT}}) - else(WIN32) - message(WARNING "date not implemented") - set(${RESULT} 00-00-0000) - endif(WIN32) -endmacro(today) - -macro(now RESULT) - if(WIN32) - execute_process(COMMAND "cmd" " /C time /T" OUTPUT_VARIABLE ${RESULT}) - string(REGEX REPLACE "(..):(..).*" "\\1:\\2:00" ${RESULT} ${${RESULT}}) - elseif(UNIX) - execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE ${RESULT}) - string(REGEX REPLACE "(..):(..):(..).*" "\\1:\\2:\\3" ${RESULT} ${${RESULT}}) - else(WIN32) - message(WARNING "time not implemented") - set(${RESULT} 00:00:00) - endif(WIN32) -endmacro(now) - find_package(Git) macro(git_id RESULT) diff --git a/cmake/NativeTargets.cmake b/cmake/NativeTargets.cmake index df34c7d43..9d2ef2416 100644 --- a/cmake/NativeTargets.cmake +++ b/cmake/NativeTargets.cmake @@ -73,3 +73,4 @@ else() ) endif() +set(IGNORE "${ARM_TOOLCHAIN_DIR}") diff --git a/cmake/toolchain/arm-none-eabi.cmake b/cmake/toolchain/arm-none-eabi.cmake index 38581cd75..7cbf3bf0c 100644 --- a/cmake/toolchain/arm-none-eabi.cmake +++ b/cmake/toolchain/arm-none-eabi.cmake @@ -1,70 +1,51 @@ # arm-none-eabi toolchain set(CMAKE_SYSTEM_NAME Generic) - -set(TOOLCHAIN_PREFIX arm-none-eabi-) set(CMAKE_SYSTEM_PROCESSOR arm) -if(MINGW OR CYGWIN OR WIN32) - set(UTIL_SEARCH_CMD where) -elseif(UNIX OR APPLE) - set(UTIL_SEARCH_CMD which) -endif() - -execute_process( - COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc - OUTPUT_VARIABLE BINUTILS_PATH - OUTPUT_STRIP_TRAILING_WHITESPACE -) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -get_filename_component(ARM_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY) - -# Without that flag CMake is not able to pass test compilation check -if (${CMAKE_VERSION} VERSION_EQUAL "3.6.0" OR ${CMAKE_VERSION} VERSION_GREATER "3.6") - set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) -else() - set(CMAKE_EXE_LINKER_FLAGS_INIT "--specs=nosys.specs") +if(MINGW OR WIN32) + set(EXE_SUFFIX ".exe") endif() +if(ARM_TOOLCHAIN_DIR) + cmake_path(SET ARM_TOOLCHAIN_DIR NORMALIZE ${ARM_TOOLCHAIN_DIR}) + set(ARM_TOOLCHAIN_DIR "${ARM_TOOLCHAIN_DIR}/") +endif() + +set(CMAKE_AR ${ARM_TOOLCHAIN_DIR}arm-none-eabi-ar${EXE_SUFFIX}) +set(CMAKE_ASM_COMPILER ${ARM_TOOLCHAIN_DIR}arm-none-eabi-gcc${EXE_SUFFIX}) +set(CMAKE_C_COMPILER ${ARM_TOOLCHAIN_DIR}arm-none-eabi-gcc${EXE_SUFFIX}) +set(CMAKE_CXX_COMPILER ${ARM_TOOLCHAIN_DIR}arm-none-eabi-g++${EXE_SUFFIX}) +set(CMAKE_LINKER ${ARM_TOOLCHAIN_DIR}arm-none-eabi-ld${EXE_SUFFIX}) +set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}arm-none-eabi-objcopy${EXE_SUFFIX} CACHE INTERNAL "") +set(CMAKE_RANLIB ${ARM_TOOLCHAIN_DIR}arm-none-eabi-ranlib${EXE_SUFFIX} CACHE INTERNAL "") +set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}arm-none-eabi-size${EXE_SUFFIX} CACHE INTERNAL "") +set(CMAKE_STRIP ${ARM_TOOLCHAIN_DIR}arm-none-eabi-strip${EXE_SUFFIX} CACHE INTERNAL "") +set(CMAKE_GCOV ${ARM_TOOLCHAIN_DIR}arm-none-eabi-gcov${EXE_SUFFIX} CACHE INTERNAL "") + # Generate .elf files set(CMAKE_EXECUTABLE_SUFFIX ".elf") set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf") -set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc) -set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) -set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++) - # Default C compiler flags set(CMAKE_C_FLAGS_DEBUG_INIT "-g3 -Og -Wall -pedantic -DDEBUG") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG_INIT}" CACHE STRING "" FORCE) set(CMAKE_C_FLAGS_RELEASE_INIT "-O3 -Wall") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE_INIT}" CACHE STRING "" FORCE) -set(CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -Wall") -set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL_INIT}" CACHE STRING "" FORCE) -set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -Wall") -set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING "" FORCE) # Default C++ compiler flags set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g3 -Og -Wall -pedantic -DDEBUG") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG_INIT}" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -Wall") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE_INIT}" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -Wall") -set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL_INIT}" CACHE STRING "" FORCE) -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g -Wall") -set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT}" CACHE STRING "" FORCE) # customize linker command set(CMAKE_EXE_LINKER_FLAGS "") set(CMAKE_C_LINK_EXECUTABLE " -o ") set(CMAKE_CXX_LINK_EXECUTABLE " -o ") -set(CMAKE_OBJCOPY ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}objcopy CACHE INTERNAL "objcopy tool") -set(CMAKE_SIZE_UTIL ${ARM_TOOLCHAIN_DIR}/${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool") - -#set(CMAKE_SYSROOT ${ARM_TOOLCHAIN_DIR}/../arm-none-eabi) -set(CMAKE_SYSROOT "") -set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH}) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/radio/src/CMakeLists.txt b/radio/src/CMakeLists.txt index 539ad14f6..ab5051135 100644 --- a/radio/src/CMakeLists.txt +++ b/radio/src/CMakeLists.txt @@ -534,14 +534,11 @@ endif() 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_C_FLAGS_RELEASE "${FIRMWARE_C_FLAGS}") + 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 "") +set(CMAKE_CXX_FLAGS_RELEASE "${FIRMWARE_CXX_FLAGS}") find_program(BASH bash HINTS "c:/cygwin/bin/" "c:/msys/bin/"