From 93f0d0d528f3f405e04dab778a3d8f5717e4849a Mon Sep 17 00:00:00 2001 From: Torsten Rasmussen Date: Fri, 13 Aug 2021 23:24:11 +0200 Subject: [PATCH] armclang: warn on non-Ninja generator for CMake 3.20. When using ARMClang linker and scatter files (armlink) then all libraries are linked as object libraries using `$`. CMake version 3.20 only has limited support for such linking: > Referencing $ in target_link_libraries calls worked > in versions of CMake prior to 3.21 for some cases, but was not fully > supported. One of those cases that do not work is Unix Makefiles generators. As only Ninja is currently verified to work, this commit will check the CMake version in use and the generator, and if CMake version <=3.21 is used with non-Ninja generator then an error is raised informing user to either use Ninja generator or update CMake. As the Ninja generator has been confirmed to work as expected, then that generator is accepted with CMake 3.20 and older. Signed-off-by: Torsten Rasmussen --- cmake/toolchain/armclang/generic.cmake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cmake/toolchain/armclang/generic.cmake b/cmake/toolchain/armclang/generic.cmake index 8a94102dd15..769ba2c2ff0 100644 --- a/cmake/toolchain/armclang/generic.cmake +++ b/cmake/toolchain/armclang/generic.cmake @@ -4,6 +4,15 @@ set_ifndef(ARMCLANG_TOOLCHAIN_PATH "$ENV{ARMCLANG_TOOLCHAIN_PATH}") set(ARMCLANG_TOOLCHAIN_PATH ${ARMCLANG_TOOLCHAIN_PATH} CACHE PATH "armclang tools install directory") assert(ARMCLANG_TOOLCHAIN_PATH "ARMCLANG_TOOLCHAIN_PATH is not set") +if(${CMAKE_VERSION} VERSION_LESS 3.21 + AND NOT ${CMAKE_GENERATOR} STREQUAL Ninja +) + message(FATAL_ERROR "ARMClang Toolchain and '${CMAKE_GENERATOR}' generator " + "doesn't work properly for target object files on CMake version: " + "${CMAKE_VERSION}. Use the 'Ninja' generator or update to CMake >= 3.21." + ) +endif() + if(NOT EXISTS ${ARMCLANG_TOOLCHAIN_PATH}) message(FATAL_ERROR "Nothing found at ARMCLANG_TOOLCHAIN_PATH: '${ARMCLANG_TOOLCHAIN_PATH}'") endif()