CMake: Add support for building with OpenMP support for clang on windows.
authorRay Molenkamp <github@lazydodo.com>
Mon, 7 Oct 2019 16:24:13 +0000 (10:24 -0600)
committerRay Molenkamp <github@lazydodo.com>
Mon, 7 Oct 2019 16:24:13 +0000 (10:24 -0600)
mostly minor c/cxx/linker flags, only tested with clang 9.0.0

Differential Revision: https://developer.blender.org/D5976

Reviewers: brecht, jesterking

build_files/cmake/macros.cmake
build_files/cmake/platform/platform_win32.cmake
source/creator/CMakeLists.txt

index e159dd9e5ee8ad2f43ce04744a5832293b84038c..f642a19991521787eeb64a26cc23510e89b75683 100644 (file)
@@ -1209,7 +1209,9 @@ macro(openmp_delayload
   )
     if(MSVC)
       if(WITH_OPENMP)
-        if(MSVC_VERSION EQUAL 1800)
+        if(MSVC_CLANG)
+          set(OPENMP_DLL_NAME "libomp")
+        elseif(MSVC_VERSION EQUAL 1800)
           set(OPENMP_DLL_NAME "vcomp120")
         else()
           set(OPENMP_DLL_NAME "vcomp140")
index b2277c440fee50e65a1acd51cc42eba833ab7295..7e0fff00a37ffc3f11339c51e91f9465d5a1b2f9 100644 (file)
@@ -35,6 +35,22 @@ if(CMAKE_C_COMPILER_ID MATCHES "Clang")
   else()
     message("Unable to detect the Visual Studio redist directory, copying of the runtime dlls will not work, try running from the visual studio developer prompt.")
   endif()
+  # 1) CMake has issues detecting openmp support in clang-cl so we have to provide
+  #    the right switches here.
+  # 2) While the /openmp switch *should* work, it currently doesn't as for clang 9.0.0
+  if(WITH_OPENMP)
+    set(OPENMP_CUSTOM ON)
+    set(OPENMP_FOUND ON)
+    set(OpenMP_C_FLAGS "/clang:-fopenmp")
+    set(OpenMP_CXX_FLAGS "/clang:-fopenmp")
+    GET_FILENAME_COMPONENT(LLVMROOT "[HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\LLVM\\LLVM;]" ABSOLUTE CACHE)
+    set(CLANG_OPENMP_DLL "${LLVMROOT}/bin/libomp.dll")
+    set(CLANG_OPENMP_LIB "${LLVMROOT}/lib/libomp.lib")
+    if(NOT EXISTS "${CLANG_OPENMP_DLL}")
+      message(FATAL_ERROR "Clang OpenMP library (${CLANG_OPENMP_DLL}) not found.")
+    endif()
+    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} \"${CLANG_OPENMP_LIB}\"")
+  endif()
 endif()
 
 set_property(GLOBAL PROPERTY USE_FOLDERS ${WINDOWS_USE_VISUAL_STUDIO_PROJECT_FOLDERS})
index 8fb4d2905f404e762f6f00e32c029ce3514f47a9..52d930143da4061262f42c1595ee82d3dd29690f 100644 (file)
@@ -674,6 +674,13 @@ elseif(WIN32)
 
   set(BLENDER_TEXT_FILES_DESTINATION ".")
 
+  if(WITH_OPENMP AND MSVC_CLANG)
+    install(
+          FILES ${CLANG_OPENMP_DLL}
+          DESTINATION "."
+    )
+  endif()
+
   if(WITH_PYTHON)
     string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})