From d2e4b13b9c4a9fa61cfcdc26a8d1dd8e5a4ac557 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Mon, 7 Oct 2019 10:24:13 -0600 Subject: CMake: Add support for building with OpenMP support for clang on windows. 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 | 4 +++- build_files/cmake/platform/platform_win32.cmake | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) (limited to 'build_files') diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index e159dd9e5ee..f642a199915 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -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") diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index b2277c440fe..7e0fff00a37 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -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}) -- cgit v1.2.3