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