From ac1dd050975cff288c56120ea8365a8a4c5d2cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alan=20Dragomirecky=CC=81?= Date: Tue, 13 Apr 2021 10:17:03 +0200 Subject: [PATCH] Initial support for AnyAvrGcc toolchain --- cmake/AnyAvrGcc.cmake | 86 +++++++++++++++++++++++++++++++++++++++++++ cmake/Utilities.cmake | 2 +- utils/bootstrap.py | 2 +- 3 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 cmake/AnyAvrGcc.cmake diff --git a/cmake/AnyAvrGcc.cmake b/cmake/AnyAvrGcc.cmake new file mode 100644 index 0000000..d582b53 --- /dev/null +++ b/cmake/AnyAvrGcc.cmake @@ -0,0 +1,86 @@ +get_filename_component(PROJECT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY) +include("${PROJECT_CMAKE_DIR}/Utilities.cmake") +set(CMAKE_SYSTEM_NAME Generic) +set(CMAKE_SYSTEM_PROCESSOR avr) + +# +# Utilities + +if(MINGW + OR CYGWIN + OR WIN32 + ) + set(UTIL_SEARCH_CMD where) + set(EXECUTABLE_SUFFIX ".exe") +elseif(UNIX OR APPLE) + set(UTIL_SEARCH_CMD which) + set(EXECUTABLE_SUFFIX "") +endif() + +set(TOOLCHAIN_PREFIX avr-) + +# +# Looking up the toolchain +# + +if(GCC_TOOLCHAIN_DIR) + # using toolchain set by AvrGcc.cmake (locked version) + set(BINUTILS_PATH "${AVR_TOOLCHAIN_DIR}/bin") +else() + # search for ANY avr-gcc toolchain + execute_process( + COMMAND ${UTIL_SEARCH_CMD} ${TOOLCHAIN_PREFIX}gcc + OUTPUT_VARIABLE AVR_GCC_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE FIND_RESULT + ) + # found? + if(NOT "${FIND_RESULT}" STREQUAL "0") + message(FATAL_ERROR "avr-gcc not found") + endif() + get_filename_component(BINUTILS_PATH "${AVR_GCC_PATH}" DIRECTORY) + get_filename_component(AVR_TOOLCHAIN_DIR ${BINUTILS_PATH} DIRECTORY) +endif() + +# +# Setup CMake +# + +# Without that flag CMake is not able to pass test compilation check +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +set(CMAKE_C_COMPILER + "${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc${EXECUTABLE_SUFFIX}" + CACHE FILEPATH "" FORCE + ) +set(CMAKE_ASM_COMPILER + "${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}gcc${EXECUTABLE_SUFFIX}" + CACHE FILEPATH "" FORCE + ) +set(CMAKE_CXX_COMPILER + "${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}g++${EXECUTABLE_SUFFIX}" + CACHE FILEPATH "" FORCE + ) +set(CMAKE_EXE_LINKER_FLAGS_INIT + "" + CACHE STRING "" FORCE + ) + +set(CMAKE_ASM_COMPILE_OBJECT + " -o -c " + CACHE STRING "" FORCE + ) + +set(CMAKE_OBJCOPY + "${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}objcopy${EXECUTABLE_SUFFIX}" + CACHE INTERNAL "objcopy tool" + ) +set(CMAKE_SIZE_UTIL + "${BINUTILS_PATH}/${TOOLCHAIN_PREFIX}size${EXECUTABLE_SUFFIX}" + CACHE INTERNAL "size tool" + ) + +set(CMAKE_FIND_ROOT_PATH "${ARM_TOOLCHAIN_DIR}") +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/cmake/Utilities.cmake b/cmake/Utilities.cmake index ffeb1a6..8a43d91 100644 --- a/cmake/Utilities.cmake +++ b/cmake/Utilities.cmake @@ -9,7 +9,7 @@ endif() function(get_recommended_gcc_version var) execute_process( COMMAND "${Python3_EXECUTABLE}" "${PROJECT_ROOT_DIR}/utils/bootstrap.py" - "--print-dependency-version" "gcc-arm-none-eabi" + "--print-dependency-version" "gcc-avr" OUTPUT_VARIABLE RECOMMENDED_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE RESULT_VARIABLE RETVAL diff --git a/utils/bootstrap.py b/utils/bootstrap.py index 25d8016..5ee1aaf 100755 --- a/utils/bootstrap.py +++ b/utils/bootstrap.py @@ -44,7 +44,7 @@ dependencies = { 'Darwin': 'https://github.com/Kitware/CMake/releases/download/v3.15.5/cmake-3.15.5-Darwin-x86_64.tar.gz', }, }, - 'avr8-gnu-toolchain': { + 'gcc-avr': { 'version': '5.4.0', 'url': { 'Linux': 'https://xxxarmkeil.blob.core.windows.net/developer/Files/downloads/gnu-rm/7-2018q2/gcc-arm-none-eabi-7-2018-q2-update-linux.tar.bz2',