[CMake] Check for problematic MSVC + /arch:AVX configuration
authorTobias Hieta <tobias.hieta@ubisoft.com>
Thu, 21 Apr 2022 07:42:08 +0000 (09:42 +0200)
committerTobias Hieta <tobias@hieta.se>
Thu, 21 Apr 2022 07:46:44 +0000 (09:46 +0200)
Add a new CMake file to expand on for more problematic configurations
in the future.

Related to #54645

Reviewed By: beanz, phosek, smeenai

Differential Revision: https://reviews.llvm.org/D123777

llvm/cmake/config-ix.cmake
llvm/cmake/modules/CheckProblematicConfigurations.cmake [new file with mode: 0644]
llvm/cmake/modules/HandleLLVMOptions.cmake

index f01d85ece6620538fbf390c19c534d4211f6ab55..df7c43b701c3ec49f3a2295a1fc4bb087cbc8c5e 100644 (file)
@@ -12,6 +12,7 @@ include(CheckCCompilerFlag)
 include(CMakePushCheckState)
 
 include(CheckCompilerVersion)
+include(CheckProblematicConfigurations)
 include(HandleLLVMStdlib)
 
 if( UNIX AND NOT (APPLE OR BEOS OR HAIKU) )
diff --git a/llvm/cmake/modules/CheckProblematicConfigurations.cmake b/llvm/cmake/modules/CheckProblematicConfigurations.cmake
new file mode 100644 (file)
index 0000000..e133873
--- /dev/null
@@ -0,0 +1,19 @@
+
+option(LLVM_ALLOW_PROBLEMATIC_CONFIGURATIONS OFF "Set this option to ON to allow problematic toolchain configurations. Use on your own risk.")
+
+macro(log_problematic MESSAGE)
+  if(LLVM_ALLOW_PROBLEMATIC_CONFIGURATIONS)
+    message(WARNING "${MESSAGE}")
+  else()
+    message(FATAL_ERROR "${MESSAGE}\nYou can force usage of this configuration by passing -DLLVM_ALLOW_PROBLEMATIC_CONFIGURATIONS=ON")
+  endif()
+endmacro()
+
+# MSVC and /arch:AVX is untested and have created problems before. See:
+# https://github.com/llvm/llvm-project/issues/54645
+if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
+  string(TOLOWER "${CMAKE_CXX_FLAGS} ${CMAKE_C_FLAGS}" _FLAGS)
+  if(_FLAGS MATCHES "/arch:avx[0-9]*")
+    log_problematic("Compiling LLVM with MSVC and the /arch:AVX flag is known to cause issues with parts of LLVM.\nSee https://github.com/llvm/llvm-project/issues/54645 for details.\nUse clang-cl if you want to enable AVX instructions.")
+  endif()
+endif()
index ef05cc48ce5fe0299e952951b7a4577fe22b87f7..5baa42fec3f909455865886ae9aa8dafa48887cd 100644 (file)
@@ -7,6 +7,7 @@
 string(TOUPPER "${CMAKE_BUILD_TYPE}" uppercase_CMAKE_BUILD_TYPE)
 
 include(CheckCompilerVersion)
+include(CheckProblematicConfigurations)
 include(HandleLLVMStdlib)
 include(CheckCCompilerFlag)
 include(CheckCXXCompilerFlag)