|
@@ -6,6 +6,8 @@
|
|
|
|
|
|
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
|
|
|
|
|
|
+cmake_policy(GET CMP0194 _CMAKE_ASM_CMP0194)
|
|
|
+
|
|
|
if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER)
|
|
|
# prefer the environment variable ASM
|
|
|
if(NOT $ENV{ASM${ASM_DIALECT}} STREQUAL "")
|
|
@@ -21,19 +23,32 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER)
|
|
|
# finally list compilers to try
|
|
|
if("ASM${ASM_DIALECT}" STREQUAL "ASM") # the generic assembler support
|
|
|
if(NOT CMAKE_ASM_COMPILER_INIT)
|
|
|
- if(CMAKE_C_COMPILER_LOADED AND NOT CMAKE_C_COMPILER_ID MATCHES "^(MSVC)$")
|
|
|
+ if(_CMAKE_ASM_CMP0194 STREQUAL "NEW")
|
|
|
+ set(_CMAKE_ASM_REGEX_MSVC "^(MSVC)$")
|
|
|
+ set(_CMAKE_ASM_REGEX_CL "(^|/)[Cc][Ll](\\.|$)")
|
|
|
+ set(_CMAKE_ASM_MAYBE_CL "")
|
|
|
+ else()
|
|
|
+ set(_CMAKE_ASM_REGEX_MSVC "CMP0194_OLD_MSVC_NOT_EXCLUDED")
|
|
|
+ set(_CMAKE_ASM_REGEX_CL "CMP0194_OLD_MSVC_NOT_EXCLUDED")
|
|
|
+ set(_CMAKE_ASM_MAYBE_CL "cl")
|
|
|
+ endif()
|
|
|
+ if(CMAKE_C_COMPILER_LOADED AND NOT CMAKE_C_COMPILER_ID MATCHES "${_CMAKE_ASM_REGEX_MSVC}")
|
|
|
set(CMAKE_ASM_COMPILER_LIST ${CMAKE_C_COMPILER})
|
|
|
- elseif(NOT CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER AND NOT CMAKE_C_COMPILER MATCHES "(^|/)[Cc][Ll](\\.|$)")
|
|
|
+ elseif(NOT CMAKE_C_COMPILER_LOADED AND CMAKE_C_COMPILER AND NOT CMAKE_C_COMPILER MATCHES "${_CMAKE_ASM_REGEX_CL}")
|
|
|
set(CMAKE_ASM_COMPILER_LIST ${CMAKE_C_COMPILER})
|
|
|
- elseif(CMAKE_CXX_COMPILER_LOADED AND NOT CMAKE_CXX_COMPILER_ID MATCHES "^(MSVC)$")
|
|
|
+ elseif(CMAKE_CXX_COMPILER_LOADED AND NOT CMAKE_CXX_COMPILER_ID MATCHES "${_CMAKE_ASM_REGEX_MSVC}")
|
|
|
set(CMAKE_ASM_COMPILER_LIST ${CMAKE_CXX_COMPILER})
|
|
|
- elseif(NOT CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER AND NOT CMAKE_CXX_COMPILER MATCHES "(^|/)[Cc][Ll](\\.|$)")
|
|
|
+ elseif(NOT CMAKE_CXX_COMPILER_LOADED AND CMAKE_CXX_COMPILER AND NOT CMAKE_CXX_COMPILER MATCHES "${_CMAKE_ASM_REGEX_CL}")
|
|
|
set(CMAKE_ASM_COMPILER_LIST ${CMAKE_CXX_COMPILER})
|
|
|
else()
|
|
|
# List all default C and CXX compilers
|
|
|
set(CMAKE_ASM_COMPILER_LIST
|
|
|
${_CMAKE_TOOLCHAIN_PREFIX}cc ${_CMAKE_TOOLCHAIN_PREFIX}gcc xlc
|
|
|
+ ${_CMAKE_ASM_MAYBE_CL}
|
|
|
CC ${_CMAKE_TOOLCHAIN_PREFIX}c++ ${_CMAKE_TOOLCHAIN_PREFIX}g++ xlC)
|
|
|
+ unset(_CMAKE_ASM_MAYBE_CL)
|
|
|
+ unset(_CMAKE_ASM_REGEX_CL)
|
|
|
+ unset(_CMAKE_ASM_REGEX_MSVC)
|
|
|
endif()
|
|
|
endif()
|
|
|
else() # some specific assembler "dialect"
|
|
@@ -100,7 +115,11 @@ if(NOT CMAKE_ASM${ASM_DIALECT}_COMPILER_ID)
|
|
|
|
|
|
list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS MSVC )
|
|
|
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_MSVC "-?")
|
|
|
- set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft.*Macro Assembler")
|
|
|
+ if(_CMAKE_ASM_CMP0194 STREQUAL "NEW")
|
|
|
+ set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft.*Macro Assembler")
|
|
|
+ else()
|
|
|
+ set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_REGEX_MSVC "Microsoft")
|
|
|
+ endif()
|
|
|
|
|
|
list(APPEND CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDORS TI )
|
|
|
set(CMAKE_ASM${ASM_DIALECT}_COMPILER_ID_VENDOR_FLAGS_TI "-h")
|
|
@@ -200,6 +219,11 @@ else()
|
|
|
message(STATUS "The ASM${ASM_DIALECT} compiler identification is unknown")
|
|
|
endif()
|
|
|
|
|
|
+if("ASM${ASM_DIALECT}" STREQUAL "ASM" AND CMAKE_ASM_COMPILER_ID STREQUAL "MSVC" AND _CMAKE_ASM_CMP0194 STREQUAL "")
|
|
|
+ cmake_policy(GET_WARNING CMP0194 _CMAKE_ASM_CMP0194_WARNING)
|
|
|
+ message(AUTHOR_WARNING "${_CMAKE_ASM_CMP0194_WARNING}")
|
|
|
+endif()
|
|
|
+
|
|
|
# If we have a gas/as cross compiler, they have usually some prefix, like
|
|
|
# e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally
|
|
|
# with a 3-component version number at the end
|