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