CMakeLists.txt 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(X86_64)|(x64)|(X64)|(amd64)|(AMD64)|(i686)")
  2. message(STATUS "${CMAKE_SYSTEM_PROCESSOR}: Open SSE")
  3. target_compile_options(MNNCPU PRIVATE -DMNN_USE_SSE)
  4. option(MNN_AVX512_VNNI "Enable AVX512 VNNI" ON)
  5. FILE(GLOB MNN_X8664_SRC ${CMAKE_CURRENT_LIST_DIR}/*)
  6. if (MSVC)
  7. FILE(GLOB MNN_AVX_SRC ${CMAKE_CURRENT_LIST_DIR}/avx/*.cpp)
  8. FILE(GLOB MNN_AVXFMA_SRC ${CMAKE_CURRENT_LIST_DIR}/avxfma/*.cpp)
  9. else()
  10. FILE(GLOB MNN_AVX_SRC ${CMAKE_CURRENT_LIST_DIR}/avx/*)
  11. FILE(GLOB MNN_AVXFMA_SRC ${CMAKE_CURRENT_LIST_DIR}/avxfma/*)
  12. message(STATUS "MNN_AVX512:${MNN_AVX512}")
  13. if (MNN_AVX512)
  14. FILE(GLOB MNN_AVX512_SRC ${CMAKE_CURRENT_LIST_DIR}/avx512/*)
  15. add_library(MNNAVX512 OBJECT ${MNN_AVX512_SRC})
  16. target_compile_options(MNNAVX512 PRIVATE -DMNN_USE_SSE -DMNN_X86_USE_ASM)
  17. if (MNN_AVX512_VNNI)
  18. target_compile_options(MNNAVX512 PRIVATE -m64 -mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma -mavx512vnni -DMNN_AVX512_VNNI)
  19. else()
  20. target_compile_options(MNNAVX512 PRIVATE -m64 -mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma)
  21. endif()
  22. endif()
  23. endif()
  24. FILE(GLOB MNN_SSE_SRC ${CMAKE_CURRENT_LIST_DIR}/sse/*)
  25. add_library(MNNX8664 OBJECT ${MNN_X8664_SRC})
  26. add_library(MNNAVX OBJECT ${MNN_AVX_SRC})
  27. add_library(MNNAVXFMA OBJECT ${MNN_AVXFMA_SRC})
  28. add_library(MNNSSE OBJECT ${MNN_SSE_SRC})
  29. target_compile_options(MNNX8664 PRIVATE -DMNN_USE_SSE)
  30. target_compile_options(MNNSSE PRIVATE -DMNN_USE_SSE)
  31. target_compile_options(MNNAVX PRIVATE -DMNN_USE_SSE)
  32. target_compile_options(MNNAVXFMA PRIVATE -DMNN_USE_SSE)
  33. if(MSVC)
  34. target_compile_options(MNNAVX PRIVATE /arch:AVX)
  35. target_compile_options(MNNAVXFMA PRIVATE /arch:AVX)
  36. else()
  37. target_compile_options(MNNSSE PRIVATE -msse4.1)
  38. target_compile_options(MNNAVX PRIVATE -mavx2 -DMNN_X86_USE_ASM)
  39. target_compile_options(MNNAVXFMA PRIVATE -mavx2 -mfma -DMNN_X86_USE_ASM)
  40. endif()
  41. if (MNN_SUPPORT_BF16)
  42. target_compile_options(MNNAVXFMA PRIVATE -DMNN_SUPPORT_BF16)
  43. if (MNN_SSE_USE_FP16_INSTEAD)
  44. target_compile_options(MNNAVXFMA PRIVATE -DMNN_SSE_USE_FP16_INSTEAD -mf16c)
  45. endif()
  46. endif()
  47. list(APPEND MNN_OBJECTS_TO_LINK $<TARGET_OBJECTS:MNNX8664> $<TARGET_OBJECTS:MNNAVXFMA> $<TARGET_OBJECTS:MNNAVX> $<TARGET_OBJECTS:MNNSSE>)
  48. if (MNN_AVX512)
  49. target_compile_options(MNNX8664 PRIVATE -DMNN_AVX512)
  50. if (MNN_AVX512_VNNI)
  51. target_compile_options(MNNX8664 PRIVATE -DMNN_AVX512_VNNI)
  52. endif()
  53. list(APPEND MNN_OBJECTS_TO_LINK $<TARGET_OBJECTS:MNNAVX512>)
  54. endif()
  55. endif()