From 0bb750ee84463ef420674681b9e16797e5735e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Thu, 20 Feb 2025 11:13:57 +0100 Subject: [PATCH 1/4] Fix: #134636: VSE - Fade In and Out not working Use the new `action.fcurve_ensure_for_datablock()` function to ensure the opacity F-Curve exists. This function also ensures that the Action itself is ready for keying (it has a layer and a keyframe strip), and ensures the slot for the Scene exists and is assigned. Co-authored-by: Pratik Borhade Pull Request: https://projects.blender.org/blender/blender/pulls/134753 --- scripts/startup/bl_operators/sequencer.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/scripts/startup/bl_operators/sequencer.py b/scripts/startup/bl_operators/sequencer.py index e53c538418b..734803496dc 100644 --- a/scripts/startup/bl_operators/sequencer.py +++ b/scripts/startup/bl_operators/sequencer.py @@ -287,16 +287,9 @@ class SequencerFadesAdd(Operator): Returns the matching FCurve or creates a new one if the function can't find a match. """ scene = context.scene - fade_fcurve = None - fcurves = scene.animation_data.action.fcurves + action = scene.animation_data.action searched_data_path = sequence.path_from_id(animated_property) - for fcurve in fcurves: - if fcurve.data_path == searched_data_path: - fade_fcurve = fcurve - break - if not fade_fcurve: - fade_fcurve = fcurves.new(data_path=searched_data_path) - return fade_fcurve + return action.fcurve_ensure_for_datablock(scene, searched_data_path) def fade_animation_clear(self, fade_fcurve, fades): """ From b1eaf58aa4fc777e175ea0c6ad20969d9a5b21b9 Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Thu, 20 Feb 2025 11:18:26 +0100 Subject: [PATCH 2/4] Fix #134586: EEVEE: Crash when rendering large resolutions EEVEE crashes when it is not able to allocate buffers. Previously we had a message showing to the user that it tries to allocate a texture larger than supported by the GPU. But was not implemented for EEVEE-next. This fix will add back this error message. ![image.png](/attachments/723c10a4-2b44-49c4-a30f-6e8178055d8a) Pull Request: https://projects.blender.org/blender/blender/pulls/134725 --- .../draw/engines/eevee_next/eevee_film.cc | 15 +++++++++ .../draw/engines/eevee_next/eevee_film.hh | 5 +++ .../draw/engines/eevee_next/eevee_instance.cc | 31 ++++++++++++++----- .../draw/engines/eevee_next/eevee_instance.hh | 2 +- 4 files changed, 45 insertions(+), 8 deletions(-) diff --git a/source/blender/draw/engines/eevee_next/eevee_film.cc b/source/blender/draw/engines/eevee_next/eevee_film.cc index 74b73cd5baa..889ab6c6f49 100644 --- a/source/blender/draw/engines/eevee_next/eevee_film.cc +++ b/source/blender/draw/engines/eevee_next/eevee_film.cc @@ -331,6 +331,21 @@ void Film::init(const int2 &extent, const rcti *output_rect) data_.overscan = overscan_pixels_get(inst_.camera.overscan(), data_.render_extent); data_.render_extent += data_.overscan * 2; + is_valid_render_extent_ = data_.render_extent.x <= GPU_max_texture_size() && + data_.render_extent.y <= GPU_max_texture_size(); + if (!is_valid_render_extent_) { + inst_.info_append_i18n( + "Required render size ({}px) is larger than reported texture size limit ({}px).", + max_ii(data_.render_extent.x, data_.render_extent.y), + GPU_max_texture_size()); + + data_.extent = int2(4, 4); + data_.render_extent = int2(4, 4); + data_.extent_inv = 1.0f / float2(data_.extent); + data_.offset = int2(0, 0); + data_.overscan = 0; + } + data_.filter_radius = clamp_f(scene.r.gauss, 0.0f, 100.0f); if (sampling.sample_count() == 1) { /* Disable filtering if sample count is 1. */ diff --git a/source/blender/draw/engines/eevee_next/eevee_film.hh b/source/blender/draw/engines/eevee_next/eevee_film.hh index 57b0c966091..3e3305db952 100644 --- a/source/blender/draw/engines/eevee_next/eevee_film.hh +++ b/source/blender/draw/engines/eevee_next/eevee_film.hh @@ -91,6 +91,7 @@ class Film { eViewLayerEEVEEPassType viewport_compositor_enabled_passes_ = eViewLayerEEVEEPassType(0); PassCategory enabled_categories_ = PassCategory(0); bool use_reprojection_ = false; + bool is_valid_render_extent_ = true; public: Film(Instance &inst, FilmData &data) : inst_(inst), data_(data){}; @@ -130,6 +131,10 @@ class Film { { return data_.render_extent; } + inline bool is_valid_render_extent() const + { + return is_valid_render_extent_; + } /** Size and offset of the film (taking into account render region). */ int2 film_extent_get() const diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.cc b/source/blender/draw/engines/eevee_next/eevee_instance.cc index 8a568c1e8c9..7a5abe3c59e 100644 --- a/source/blender/draw/engines/eevee_next/eevee_instance.cc +++ b/source/blender/draw/engines/eevee_next/eevee_instance.cc @@ -75,6 +75,7 @@ void Instance::init(const int2 &output_res, shaders_are_ready_ = shaders.is_ready(is_image_render()); if (!shaders_are_ready_) { + skip_render_ = true; return; } @@ -125,7 +126,8 @@ void Instance::init(const int2 &output_res, /* Pre-compile specialization constants in parallel (if supported). */ shaders.precompile_specializations( render_buffers.data.shadow_id, shadows.get_data().ray_count, shadows.get_data().step_count); - shaders_are_ready_ = shaders.is_ready(is_image_render()); + shaders_are_ready_ = shaders.is_ready(is_image_render()) || !film.is_valid_render_extent(); + skip_render_ = !shaders_are_ready_ || !film.is_valid_render_extent(); } void Instance::init_light_bake(Depsgraph *depsgraph, draw::Manager *manager) @@ -200,7 +202,7 @@ void Instance::view_update() void Instance::begin_sync() { - if (!shaders_are_ready_) { + if (skip_render_) { return; } @@ -244,7 +246,7 @@ void Instance::begin_sync() void Instance::object_sync(ObjectRef &ob_ref) { - if (!shaders_are_ready_) { + if (skip_render_) { return; } @@ -320,7 +322,7 @@ void Instance::object_sync_render(void *instance_, void Instance::end_sync() { - if (!shaders_are_ready_) { + if (skip_render_) { return; } @@ -507,6 +509,13 @@ void Instance::render_read_result(RenderLayer *render_layer, const char *view_na void Instance::render_frame(RenderEngine *engine, RenderLayer *render_layer, const char *view_name) { + if (skip_render_) { + if (!info_.empty()) { + RE_engine_set_error_message(engine, info_.c_str()); + info_ = ""; + } + return; + } /* TODO: Break on RE_engine_test_break(engine) */ while (!sampling.finished()) { this->render_sample(); @@ -558,11 +567,13 @@ void Instance::render_frame(RenderEngine *engine, RenderLayer *render_layer, con void Instance::draw_viewport() { - if (!shaders_are_ready_) { + if (skip_render_) { DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get(); GPU_framebuffer_clear_color_depth(dfbl->default_fb, float4(0.0f), 1.0f); - info_append_i18n("Compiling EEVEE engine shaders"); - DRW_viewport_request_redraw(); + if (!shaders_are_ready_) { + info_append_i18n("Compiling EEVEE engine shaders"); + DRW_viewport_request_redraw(); + } return; } @@ -599,6 +610,9 @@ void Instance::draw_viewport() void Instance::draw_viewport_image_render() { + if (skip_render_) { + return; + } while (!sampling.finished_viewport()) { this->render_sample(); } @@ -611,6 +625,9 @@ void Instance::draw_viewport_image_render() void Instance::store_metadata(RenderResult *render_result) { + if (skip_render_) { + return; + } cryptomatte.store_metadata(render_result); } diff --git a/source/blender/draw/engines/eevee_next/eevee_instance.hh b/source/blender/draw/engines/eevee_next/eevee_instance.hh index 4c870c74ba3..41dad1d9a92 100644 --- a/source/blender/draw/engines/eevee_next/eevee_instance.hh +++ b/source/blender/draw/engines/eevee_next/eevee_instance.hh @@ -83,8 +83,8 @@ class Instance { uint64_t depsgraph_last_update_ = 0; bool overlays_enabled_ = false; - bool shaders_are_ready_ = true; + bool skip_render_ = false; /** Info string displayed at the top of the render / viewport, or the console when baking. */ std::string info_ = ""; From d29ef95c3c22f7d963448d0438f34710e6ef6105 Mon Sep 17 00:00:00 2001 From: Anthony Roberts Date: Thu, 20 Feb 2025 11:23:01 +0100 Subject: [PATCH 3/4] Windows: Rework clang scripts, and enable by default on Windows ARM64 This switches clang to be the default compiler on Windows ARM64, allowing for an override to MSVC. Turns out MSVC builds have been broken for months, but nobody checked, so I'm just switching them off for now and setting clang as the default. These updated scripts allow for the msbuild generator to use an external (ie, non-MSVC) clang installation properly, otherwise they failed. They also allow for users to specify their own desired clang compiler via an environment variable. An update to the docs will come seperately. Pull Request: https://projects.blender.org/blender/blender/pulls/134566 --- build_files/windows/configure_msbuild.cmd | 15 ++++++ build_files/windows/configure_ninja.cmd | 22 +------- build_files/windows/detect_msvc_vswhere.cmd | 41 +++++++++++++-- build_files/windows/find_llvm.cmd | 57 +++++++++++++++++++++ build_files/windows/parse_arguments.cmd | 2 + build_files/windows/show_help.cmd | 3 +- make.bat | 20 ++++++++ 7 files changed, 135 insertions(+), 25 deletions(-) create mode 100644 build_files/windows/find_llvm.cmd diff --git a/build_files/windows/configure_msbuild.cmd b/build_files/windows/configure_msbuild.cmd index c26a98ee1b4..330fc4b5dcc 100644 --- a/build_files/windows/configure_msbuild.cmd +++ b/build_files/windows/configure_msbuild.cmd @@ -8,7 +8,22 @@ if "%BUILD_WITH_SCCACHE%"=="1" ( ) if "%WITH_CLANG%"=="1" ( + REM We want to use an external manifest with Clang set CLANG_CMAKE_ARGS=-T"ClangCl" -DWITH_WINDOWS_EXTERNAL_MANIFEST=ON + + REM Create the build directory, so that we can create the Directory.build.props file + if NOT EXIST %BUILD_DIR%\nul ( + mkdir %BUILD_DIR% + ) + + REM This is required as per https://learn.microsoft.com/en-us/cpp/build/clang-support-msbuild?view=msvc-170#custom_llvm_location + REM Which allows any copy of LLVM to be used, not just the one that ships with VS + echo ^ >> %BUILD_DIR%\Directory.build.props + echo ^ >> %BUILD_DIR%\Directory.build.props + echo ^%LLVM_DIR%^ >> %BUILD_DIR%\Directory.build.props + echo ^%CLANG_VERSION%^ >> %BUILD_DIR%\Directory.build.props + echo ^ >> %BUILD_DIR%\Directory.build.props + echo ^ >> %BUILD_DIR%\Directory.build.props ) if "%WITH_ASAN%"=="1" ( diff --git a/build_files/windows/configure_ninja.cmd b/build_files/windows/configure_ninja.cmd index 98d469ab1da..a0cde8ccc0e 100644 --- a/build_files/windows/configure_ninja.cmd +++ b/build_files/windows/configure_ninja.cmd @@ -14,28 +14,10 @@ if "%BUILD_WITH_SCCACHE%"=="1" ( ) if "%WITH_CLANG%" == "1" ( -set LLVM_DIR= + REM We want to use an external manifest with Clang set BUILD_CMAKE_ARGS=%BUILD_CMAKE_ARGS% -DWITH_WINDOWS_EXTERNAL_MANIFEST=On - for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C - if DEFINED LLVM_DIR ( - if NOT "%verbose%" == "" ( - echo LLVM Detected at "%LLVM_DIR%" - ) - goto DetectionComplete - ) - REM Check 32 bits - for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C - if DEFINED LLVM_DIR ( - if NOT "%verbose%" == "" ( - echo LLVM Detected at "%LLVM_DIR%" - ) - goto DetectionComplete - ) - echo LLVM not found - exit /b 1 - -:DetectionComplete + REM We can assume that we have a working copy via find_llvm.cmd set CC=%LLVM_DIR%\bin\clang-cl set CXX=%LLVM_DIR%\bin\clang-cl set CFLAGS=-m64 diff --git a/build_files/windows/detect_msvc_vswhere.cmd b/build_files/windows/detect_msvc_vswhere.cmd index 52f765c20c4..081f1ce9bdb 100644 --- a/build_files/windows/detect_msvc_vswhere.cmd +++ b/build_files/windows/detect_msvc_vswhere.cmd @@ -13,11 +13,16 @@ if not exist "%vs_where%" ( goto FAIL ) -if NOT "%verbose%" == "" ( - echo "%vs_where%" -latest %VSWHERE_ARGS% -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 - ) +if "%BUILD_ARCH%" == "arm64" ( + set VSWHERE_ARCH=ARM64 +) else ( + set VSWHERE_ARCH=x86.x64 +) -for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64`) do ( +if NOT "%verbose%" == "" ( + echo "%vs_where%" -latest %VSWHERE_ARGS% -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) -requires Microsoft.VisualStudio.Component.VC.Tools.%VSWHERE_ARCH% +) +for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Tools.%VSWHERE_ARCH%`) do ( if /i "%%i"=="installationPath" set VS_InstallDir=%%j ) @@ -38,6 +43,34 @@ if "%VS_InstallDir%"=="" ( ) ) +rem If we are using Clang + MSBuild, check to make sure the clang tools are installed +if "%WITH_CLANG%" == "1" ( + if NOT "%BUILD_WITH_NINJA%" == "1" ( + if NOT "%verbose%" == "" ( + echo "%vs_where%" -latest %VSWHERE_ARGS% -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) -requires Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset + ) + + for /f "usebackq tokens=1* delims=: " %%i in (`"%vs_where%" -latest -version ^[%BUILD_VS_VER%.0^,%BUILD_VS_VER%.99^) %VSWHERE_ARGS% -requires Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset`) do ( + if /i "%%i"=="installationName" set VSWhere_ClangFound=%%j + ) + ) +) + +REM This needs to be in a seperate block, due to no delayed expansion (which breaks other things if enabled) +if "%WITH_CLANG%" == "1" ( + if NOT "%BUILD_WITH_NINJA%" == "1" ( + if "%VSWhere_ClangFound%"=="" ( + echo. + echo Clang was specified whilst using the Visual Studio CMake generator, but the Clang Toolset was not found in Visual Studio. + echo. + echo Check the "MSBuild support for LLVM (clang-cl) toolset" component has been installed. + echo. + echo Alternatively use the Ninja generator via the "ninja" switch when calling make.bat + goto FAIL + ) + ) +) + set VCVARS=%VS_InstallDir%\VC\Auxiliary\Build\vcvarsall.bat if exist "%VCVARS%" ( if NOT "%verbose%" == "" ( diff --git a/build_files/windows/find_llvm.cmd b/build_files/windows/find_llvm.cmd new file mode 100644 index 00000000000..f00ca7bb7c7 --- /dev/null +++ b/build_files/windows/find_llvm.cmd @@ -0,0 +1,57 @@ +REM Find a copy of LLVM on the system +set LLVM_DIR= + +REM First, we try and find the copy on the PATH (unless already specified, in which case we use that) +if "%LLVM_EXE%" == "" ( + for %%X in (clang-cl.exe) do (set "LLVM_EXE=%%~$PATH:X") +) else ( + echo LLVM EXE manually specified, using that +) + +if NOT "%LLVM_EXE%" == "" ( + REM We have found LLVM on the path + for %%X in ("%LLVM_EXE%\..\..") do set "LLVM_DIR=%%~fX" + if NOT "%verbose%" == "" ( + echo LLVM detected via path + ) + goto detect_llvm_done +) + +REM If that fails, we try and get it from the registry +REM Check 64-bit path +for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C +if NOT "%LLVM_DIR%" == "" ( + if NOT "%verbose%" == "" ( + echo LLVM Detected via 64-bit registry + ) + goto detect_llvm_done +) + +REM Check 32-bit path +for /F "usebackq skip=2 tokens=1-2*" %%A IN (`REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\LLVM\LLVM" /ve 2^>nul`) DO set LLVM_DIR=%%C +if NOT "%LLVM_DIR%" == "" ( + if NOT "%verbose%" == "" ( + echo LLVM Detected via 32-bit registry + ) + goto detect_llvm_done +) + +rem No copy has been found, so error out +if "%LLVM_DIR%" == "" ( + echo LLVM not found on the path, or in the registry. Please verify your installation. + goto ERR +) + +:detect_llvm_done +for /F "usebackq tokens=3" %%X in (`CALL "%LLVM_DIR%\bin\clang-cl.exe" --version ^| findstr "clang version"`) do set CLANG_VERSION=%%X + +if NOT "%verbose%" == "" ( + echo Using Clang/LLVM + echo Version : %CLANG_VERSION% + echo Location : "%LLVM_DIR%" +) + +:EOF +exit /b 0 +:ERR +exit /b 1 \ No newline at end of file diff --git a/build_files/windows/parse_arguments.cmd b/build_files/windows/parse_arguments.cmd index cdf7eb1d661..1c00dd471ca 100644 --- a/build_files/windows/parse_arguments.cmd +++ b/build_files/windows/parse_arguments.cmd @@ -115,6 +115,8 @@ if NOT "%1" == "" ( ) else if "%1" == "doc_py" ( set DOC_PY=1 goto EOF + ) else if "%1" == "msvc" ( + set WITH_MSVC=1 ) else ( echo Command "%1" unknown, aborting! goto ERR diff --git a/build_files/windows/show_help.cmd b/build_files/windows/show_help.cmd index 6ad1adb8c1b..83c3fd61fa5 100644 --- a/build_files/windows/show_help.cmd +++ b/build_files/windows/show_help.cmd @@ -29,6 +29,8 @@ echo - 2019b ^(build with visual studio 2019 Build Tools^) echo - 2022 ^(build with visual studio 2022^) echo - 2022pre ^(build with visual studio 2022 pre-release^) echo - 2022b ^(build with visual studio 2022 Build Tools^) +echo - clang ^(enable building with clang - default on ARM64^) +echo - msvc ^(enable building with msvc - default on x64, unsupported on ARM64^) echo. echo Documentation Targets ^(Not associated with building^) @@ -37,7 +39,6 @@ echo - doc_py ^(Generate sphinx python api docs^) echo. echo Experimental options echo - with_gpu_tests ^(enable both the render and draw gpu test suites including EEVEE, Workbench, Grease Pencil, draw manager and GPU backends^) -echo - clang ^(enable building with clang^) echo - asan ^(enable asan^) echo - ninja ^(enable building with ninja instead of msbuild^) echo. diff --git a/make.bat b/make.bat index b59a94d4860..b04df6b9c0d 100644 --- a/make.bat +++ b/make.bat @@ -47,6 +47,18 @@ if "%LICENSE%" == "1" ( call "%BLENDER_DIR%\build_files\windows\detect_architecture.cmd" if errorlevel 1 goto EOF +REM Enforce the default compiler to be clang on ARM64 +if "%BUILD_ARCH%" == "arm64" ( + if not "%WITH_CLANG%" == "1" ( + if "%WITH_MSVC%" == "1" ( + echo WARNING, MSVC compilation on Windows ARM64 is unsupported, and errors may occur. + ) else ( + echo Windows ARM64 builds with clang by default, enabling. If you wish to use MSVC ^(unsupported^), please use the msvc switch. + set WITH_CLANG=1 + ) + ) +) + if "%BUILD_VS_YEAR%" == "" ( call "%BLENDER_DIR%\build_files\windows\autodetect_msvc.cmd" if errorlevel 1 ( @@ -98,6 +110,14 @@ if "%CMAKE%" == "" ( exit /b 1 ) +if "%WITH_CLANG%" == "1" ( + call "%BLENDER_DIR%\build_files\windows\find_llvm.cmd" + if errorlevel 1 ( + echo LLVM/Clang not found ^(try with the 'verbose' switch for more information^) + goto EOF + ) +) + echo Building blender with VS%BUILD_VS_YEAR% for %BUILD_ARCH% in %BUILD_DIR% call "%BLENDER_DIR%\build_files\windows\check_libraries.cmd" From 8ff405bc0622d3f2031da8fc535fcd9ec9894d10 Mon Sep 17 00:00:00 2001 From: Anthony Roberts Date: Thu, 20 Feb 2025 11:24:22 +0100 Subject: [PATCH 4/4] Windows: Enable OpenMP on ARM64, and quiet new noisy warning New versions of LLVM now ship with OpenMP for these devices, so enable accordingly. The disabled warning was causing substantial spam in buildbot logs. Pull Request: https://projects.blender.org/blender/blender/pulls/134583 --- CMakeLists.txt | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d6e1dae7af..63d16b245a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -411,10 +411,17 @@ option(WITH_OPENMP "Enable OpenMP (has to be supported by the compiler)" ON) if(UNIX AND NOT APPLE) option(WITH_OPENMP_STATIC "Link OpenMP statically (only used by the release environment)" OFF) mark_as_advanced(WITH_OPENMP_STATIC) -elseif(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") - # At time of testing (LLVM 18.1.6) OMP is not included in public LLVM builds for Windows ARM64 - set(WITH_OPENMP OFF) - set(WITH_OPENMP_STATIC OFF) +elseif(WIN32 AND CMAKE_C_COMPILER_ID MATCHES "Clang" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.1) + # Prior to LLVM 19.1, OpenMP was not included in public LLVM builds for Windows ARM64 + if(WITH_OPENMP) + if(WITH_STRICT_BUILD_OPTIONS) + message(SEND_ERROR "OpenMP enabled, but LLVM ${CMAKE_CXX_COMPILER_VERSION} detected, minimum of 19.1 required for OpenMP functionality") + else() + message(STATUS "Disabling OpenMP, LLVM ${CMAKE_CXX_COMPILER_VERSION} detected, minimum of 19.1 required for OpenMP functionality") + endif() + set(WITH_OPENMP OFF) + set(WITH_OPENMP_STATIC OFF) + endif() endif() if(WITH_GHOST_X11) @@ -2228,6 +2235,8 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") # And some additional ones that came up when using LLVM 18.1.8 on Windows ARM64 C_WARN_CLANG_CL_SWITCH_DEFAULT -Wno-switch-default C_WARN_CLANG_CL_NAN_INFINITY_DISABLED -Wno-nan-infinity-disabled + # And another from 19.1.5 + C_WARN_CLANG_CL_PRE_C11_COMPAT -Wno-pre-c11-compat ) add_check_cxx_compiler_flags( @@ -2362,6 +2371,8 @@ elseif(CMAKE_C_COMPILER_ID MATCHES "Clang") # And some additional ones that came up when using LLVM 18.1.8 on Windows ARM64 CXX_WARN_CLANG_CL_SWITCH_DEFAULT -Wno-switch-default CXX_WARN_CLANG_CL_NAN_INFINITY_DISABLED -Wno-nan-infinity-disabled + # And another from 19.1.5 + CXX_WARN_CLANG_CL_PRE_C11_COMPAT -Wno-pre-c11-compat ) endif()