fix-build.patch 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. diff --git a/CMakeLists.txt b/CMakeLists.txt
  2. index 18c1b45..e46eb56 100644
  3. --- a/CMakeLists.txt
  4. +++ b/CMakeLists.txt
  5. @@ -3,19 +3,29 @@ cmake_minimum_required(VERSION 3.26)
  6. project(omath VERSION 3.5.0 LANGUAGES CXX)
  7. include(CMakePackageConfigHelpers)
  8. +include(CheckCXXCompilerFlag)
  9. +if (MSVC)
  10. + check_cxx_compiler_flag("/arch:AVX2" COMPILER_SUPPORTS_AVX2)
  11. +else ()
  12. + check_cxx_compiler_flag("-mavx2" COMPILER_SUPPORTS_AVX2)
  13. +endif ()
  14. option(OMATH_BUILD_TESTS "Build unit tests" ${PROJECT_IS_TOP_LEVEL})
  15. option(OMATH_BUILD_BENCHMARK "Build benchmarks" ${PROJECT_IS_TOP_LEVEL})
  16. option(OMATH_THREAT_WARNING_AS_ERROR "Set highest level of warnings and force compiler to treat them as errors" ON)
  17. option(OMATH_BUILD_AS_SHARED_LIBRARY "Build Omath as .so or .dll" OFF)
  18. -option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ON)
  19. +option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ${COMPILER_SUPPORTS_AVX2})
  20. option(OMATH_IMGUI_INTEGRATION "Omath will define method to convert omath types to imgui types" OFF)
  21. option(OMATH_BUILD_EXAMPLES "Build example projects with you can learn & play" OFF)
  22. option(OMATH_STATIC_MSVC_RUNTIME_LIBRARY "Force Omath to link static runtime" OFF)
  23. option(OMATH_SUPRESS_SAFETY_CHECKS "Supress some safety checks in release build to improve general performance" ON)
  24. option(OMATH_USE_UNITY_BUILD "Will enable unity build to speed up compilation" OFF)
  25. option(OMATH_ENABLE_LEGACY "Will enable legacy classes that MUST be used ONLY for backward compatibility" OFF)
  26. +if (OMATH_USE_AVX2 AND NOT COMPILER_SUPPORTS_AVX2)
  27. + message(WARNING "OMATH_USE_AVX2 requested, but compiler/target does not support AVX2. Disabling.")
  28. + set(OMATH_USE_AVX2 OFF CACHE BOOL "Omath will use AVX2 to boost performance" FORCE)
  29. +endif ()
  30. message(STATUS "[${PROJECT_NAME}]: Building on ${CMAKE_HOST_SYSTEM_NAME}, compiler ${CMAKE_CXX_COMPILER_ID}")
  31. message(STATUS "[${PROJECT_NAME}]: Warnings as errors ${OMATH_THREAT_WARNING_AS_ERROR}")
  32. @@ -93,13 +103,18 @@ if (OMATH_STATIC_MSVC_RUNTIME_LIBRARY)
  33. )
  34. endif ()
  35. -if (OMATH_USE_AVX2 AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
  36. - target_compile_options(${PROJECT_NAME} PUBLIC -mavx2 -mavx -mfma)
  37. -endif ()
  38. +if (OMATH_USE_AVX2)
  39. + if (MSVC)
  40. + target_compile_options(${PROJECT_NAME} PUBLIC /ARCH:AVX2)
  41. + elseif (EMSCRIPTEN)
  42. + target_compile_options(${PROJECT_NAME} PUBLIC -msimd128 -mavx2)
  43. + elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
  44. + target_compile_options(${PROJECT_NAME} PUBLIC -mfma -mavx2)
  45. + endif()
  46. +endif()
  47. target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_23)
  48. -add_subdirectory(extlibs)
  49. if (OMATH_BUILD_TESTS)