CMakeLists.txt 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. if (NOT EXISTS $ENV{MUSA_PATH})
  2. if (NOT EXISTS /opt/musa)
  3. set(MUSA_PATH /usr/local/musa)
  4. else()
  5. set(MUSA_PATH /opt/musa)
  6. endif()
  7. else()
  8. set(MUSA_PATH $ENV{MUSA_PATH})
  9. endif()
  10. set(CMAKE_C_COMPILER "${MUSA_PATH}/bin/clang")
  11. set(CMAKE_C_EXTENSIONS OFF)
  12. set(CMAKE_CXX_COMPILER "${MUSA_PATH}/bin/clang++")
  13. set(CMAKE_CXX_EXTENSIONS OFF)
  14. list(APPEND CMAKE_MODULE_PATH "${MUSA_PATH}/cmake")
  15. find_package(MUSAToolkit)
  16. if (MUSAToolkit_FOUND)
  17. message(STATUS "MUSA Toolkit found")
  18. file(GLOB GGML_HEADERS_MUSA "../ggml-cuda/*.cuh")
  19. list(APPEND GGML_HEADERS_MUSA "../../include/ggml-cuda.h")
  20. file(GLOB GGML_SOURCES_MUSA "../ggml-cuda/*.cu")
  21. file(GLOB SRCS "../ggml-cuda/template-instances/fattn-wmma*.cu")
  22. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  23. file(GLOB SRCS "../ggml-cuda/template-instances/mmq*.cu")
  24. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  25. if (GGML_CUDA_FA_ALL_QUANTS)
  26. file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*.cu")
  27. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  28. add_compile_definitions(GGML_CUDA_FA_ALL_QUANTS)
  29. else()
  30. file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q4_0-q4_0.cu")
  31. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  32. file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*q8_0-q8_0.cu")
  33. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  34. file(GLOB SRCS "../ggml-cuda/template-instances/fattn-vec*f16-f16.cu")
  35. list(APPEND GGML_SOURCES_MUSA ${SRCS})
  36. endif()
  37. set_source_files_properties(${GGML_SOURCES_MUSA} PROPERTIES LANGUAGE CXX)
  38. foreach(SOURCE ${GGML_SOURCES_MUSA})
  39. set_property(SOURCE ${SOURCE} PROPERTY COMPILE_FLAGS "-x musa -mtgpu --cuda-gpu-arch=mp_21 --cuda-gpu-arch=mp_22")
  40. endforeach()
  41. ggml_add_backend_library(ggml-musa
  42. ${GGML_HEADERS_MUSA}
  43. ${GGML_SOURCES_MUSA}
  44. )
  45. # TODO: do not use CUDA definitions for MUSA
  46. target_compile_definitions(ggml PUBLIC GGML_USE_CUDA)
  47. add_compile_definitions(GGML_USE_MUSA)
  48. add_compile_definitions(GGML_CUDA_PEER_MAX_BATCH_SIZE=${GGML_CUDA_PEER_MAX_BATCH_SIZE})
  49. if (GGML_CUDA_GRAPHS)
  50. add_compile_definitions(GGML_CUDA_USE_GRAPHS)
  51. endif()
  52. if (GGML_CUDA_FORCE_MMQ)
  53. add_compile_definitions(GGML_CUDA_FORCE_MMQ)
  54. endif()
  55. if (GGML_CUDA_FORCE_CUBLAS)
  56. add_compile_definitions(GGML_CUDA_FORCE_CUBLAS)
  57. endif()
  58. if (GGML_CUDA_NO_VMM)
  59. add_compile_definitions(GGML_CUDA_NO_VMM)
  60. endif()
  61. if (GGML_CUDA_F16 OR GGML_CUDA_DMMV_F16)
  62. add_compile_definitions(GGML_CUDA_F16)
  63. endif()
  64. if (GGML_CUDA_NO_PEER_COPY)
  65. add_compile_definitions(GGML_CUDA_NO_PEER_COPY)
  66. endif()
  67. if (GGML_STATIC)
  68. target_link_libraries(ggml-musa PRIVATE MUSA::musart_static MUSA::mublas_static)
  69. else()
  70. target_link_libraries(ggml-musa PRIVATE MUSA::musart MUSA::mublas)
  71. endif()
  72. if (GGML_CUDA_NO_VMM)
  73. # No VMM requested, no need to link directly with the musa driver lib (libmusa.so)
  74. else()
  75. target_link_libraries(ggml-musa PRIVATE MUSA::musa_driver)
  76. endif()
  77. else()
  78. message(FATAL_ERROR "MUSA Toolkit not found")
  79. endif()