@@ -258,49 +258,91 @@ endif()
258258
259259# TODO: do not build separate ggml-rocm target (see CUDA build above, or llama.cpp for reference)
260260if (GGML_HIPBLAS)
261- list (APPEND CMAKE_PREFIX_PATH /opt/rocm)
261+ if (NOT EXISTS $ENV{ROCM_PATH} )
262+ if (NOT EXISTS /opt/rocm)
263+ set (ROCM_PATH /usr)
264+ else ()
265+ set (ROCM_PATH /opt/rocm)
266+ endif ()
267+ else ()
268+ set (ROCM_PATH $ENV{ROCM_PATH} )
269+ endif ()
270+ list (APPEND CMAKE_PREFIX_PATH ${ROCM_PATH} )
271+ list (APPEND CMAKE_PREFIX_PATH "${ROCM_PATH} /lib64/cmake" )
262272
263- if (NOT ${CMAKE_C_COMPILER_ID} MATCHES "Clang" )
264- message (WARNING "Only LLVM is supported for HIP, hint: CC=/opt/rocm/llvm/bin/clang" )
273+ # CMake on Windows doesn't support the HIP language yet
274+ if (WIN32 )
275+ set (CXX_IS_HIPCC TRUE )
276+ else ()
277+ string (REGEX MATCH "hipcc(\. bat)?$" CXX_IS_HIPCC "${CMAKE_CXX_COMPILER} " )
265278 endif ()
266- if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" )
267- message (WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++" )
279+
280+ if (CXX_IS_HIPCC)
281+ if (LINUX)
282+ if (NOT ${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" )
283+ message (WARNING "Only LLVM is supported for HIP, hint: CXX=/opt/rocm/llvm/bin/clang++" )
284+ endif ()
285+
286+ message (WARNING "Setting hipcc as the C++ compiler is legacy behavior."
287+ " Prefer setting the HIP compiler directly. See README for details." )
288+ endif ()
289+ else ()
290+ # Forward AMDGPU_TARGETS to CMAKE_HIP_ARCHITECTURES.
291+ if (AMDGPU_TARGETS AND NOT CMAKE_HIP_ARCHITECTURES)
292+ set (CMAKE_HIP_ARCHITECTURES ${AMDGPU_TARGETS} )
293+ endif ()
294+ cmake_minimum_required (VERSION 3.21)
295+ enable_language (HIP)
268296 endif ()
269297
270- find_package (hip)
271- find_package (hipblas)
272- find_package (rocblas)
298+ find_package (hip REQUIRED )
299+ find_package (hipblas REQUIRED )
300+ find_package (rocblas REQUIRED )
273301
274- if (${hipblas_FOUND} AND ${hip_FOUND} )
275- message (STATUS "HIP and hipBLAS found" )
302+ message (STATUS "HIP and hipBLAS found" )
276303
277- add_compile_definitions (GGML_USE_HIPBLAS GGML_USE_CUDA)
304+ add_compile_definitions (GGML_USE_HIPBLAS GGML_USE_CUDA)
278305
279- add_library (ggml-rocm OBJECT ggml-cuda.cu ggml-cuda.h)
306+ set (GGML_HEADERS_ROCM ggml-cuda.h)
280307
281- if (BUILD_SHARED_LIBS )
282- set_target_properties (ggml-rocm PROPERTIES POSITION_INDEPENDENT_CODE ON )
283- endif ()
284- if (GGML_CUDA_FORCE_DMMV)
285- target_compile_definitions (ggml-rocm PRIVATE GGML_CUDA_FORCE_DMMV)
286- endif ()
287- if (GGML_CUDA_FORCE_MMQ)
288- target_compile_definitions (ggml-rocm PRIVATE GGML_CUDA_FORCE_MMQ)
289- endif ()
290- target_compile_definitions (ggml-rocm PRIVATE GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X} )
291- target_compile_definitions (ggml-rocm PRIVATE GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y} )
292- target_compile_definitions (ggml-rocm PRIVATE K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER} )
293- set_source_files_properties (ggml-cuda.cu PROPERTIES LANGUAGE CXX)
294- target_link_libraries (ggml-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
295- target_include_directories (ggml-rocm PRIVATE . ../include ../include /ggml)
308+ file (GLOB GGML_SOURCES_ROCM "ggml-cuda/*.cu" )
309+ list (APPEND GGML_SOURCES_ROCM "ggml-cuda.cu" )
310+ list (APPEND GGML_SOURCES_ROCM ${SRCS} )
296311
297- if (GGML_STATIC)
298- message (FATAL_ERROR "Static linking not supported for HIP/ROCm" )
299- endif ()
300- set (GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ggml-rocm)
312+ add_compile_definitions (GGML_USE_HIPBLAS GGML_USE_CUDA)
313+
314+ if (GGML_CUDA_FORCE_DMMV)
315+ add_compile_definitions (GGML_CUDA_FORCE_DMMV)
316+ endif ()
317+
318+ if (GGML_CUDA_FORCE_MMQ)
319+ add_compile_definitions (GGML_CUDA_FORCE_MMQ)
320+ endif ()
321+
322+ add_compile_definitions (GGML_CUDA_DMMV_X=${GGML_CUDA_DMMV_X} )
323+ add_compile_definitions (GGML_CUDA_MMV_Y=${GGML_CUDA_MMV_Y} )
324+ add_compile_definitions (K_QUANTS_PER_ITERATION=${GGML_CUDA_KQUANTS_ITER} )
325+
326+ add_library (ggml-rocm OBJECT ${GGML_SOURCES_ROCM} ${GGML_HEADERS_ROCM} )
327+
328+ if (CXX_IS_HIPCC)
329+ set_source_files_properties (${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
330+ target_link_libraries (ggml-rocm PRIVATE hip::device)
301331 else ()
302- message (WARNING "hipBLAS or HIP not found. Try setting CMAKE_PREFIX_PATH=/opt/rocm" )
332+ set_source_files_properties (${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
333+ endif ()
334+
335+ target_link_libraries (ggml-rocm PRIVATE hip::device PUBLIC hip::host roc::rocblas roc::hipblas)
336+ target_include_directories (ggml-rocm PRIVATE . ../include ../include /ggml)
337+
338+ if (BUILD_SHARED_LIBS )
339+ set_target_properties (ggml-rocm PROPERTIES POSITION_INDEPENDENT_CODE ON )
340+ endif ()
341+
342+ if (GGML_STATIC)
343+ message (FATAL_ERROR "Static linking not supported for HIP/ROCm" )
303344 endif ()
345+ set (GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ggml-rocm)
304346endif ()
305347
306348if (GGML_METAL)
0 commit comments