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