This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, master has been updated via 64a7f491ef8ab6f70a77f89c91d1e7e9d549333e (commit) via 7b0abaac318b080d9d9044a2665541b840087c89 (commit) from 92b7a8fa2976208e3f7e5f1c5db422982b0dc1d4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=64a7f491ef8ab6f70a77f89c91d1e7e9d549333e commit 64a7f491ef8ab6f70a77f89c91d1e7e9d549333e Merge: 92b7a8f 7b0abaa Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu May 16 14:27:19 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Thu May 16 10:27:44 2019 -0400 Merge topic 'armclang' 7b0abaac31 ARMClang: Add support for Clang-based ARM compiler Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3315 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7b0abaac318b080d9d9044a2665541b840087c89 commit 7b0abaac318b080d9d9044a2665541b840087c89 Author: Johan Stridkvist <battletw...@gmail.com> AuthorDate: Mon May 13 15:05:47 2019 +0200 Commit: Brad King <brad.k...@kitware.com> CommitDate: Tue May 14 14:59:55 2019 -0400 ARMClang: Add support for Clang-based ARM compiler Fixes: #18215 diff --git a/Help/release/dev/armclang.rst b/Help/release/dev/armclang.rst new file mode 100644 index 0000000..da82032 --- /dev/null +++ b/Help/release/dev/armclang.rst @@ -0,0 +1,4 @@ +armclang +-------- + +* Support for the Clang-based ARM compiler was added with compiler id ``ARMClang``. diff --git a/Help/variable/CMAKE_LANG_COMPILER_ID.rst b/Help/variable/CMAKE_LANG_COMPILER_ID.rst index 2bb39798..16d97ee 100644 --- a/Help/variable/CMAKE_LANG_COMPILER_ID.rst +++ b/Help/variable/CMAKE_LANG_COMPILER_ID.rst @@ -12,6 +12,7 @@ include: ADSP = Analog VisualDSP++ (analog.com) AppleClang = Apple Clang (apple.com) ARMCC = ARM Compiler (arm.com) + ARMClang = ARM Compiler based on Clang (arm.com) Bruce = Bruce C Compiler CCur = Concurrent Fortran (ccur.com) Clang = LLVM Clang (clang.llvm.org) diff --git a/Modules/CMakeCompilerIdDetection.cmake b/Modules/CMakeCompilerIdDetection.cmake index ed288f5..bb573b7 100644 --- a/Modules/CMakeCompilerIdDetection.cmake +++ b/Modules/CMakeCompilerIdDetection.cmake @@ -76,6 +76,7 @@ function(compiler_id_detection outvar lang) SCO ARMCC AppleClang + ARMClang Clang GNU MSVC diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake index eabb8b5..fb005ff 100644 --- a/Modules/CMakeDetermineASMCompiler.cmake +++ b/Modules/CMakeDetermineASMCompiler.cmake @@ -66,6 +66,10 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID) set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_AppleClang "--version") set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_AppleClang "(Apple LLVM version)") + list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS ARMClang ) + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_ARMClang "--version") + set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_ARMClang "armclang") + list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS HP ) set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_HP "-V") set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_HP "HP C") diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake index 3ec534f..495d7e8 100644 --- a/Modules/CMakeDetermineCCompiler.cmake +++ b/Modules/CMakeDetermineCCompiler.cmake @@ -82,6 +82,9 @@ else() # Try compiling K&R-compatible code (needed by Bruce C Compiler). "-D__CLASSIC_C__" + + # ARMClang need target options + "--target=arm-arm-none-eabi -mcpu=cortex-m3" ) endif() diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake index 68cb9fe..afcd956 100644 --- a/Modules/CMakeDetermineCXXCompiler.cmake +++ b/Modules/CMakeDetermineCXXCompiler.cmake @@ -77,6 +77,9 @@ else() # IAR does not detect language automatically "--c++" "--ec++" + + # ARMClang need target options + "--target=arm-arm-none-eabi -mcpu=cortex-m3" ) endif() diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 746a806..1cd919a 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -28,6 +28,7 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src) foreach(testflags ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS_FIRST} "" ${CMAKE_${lang}_COMPILER_ID_TEST_FLAGS}) + separate_arguments(testflags UNIX_COMMAND "${testflags}") CMAKE_DETERMINE_COMPILER_ID_BUILD("${lang}" "${testflags}" "${userflags}" "${src}") CMAKE_DETERMINE_COMPILER_ID_MATCH_VENDOR("${lang}" "${COMPILER_${lang}_PRODUCED_OUTPUT}") if(CMAKE_${lang}_COMPILER_ID) diff --git a/Modules/Compiler/ARMCC-ASM.cmake b/Modules/Compiler/ARMCC-ASM.cmake index 539d525..5819fc7 100644 --- a/Modules/Compiler/ARMCC-ASM.cmake +++ b/Modules/Compiler/ARMCC-ASM.cmake @@ -4,4 +4,4 @@ set(CMAKE_ASM_OUTPUT_EXTENSION ".o") set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1) set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>") -set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa) +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS S;s;asm;msa) diff --git a/Modules/Compiler/ARMCC-ASM.cmake b/Modules/Compiler/ARMClang-ASM.cmake similarity index 50% copy from Modules/Compiler/ARMCC-ASM.cmake copy to Modules/Compiler/ARMClang-ASM.cmake index 539d525..ceff3e8 100644 --- a/Modules/Compiler/ARMCC-ASM.cmake +++ b/Modules/Compiler/ARMClang-ASM.cmake @@ -1,7 +1,9 @@ -include(Compiler/ARMCC) +include(Compiler/ARMClang) set(CMAKE_ASM_OUTPUT_EXTENSION ".o") set(CMAKE_ASM_OUTPUT_EXTENSION_REPLACE 1) -set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <INCLUDES> <FLAGS> -o <OBJECT> <SOURCE>") -set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS s;asm;msa) +set(CMAKE_ASM_COMPILE_OBJECT "<CMAKE_ASM_COMPILER> <INCLUDES> <FLAGS> -c -o <OBJECT> <SOURCE>") +set(CMAKE_ASM_SOURCE_FILE_EXTENSIONS S;s;asm;msa) + +__compiler_armclang(ASM) diff --git a/Modules/Compiler/ARMClang-C-FeatureTests.cmake b/Modules/Compiler/ARMClang-C-FeatureTests.cmake new file mode 100644 index 0000000..ef79229 --- /dev/null +++ b/Modules/Compiler/ARMClang-C-FeatureTests.cmake @@ -0,0 +1 @@ +include(Compiler/Clang-C-FeatureTests) diff --git a/Modules/Compiler/ARMClang-C.cmake b/Modules/Compiler/ARMClang-C.cmake new file mode 100644 index 0000000..0a64a8a --- /dev/null +++ b/Modules/Compiler/ARMClang-C.cmake @@ -0,0 +1,15 @@ +include(Compiler/Clang-C) +include(Compiler/ARMClang) +__compiler_armclang(C) + +set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90") +set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90") +set(CMAKE_C90_STANDARD__HAS_FULL_SUPPORT ON) + +set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99") +set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99") +set(CMAKE_C99_STANDARD__HAS_FULL_SUPPORT ON) + +set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11") +set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11") +set(CMAKE_C11_STANDARD__HAS_FULL_SUPPORT ON) diff --git a/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake b/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake new file mode 100644 index 0000000..e038e80 --- /dev/null +++ b/Modules/Compiler/ARMClang-CXX-FeatureTests.cmake @@ -0,0 +1 @@ +include(Compiler/Clang-CXX-FeatureTests) diff --git a/Modules/Compiler/ARMClang-CXX.cmake b/Modules/Compiler/ARMClang-CXX.cmake new file mode 100644 index 0000000..5dfb401 --- /dev/null +++ b/Modules/Compiler/ARMClang-CXX.cmake @@ -0,0 +1,3 @@ +include(Compiler/Clang-CXX) +include(Compiler/ARMClang) +__compiler_armclang(CXX) diff --git a/Modules/Compiler/ARMClang-DetermineCompiler.cmake b/Modules/Compiler/ARMClang-DetermineCompiler.cmake new file mode 100644 index 0000000..eb0de53 --- /dev/null +++ b/Modules/Compiler/ARMClang-DetermineCompiler.cmake @@ -0,0 +1,10 @@ +# ARMClang Toolchain +set(_compiler_id_pp_test "defined(__clang__) && defined(__ARMCOMPILER_VERSION)") + +set(_compiler_id_version_compute " + # define @PREFIX@COMPILER_VERSION_MAJOR @MACRO_DEC@(__ARMCOMPILER_VERSION/1000000) + # define @PREFIX@COMPILER_VERSION_MINOR @MACRO_DEC@(__ARMCOMPILER_VERSION/10000 % 100) + # define @PREFIX@COMPILER_VERSION_PATCH @MACRO_DEC@(__ARMCOMPILER_VERSION % 10000)") + +string(APPEND _compiler_id_version_compute " +# define @PREFIX@COMPILER_VERSION_INTERNAL @MACRO_DEC@(__ARMCOMPILER_VERSION)") diff --git a/Modules/Compiler/ARMClang.cmake b/Modules/Compiler/ARMClang.cmake new file mode 100644 index 0000000..5ca49df --- /dev/null +++ b/Modules/Compiler/ARMClang.cmake @@ -0,0 +1,69 @@ +if(_ARMClang_CMAKE_LOADED) + return() +endif() +set(_ARMClang_CMAKE_LOADED TRUE) + +get_filename_component(_CMAKE_C_TOOLCHAIN_LOCATION "${CMAKE_C_COMPILER}" PATH) +get_filename_component(_CMAKE_CXX_TOOLCHAIN_LOCATION "${CMAKE_CXX_COMPILER}" PATH) + +set(CMAKE_EXECUTABLE_SUFFIX ".elf") + +find_program(CMAKE_ARMClang_LINKER armlink HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" ) +find_program(CMAKE_ARMClang_AR armar HINTS "${_CMAKE_C_TOOLCHAIN_LOCATION}" "${_CMAKE_CXX_TOOLCHAIN_LOCATION}" ) + +set(CMAKE_LINKER "${CMAKE_ARMClang_LINKER}" CACHE FILEPATH "The ARMClang linker" FORCE) +mark_as_advanced(CMAKE_ARMClang_LINKER) +set(CMAKE_AR "${CMAKE_ARMClang_AR}" CACHE FILEPATH "The ARMClang archiver" FORCE) +mark_as_advanced(CMAKE_ARMClang_AR) + +# get compiler supported cpu list +function(__armclang_set_processor_list lang out_var) + execute_process(COMMAND "${CMAKE_${lang}_COMPILER}" --target=${CMAKE_${lang}_COMPILER_TARGET} -mcpu=list + OUTPUT_VARIABLE processor_list + ERROR_VARIABLE processor_list) + string(REGEX MATCHALL "-mcpu=([^ \n]*)" processor_list "${processor_list}") + string(REGEX REPLACE "-mcpu=" "" processor_list "${processor_list}") + set(${out_var} "${processor_list}" PARENT_SCOPE) +endfunction() + +# check processor is in list +function(__armclang_check_processor processor list out_var) + string(TOLOWER "${processor}" processor) + if(POLICY CMP0057) + cmake_policy(SET CMP0057 NEW) + endif() + if(processor IN_LIST list) + set(${out_var} TRUE PARENT_SCOPE) + else() + set(${out_var} FALSE PARENT_SCOPE) + endif() +endfunction() + +macro(__compiler_armclang lang) + if(NOT CMAKE_${lang}_COMPILER_TARGET) + set(CMAKE_${lang}_COMPILER_TARGET arm-arm-none-eabi) + endif() + if(NOT CMAKE_${lang}_COMPILER_PROCESSOR_LIST) + __armclang_set_processor_list(${lang} CMAKE_${lang}_COMPILER_PROCESSOR_LIST) + endif() + if(NOT CMAKE_SYSTEM_PROCESSOR) + message(FATAL_ERROR " CMAKE_SYSTEM_PROCESSOR must be set for ARMClang\n" + " Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n") + else() + __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}" _CMAKE_${lang}_CHECK_RESULT) + if(NOT _CMAKE_${lang}_CHECK_RESULT) + message(FATAL_ERROR " System processor '${CMAKE_SYSTEM_PROCESSOR}' not supported by ARMClang ${lang} compiler\n" + " Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n") + endif() + unset(_CMAKE_${lang}_CHECK_RESULT) + endif() + string(APPEND CMAKE_${lang}_FLAGS_INIT "-mcpu=${CMAKE_SYSTEM_PROCESSOR}") + string(APPEND CMAKE_${lang}_LINK_FLAGS "--cpu=${CMAKE_SYSTEM_PROCESSOR}") + + set(CMAKE_${lang}_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS> -o <TARGET> --list <TARGET_BASE>.map") + set(CMAKE_${lang}_CREATE_STATIC_LIBRARY "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_${lang}_ARCHIVE_CREATE "<CMAKE_AR> --create -cr <TARGET> <LINK_FLAGS> <OBJECTS>") + set(CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG "--via=") + set(CMAKE_${lang}_OUTPUT_EXTENSION ".o") + set(CMAKE_${lang}_OUTPUT_EXTENSION_REPLACE 1) +endmacro() ----------------------------------------------------------------------- Summary of changes: Help/release/dev/armclang.rst | 4 ++ Help/variable/CMAKE_LANG_COMPILER_ID.rst | 1 + Modules/CMakeCompilerIdDetection.cmake | 1 + Modules/CMakeDetermineASMCompiler.cmake | 4 ++ Modules/CMakeDetermineCCompiler.cmake | 3 + Modules/CMakeDetermineCXXCompiler.cmake | 3 + Modules/CMakeDetermineCompilerId.cmake | 1 + Modules/Compiler/ARMCC-ASM.cmake | 2 +- .../{ARMCC-ASM.cmake => ARMClang-ASM.cmake} | 8 ++- Modules/Compiler/ARMClang-C-FeatureTests.cmake | 1 + Modules/Compiler/ARMClang-C.cmake | 15 +++++ Modules/Compiler/ARMClang-CXX-FeatureTests.cmake | 1 + Modules/Compiler/ARMClang-CXX.cmake | 3 + Modules/Compiler/ARMClang-DetermineCompiler.cmake | 10 ++++ Modules/Compiler/ARMClang.cmake | 69 ++++++++++++++++++++++ 15 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 Help/release/dev/armclang.rst copy Modules/Compiler/{ARMCC-ASM.cmake => ARMClang-ASM.cmake} (50%) create mode 100644 Modules/Compiler/ARMClang-C-FeatureTests.cmake create mode 100644 Modules/Compiler/ARMClang-C.cmake create mode 100644 Modules/Compiler/ARMClang-CXX-FeatureTests.cmake create mode 100644 Modules/Compiler/ARMClang-CXX.cmake create mode 100644 Modules/Compiler/ARMClang-DetermineCompiler.cmake create mode 100644 Modules/Compiler/ARMClang.cmake hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org https://cmake.org/mailman/listinfo/cmake-commits