diff options
author | Ray Molenkamp <github@lazydodo.com> | 2020-09-02 18:19:44 +0300 |
---|---|---|
committer | Ray Molenkamp <github@lazydodo.com> | 2020-09-02 18:19:44 +0300 |
commit | c992fd3a3c13763f458e420507f044ec82155a81 (patch) | |
tree | 1c49ac1df181cbf0f941934bea267cf8a300abff /intern/cycles/CMakeLists.txt | |
parent | 1082edfdfd848ca3231457c4ae7443bbea9db968 (diff) |
Cycles: Support WITH_CYCLES_NATIVE_ONLY with MSVC
This change enables the developer option `WITH_CYCLES_NATIVE_ONLY`
for MSVC. This allows a developer to just build the cycles
CPU kernel for their specific system rather than all kernels,
speeding up development.
Other platforms have had this option for years, but MSVC lacks
the compiler switch to target the host architecture hence it
always build all kernels.
This change uses a small helper program to detect the required
flags.
Only AVX/AVX2 are tested, for the following reasons
- SSE2 is enabled by default and requires no flags
- SSE3/4 have no specific build flags for msvc
- AVX512 is not yet supported by cycles
Differential Revision: https://developer.blender.org/D8775
Reviewed by: brecht, sergey
Diffstat (limited to 'intern/cycles/CMakeLists.txt')
-rw-r--r-- | intern/cycles/CMakeLists.txt | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index e5a5e9773d3..0dd182526b1 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -33,6 +33,22 @@ if(WITH_CYCLES_NATIVE_ONLY) if(NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") set(CYCLES_KERNEL_FLAGS "-march=native") + else() + if(NOT MSVC_NATIVE_ARCH_FLAGS) + TRY_RUN( + arch_run_result + arch_compile_result + ${CMAKE_CURRENT_BINARY_DIR}/ + ${CMAKE_CURRENT_SOURCE_DIR}/cmake/msvc_arch_flags.c + COMPILE_OUTPUT_VARIABLE arch_compile_output + RUN_OUTPUT_VARIABLE arch_run_output + ) + if (arch_compile_result AND "${arch_run_result}" EQUAL "0") + string(STRIP ${arch_run_output} arch_run_output) + set(MSVC_NATIVE_ARCH_FLAGS ${arch_run_output} CACHE STRING "MSVC Native architecture flags") + endif() + endif() + set(CYCLES_KERNEL_FLAGS "${MSVC_NATIVE_ARCH_FLAGS}") endif() elseif(NOT WITH_CPU_SSE) set(CXX_HAS_SSE FALSE) |