|
|
@@ -3,6 +3,9 @@ if(_ARMClang_CMAKE_LOADED)
|
|
|
endif()
|
|
|
set(_ARMClang_CMAKE_LOADED TRUE)
|
|
|
|
|
|
+# Save the CMP0123 setting in a variable used both below and by try_compile.
|
|
|
+cmake_policy(GET CMP0123 CMAKE_ARMClang_CMP0123)
|
|
|
+
|
|
|
cmake_policy(PUSH)
|
|
|
cmake_policy(SET CMP0057 NEW) # if IN_LIST
|
|
|
|
|
|
@@ -82,36 +85,53 @@ macro(__compiler_armclang lang)
|
|
|
if(NOT CMAKE_${lang}_COMPILER_ARCH_LIST)
|
|
|
__armclang_set_arch_list(${lang} CMAKE_${lang}_COMPILER_ARCH_LIST)
|
|
|
endif()
|
|
|
- if(NOT CMAKE_SYSTEM_PROCESSOR AND NOT CMAKE_SYSTEM_ARCH)
|
|
|
- message(FATAL_ERROR " CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
|
|
|
- " Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
|
|
|
- " Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
|
|
|
- else()
|
|
|
- __armclang_check_processor("${CMAKE_SYSTEM_ARCH}" "${CMAKE_${lang}_COMPILER_ARCH_LIST}" _CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
- if( _CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
- string(APPEND CMAKE_${lang}_FLAGS_INIT " -march=${CMAKE_SYSTEM_ARCH}")
|
|
|
- set(__march_flag_set TRUE)
|
|
|
+
|
|
|
+ # CMAKE_SYSTEM_PROCESSOR and CMAKE_SYSTEM_ARCH are not sufficient because they provide no
|
|
|
+ # information of additional CPU features needed in `-mcpu=<name>[+[no]<feature>+...]`.
|
|
|
+ # The automatic setting of compile and link options is deprecated and projects should specify their own.
|
|
|
+ cmake_policy(GET CMP0123 policy_CMP0123)
|
|
|
+ if(NOT "x${CMAKE_ARMClang_CMP0123}x" STREQUAL "xNEWx")
|
|
|
+ if(NOT "x${CMAKE_ARMClang_CMP0123}x" STREQUAL "xOLDx")
|
|
|
+ cmake_policy(GET_WARNING CMP0123 _cmp0123_warning)
|
|
|
+ message(AUTHOR_WARNING
|
|
|
+ "${_cmp0123_warning}\n"
|
|
|
+ "For compatibility, CMake will automatically add cpu/arch flags based "
|
|
|
+ "on the CMAKE_SYSTEM_PROCESSOR and/or CMAKE_SYSTEM_ARCH variables."
|
|
|
+ )
|
|
|
endif()
|
|
|
- __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}" _CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
- if(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
- string(APPEND CMAKE_${lang}_FLAGS_INIT " -mcpu=${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
- set(__mcpu_flag_set TRUE)
|
|
|
+
|
|
|
+ if(NOT CMAKE_SYSTEM_PROCESSOR AND NOT CMAKE_SYSTEM_ARCH)
|
|
|
+ message(FATAL_ERROR " CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
|
|
|
+ " Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
|
|
|
+ " Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
|
|
|
+ else()
|
|
|
+ __armclang_check_processor("${CMAKE_SYSTEM_ARCH}" "${CMAKE_${lang}_COMPILER_ARCH_LIST}" _CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
+ if( _CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
+ string(APPEND CMAKE_${lang}_FLAGS_INIT " -march=${CMAKE_SYSTEM_ARCH}")
|
|
|
+ set(__march_flag_set TRUE)
|
|
|
+ endif()
|
|
|
+ __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}" _CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
+ if(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
+ string(APPEND CMAKE_${lang}_FLAGS_INIT " -mcpu=${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
+ set(__mcpu_flag_set TRUE)
|
|
|
+ endif()
|
|
|
+ if(NOT __march_flag_set AND NOT __mcpu_flag_set)
|
|
|
+ message(FATAL_ERROR "At least one of the variables CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
|
|
|
+ "Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
|
|
|
+ " Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
|
|
|
+ endif()
|
|
|
+ unset(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
+ unset(_CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
endif()
|
|
|
- if(NOT __march_flag_set AND NOT __mcpu_flag_set)
|
|
|
- message(FATAL_ERROR "At least one of the variables CMAKE_SYSTEM_PROCESSOR or CMAKE_SYSTEM_ARCH must be set for ARMClang\n"
|
|
|
- "Supported processor: ${CMAKE_${lang}_COMPILER_PROCESSOR_LIST}\n"
|
|
|
- " Supported Architecture: ${CMAKE_${lang}_COMPILER_ARCH_LIST}")
|
|
|
+
|
|
|
+ #check if CMAKE_SYSTEM_PROCESSOR belongs to supported cpu list for armlink
|
|
|
+ __armlink_set_cpu_list( ${lang} CMAKE_LINKER_CPU_LIST)
|
|
|
+ list(TRANSFORM CMAKE_LINKER_CPU_LIST TOLOWER)
|
|
|
+ __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_LINKER_CPU_LIST}" _CMAKE_CHECK_LINK_CPU_RESULT)
|
|
|
+ if(_CMAKE_CHECK_LINK_CPU_RESULT)
|
|
|
+ string(APPEND CMAKE_${lang}_LINK_FLAGS " --cpu=${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
endif()
|
|
|
- unset(_CMAKE_${lang}_CHECK_PROCESSOR_RESULT)
|
|
|
- unset(_CMAKE_${lang}_CHECK_ARCH_RESULT)
|
|
|
- endif()
|
|
|
|
|
|
- #check if CMAKE_SYSTEM_PROCESSOR belongs to supported cpu list for armlink
|
|
|
- __armlink_set_cpu_list( ${lang} CMAKE_LINKER_CPU_LIST)
|
|
|
- list(TRANSFORM CMAKE_LINKER_CPU_LIST TOLOWER)
|
|
|
- __armclang_check_processor("${CMAKE_SYSTEM_PROCESSOR}" "${CMAKE_LINKER_CPU_LIST}" _CMAKE_CHECK_LINK_CPU_RESULT)
|
|
|
- if(_CMAKE_CHECK_LINK_CPU_RESULT)
|
|
|
- string(APPEND CMAKE_${lang}_LINK_FLAGS " --cpu=${CMAKE_SYSTEM_PROCESSOR}")
|
|
|
endif()
|
|
|
|
|
|
if(__CMAKE_ARMClang_USING_armlink)
|