From 6e978f46ff0ee7c986a464c8f2e08a1c8c99b52e Mon Sep 17 00:00:00 2001 From: Roy Shilkrot Date: Fri, 26 Jul 2024 12:37:26 -0400 Subject: [PATCH] chore: Update build workflow to include AMD HIP SDK version 24.Q3 --- CMakeLists.txt | 169 +++++++++++++++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 69 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06d920f..1ba614f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,8 @@ set(CMAKE_OSX_ARCHITECTURES_ "$ENV{MACOS_ARCH}") set(Whispercpp_Build_GIT_TAG "f68298ce06ca3edd6e6f3f21c3d0bb5f073942c3") -if(${CMAKE_BUILD_TYPE} STREQUAL Release OR ${CMAKE_BUILD_TYPE} STREQUAL RelWithDebInfo) +if(${CMAKE_BUILD_TYPE} STREQUAL Release OR ${CMAKE_BUILD_TYPE} STREQUAL + RelWithDebInfo) set(Whispercpp_BUILD_TYPE Release) else() set(Whispercpp_BUILD_TYPE Debug) @@ -26,51 +27,68 @@ endif() if(APPLE) # check the "MACOS_ARCH" env var to figure out if this is x86_64 or arm64 if(NOT DEFINED ENV{MACOS_ARCH}) - message(FATAL_ERROR "The MACOS_ARCH environment variable is not set. Please set it to either `x86_64` or `arm64`") + message( + FATAL_ERROR + "The MACOS_ARCH environment variable is not set. Please set it to either `x86_64` or `arm64`" + ) endif(NOT DEFINED ENV{MACOS_ARCH}) - set(WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_METAL=ON -DWHISPER_COREML=ON -DWHISPER_COREML_ALLOW_FALLBACK=ON) + set(WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_METAL=ON -DWHISPER_COREML=ON + -DWHISPER_COREML_ALLOW_FALLBACK=ON) set(WHISPER_EXTRA_CXX_FLAGS - "-Wno-shorten-64-to-32 -Wno-unused-parameter -Wno-unused-function -Wno-unguarded-availability-new") + "-Wno-shorten-64-to-32 -Wno-unused-parameter -Wno-unused-function -Wno-unguarded-availability-new" + ) endif() if(WIN32) if(WHISPERCPP_WITH_CUDA) # Build with CUDA Check that CUDA_TOOLKIT_ROOT_DIR is set if(NOT DEFINED CUDA_TOOLKIT_ROOT_DIR) - message(FATAL_ERROR "CUDA_TOOLKIT_ROOT_DIR is not set. Please set it to the root directory of your CUDA " - "installation, e.g. `C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.4`") + message( + FATAL_ERROR + "CUDA_TOOLKIT_ROOT_DIR is not set. Please set it to the root directory of your CUDA " + "installation, e.g. `C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.4`" + ) endif(NOT DEFINED CUDA_TOOLKIT_ROOT_DIR) set(WHISPER_ADDITIONAL_ENV "CUDAToolkit_ROOT=${CUDA_TOOLKIT_ROOT_DIR}") - set(WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_CUDA=ON - -DCMAKE_GENERATOR_TOOLSET=cuda=${CUDA_TOOLKIT_ROOT_DIR}) + set(WHISPER_ADDITIONAL_CMAKE_ARGS + -DGGML_CUDA=ON -DCMAKE_GENERATOR_TOOLSET=cuda=${CUDA_TOOLKIT_ROOT_DIR}) set(WHISPER_CMAKE_GENERATOR ${CMAKE_GENERATOR}) elseif(WHISPERCPP_WITH_HIPBLAS) # Build with hipBLAS - if (NOT DEFINED ENV{HIP_PATH}) - message(FATAL_ERROR "HIP_PATH is not set. Please set it to the root directory of your HIP installation, e.g. `C:/Program Files/ROCm`") + if(NOT DEFINED ENV{HIP_PATH}) + message( + FATAL_ERROR + "HIP_PATH is not set. Please set it to the root directory of your HIP installation, e.g. `C:/Program Files/ROCm`" + ) endif(NOT DEFINED ENV{HIP_PATH}) cmake_path(SET HIP_PATH_STR NORMALIZE "$ENV{HIP_PATH}") set(WHISPER_ADDITIONAL_ENV "CMAKE_PREFIX_PATH=${HIP_PATH_STR}") - set(WHISPER_ADDITIONAL_CMAKE_ARGS -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DGGML_HIPBLAS=ON -DGGML_CUDA=OFF) + set(WHISPER_ADDITIONAL_CMAKE_ARGS + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DGGML_HIPBLAS=ON + -DGGML_CUDA=OFF) set(WHISPER_CMAKE_GENERATOR ${CMAKE_GENERATOR}) else() # Build with OpenBLAS - set(OpenBLAS_URL "https://github.com/OpenMathLib/OpenBLAS/releases/download/v0.3.26/OpenBLAS-0.3.26-x64.zip") - set(OpenBLAS_SHA256 "859C510A962A30EF1B01AA93CDE26FDB5FB1050F94AD5AB2802EBA3731935E06") + set(OpenBLAS_URL + "https://github.com/OpenMathLib/OpenBLAS/releases/download/v0.3.26/OpenBLAS-0.3.26-x64.zip" + ) + set(OpenBLAS_SHA256 + "859C510A962A30EF1B01AA93CDE26FDB5FB1050F94AD5AB2802EBA3731935E06") FetchContent_Declare( OpenBLAS URL ${OpenBLAS_URL} URL_HASH SHA256=${OpenBLAS_SHA256} - DOWNLOAD_EXTRACT_TIMESTAMP true - ) + DOWNLOAD_EXTRACT_TIMESTAMP true) FetchContent_MakeAvailable(OpenBLAS) set(OpenBLAS_DIR ${openblas_SOURCE_DIR}) message(STATUS "OpenBLAS_DIR: ${OpenBLAS_DIR}") set(WHISPER_ADDITIONAL_ENV "OPENBLAS_PATH=${openblas_SOURCE_DIR}") - set(WHISPER_ADDITIONAL_CMAKE_ARGS -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS -DGGML_CUDA=OFF - -DBLAS_LIBRARIES=${OpenBLAS_DIR}/lib/libopenblas.lib -DBLAS_INCLUDE_DIRS=${OpenBLAS_DIR}/include) + set(WHISPER_ADDITIONAL_CMAKE_ARGS + -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=OpenBLAS -DGGML_CUDA=OFF + -DBLAS_LIBRARIES=${OpenBLAS_DIR}/lib/libopenblas.lib + -DBLAS_INCLUDE_DIRS=${OpenBLAS_DIR}/include) set(WHISPER_CMAKE_GENERATOR ${CMAKE_GENERATOR}) endif() @@ -79,23 +97,30 @@ if(WIN32) DOWNLOAD_EXTRACT_TIMESTAMP true GIT_REPOSITORY https://github.com/ggerganov/whisper.cpp.git GIT_TAG ${Whispercpp_Build_GIT_TAG} - BUILD_COMMAND ${CMAKE_COMMAND} --build --config ${Whispercpp_BUILD_TYPE} --verbose + BUILD_COMMAND ${CMAKE_COMMAND} --build --config + ${Whispercpp_BUILD_TYPE} --verbose BUILD_BYPRODUCTS /lib/static/${CMAKE_STATIC_LIBRARY_PREFIX}whisper${CMAKE_STATIC_LIBRARY_SUFFIX} /bin/${CMAKE_SHARED_LIBRARY_PREFIX}whisper${CMAKE_SHARED_LIBRARY_SUFFIX} /lib/${CMAKE_IMPORT_LIBRARY_PREFIX}whisper${CMAKE_IMPORT_LIBRARY_SUFFIX} CMAKE_GENERATOR ${CMAKE_GENERATOR} INSTALL_COMMAND - ${CMAKE_COMMAND} --install --config ${Whispercpp_BUILD_TYPE} && ${CMAKE_COMMAND} -E copy - /${Whispercpp_BUILD_TYPE}/whisper.lib /lib && ${CMAKE_COMMAND} -E copy - /ggml/include/ggml.h /include + ${CMAKE_COMMAND} --install --config ${Whispercpp_BUILD_TYPE} + && ${CMAKE_COMMAND} -E copy + /${Whispercpp_BUILD_TYPE}/whisper.lib /lib && + ${CMAKE_COMMAND} -E copy /ggml/include/ggml.h + /include CONFIGURE_COMMAND - ${CMAKE_COMMAND} -E env ${WHISPER_ADDITIONAL_ENV} ${CMAKE_COMMAND} -B -G - ${WHISPER_CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=${Whispercpp_BUILD_TYPE} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} -DCMAKE_CXX_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} - -DCMAKE_C_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} -DBUILD_SHARED_LIBS=ON -DWHISPER_BUILD_TESTS=OFF - -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_SERVER=OFF - -DCMAKE_MODULE_PATH=${CMAKE_SOURCE_DIR}/cmake ${WHISPER_ADDITIONAL_CMAKE_ARGS}) + ${CMAKE_COMMAND} -E env ${WHISPER_ADDITIONAL_ENV} ${CMAKE_COMMAND} + -B -G ${WHISPER_CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${Whispercpp_BUILD_TYPE} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_CXX_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} + -DCMAKE_C_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} -DBUILD_SHARED_LIBS=ON + -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=OFF + -DWHISPER_BUILD_SERVER=OFF -DCMAKE_MODULE_PATH=${CMAKE_SOURCE_DIR}/cmake + ${WHISPER_ADDITIONAL_CMAKE_ARGS}) else() # On Linux and MacOS build a static Whisper library ExternalProject_Add( @@ -103,60 +128,60 @@ else() DOWNLOAD_EXTRACT_TIMESTAMP true GIT_REPOSITORY https://github.com/ggerganov/whisper.cpp.git GIT_TAG ${Whispercpp_Build_GIT_TAG} - BUILD_COMMAND ${CMAKE_COMMAND} --build --config ${Whispercpp_BUILD_TYPE} - BUILD_BYPRODUCTS /lib/static/${CMAKE_STATIC_LIBRARY_PREFIX}whisper${CMAKE_STATIC_LIBRARY_SUFFIX} + BUILD_COMMAND ${CMAKE_COMMAND} --build --config + ${Whispercpp_BUILD_TYPE} + BUILD_BYPRODUCTS + /lib/static/${CMAKE_STATIC_LIBRARY_PREFIX}whisper${CMAKE_STATIC_LIBRARY_SUFFIX} CMAKE_GENERATOR ${CMAKE_GENERATOR} - INSTALL_COMMAND ${CMAKE_COMMAND} --install --config ${Whispercpp_BUILD_TYPE} && ${CMAKE_COMMAND} -E - copy /ggml/include/ggml.h /include + INSTALL_COMMAND + ${CMAKE_COMMAND} --install --config ${Whispercpp_BUILD_TYPE} + && ${CMAKE_COMMAND} -E copy /ggml/include/ggml.h + /include CONFIGURE_COMMAND - ${CMAKE_COMMAND} -E env ${WHISPER_ADDITIONAL_ENV} ${CMAKE_COMMAND} -B -G - ${CMAKE_GENERATOR} -DCMAKE_INSTALL_PREFIX= -DCMAKE_BUILD_TYPE=${Whispercpp_BUILD_TYPE} - -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 - -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_} -DCMAKE_CXX_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} - -DCMAKE_C_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} -DBUILD_SHARED_LIBS=OFF -DWHISPER_BUILD_TESTS=OFF - -DWHISPER_BUILD_EXAMPLES=OFF -DWHISPER_BUILD_SERVER=OFF ${WHISPER_ADDITIONAL_CMAKE_ARGS}) + ${CMAKE_COMMAND} -E env ${WHISPER_ADDITIONAL_ENV} ${CMAKE_COMMAND} + -B -G ${CMAKE_GENERATOR} + -DCMAKE_INSTALL_PREFIX= + -DCMAKE_BUILD_TYPE=${Whispercpp_BUILD_TYPE} + -DCMAKE_GENERATOR_PLATFORM=${CMAKE_GENERATOR_PLATFORM} + -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 + -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES_} + -DCMAKE_CXX_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} + -DCMAKE_C_FLAGS=${WHISPER_EXTRA_CXX_FLAGS} -DBUILD_SHARED_LIBS=OFF + -DWHISPER_BUILD_TESTS=OFF -DWHISPER_BUILD_EXAMPLES=OFF + -DWHISPER_BUILD_SERVER=OFF ${WHISPER_ADDITIONAL_CMAKE_ARGS}) endif(WIN32) ExternalProject_Get_Property(Whispercpp_Build INSTALL_DIR) # add the Whisper library to the link line if(WIN32) - # copy lib/ include/ and bin/ from ${INSTALL_DIR} to the release directory in the root of the project + # copy lib/ include/ and bin/ from ${INSTALL_DIR} to the release directory in + # the root of the project install(DIRECTORY ${INSTALL_DIR}/lib DESTINATION ${CMAKE_SOURCE_DIR}/release) - install(DIRECTORY ${INSTALL_DIR}/include DESTINATION ${CMAKE_SOURCE_DIR}/release) + install(DIRECTORY ${INSTALL_DIR}/include + DESTINATION ${CMAKE_SOURCE_DIR}/release) install(DIRECTORY ${INSTALL_DIR}/bin DESTINATION ${CMAKE_SOURCE_DIR}/release) if(NOT WHISPERCPP_WITH_CUDA AND NOT WHISPERCPP_WITH_HIPBLAS) # add openblas to the link line - install(DIRECTORY ${OpenBLAS_DIR}/lib DESTINATION ${CMAKE_SOURCE_DIR}/release) - install(DIRECTORY ${OpenBLAS_DIR}/include DESTINATION ${CMAKE_SOURCE_DIR}/release) - install(DIRECTORY ${OpenBLAS_DIR}/bin DESTINATION ${CMAKE_SOURCE_DIR}/release) + install(DIRECTORY ${OpenBLAS_DIR}/lib + DESTINATION ${CMAKE_SOURCE_DIR}/release) + install(DIRECTORY ${OpenBLAS_DIR}/include + DESTINATION ${CMAKE_SOURCE_DIR}/release) + install(DIRECTORY ${OpenBLAS_DIR}/bin + DESTINATION ${CMAKE_SOURCE_DIR}/release) elseif(WHISPERCPP_WITH_HIPBLAS) - message(STATUS "Copying HIP DLLs") - # file(TO_CMAKE_PATH ${clblast_SOURCE_DIR} clblast_SOURCE_DIR) - # # find the clblast DLLs in the bin directory of the CLBlast installation - # file(GLOB CLBLAST_DLLS "${clblast_SOURCE_DIR}/bin/clblast.dll") - # # if the files cannot be found, abort - # if(NOT CLBLAST_DLLS) - # message(FATAL_ERROR "Could not find CLBlast DLLs in ${clblast_SOURCE_DIR}/bin") - # endif() - # # copy the DLLs to the OBS plugin directory - # install(FILES ${CLBLAST_DLLS} DESTINATION ${CMAKE_SOURCE_DIR}/release/bin) - # install(DIRECTORY ${clblast_SOURCE_DIR}/include ${opencl_sdk_SOURCE_DIR}/include DESTINATION ${CMAKE_SOURCE_DIR}/release) - - # file(TO_CMAKE_PATH ${opencl_sdk_SOURCE_DIR} opencl_sdk_SOURCE_DIR) - # # find the opencl SDK DLLs in the bin directory of the OpenCL SDK installation - # file(GLOB OPENCL_SDK_DLLS "${opencl_sdk_SOURCE_DIR}/bin/OpenCL.dll") - # # if the files cannot be found, abort - # if(NOT OPENCL_SDK_DLLS) - # message(FATAL_ERROR "Could not find OpenCL SDK DLLs in ${opencl_sdk_SOURCE_DIR}/bin") - # endif() - # # copy the DLLs to the OBS plugin directory - # install(FILES ${OPENCL_SDK_DLLS} DESTINATION ${CMAKE_SOURCE_DIR}/release/bin) + message(STATUS "Setup HIP DLLs installation") + set(HIPBLAS_DLLS + "${HIP_PATH_STR}/bin/hipblas.dll" "${HIP_PATH_STR}/bin/rocblas.dll" + "${HIP_PATH_STR}/bin/amdhip64_6.dll" + "${HIP_PATH_STR}/bin/amd_comgr_2.dll") + install(FILES ${HIPBLAS_DLLS} DESTINATION ${CMAKE_SOURCE_DIR}/release/bin) else() # normalize CUDA path with file(TO_CMAKE_PATH) file(TO_CMAKE_PATH ${CUDA_TOOLKIT_ROOT_DIR} CUDA_TOOLKIT_ROOT_DIR) - # find the CUDA DLLs for cuBLAS in the bin directory of the CUDA installation e.g. cublas64_NN.dll + # find the CUDA DLLs for cuBLAS in the bin directory of the CUDA + # installation e.g. cublas64_NN.dll file(GLOB CUBLAS_DLLS "${CUDA_TOOLKIT_ROOT_DIR}/bin/cublas64_*.dll") # find cublasLt DLL, e.g. cublasLt64_11.dll file(GLOB CUBLASLT_DLLS "${CUDA_TOOLKIT_ROOT_DIR}/bin/cublasLt64_*.dll") @@ -166,13 +191,19 @@ if(WIN32) if(NOT CUBLAS_DLLS OR NOT CUBLASLT_DLLS OR NOT CUDART_DLLS) - message(FATAL_ERROR "Could not find cuBLAS, cuBLASLt or cuDART DLLs in ${CUDA_TOOLKIT_ROOT_DIR}/bin") + message( + FATAL_ERROR + "Could not find cuBLAS, cuBLASLt or cuDART DLLs in ${CUDA_TOOLKIT_ROOT_DIR}/bin" + ) endif() # copy the DLLs to the OBS plugin directory - install(FILES ${CUBLAS_DLLS} ${CUBLASLT_DLLS} ${CUDART_DLLS} DESTINATION ${CMAKE_SOURCE_DIR}/release/bin) + install(FILES ${CUBLAS_DLLS} ${CUBLASLT_DLLS} ${CUDART_DLLS} + DESTINATION ${CMAKE_SOURCE_DIR}/release/bin) endif() else() - # copy lib/ include/ and bin/ from ${INSTALL_DIR} to the release directory in the root of the project + # copy lib/ include/ and bin/ from ${INSTALL_DIR} to the release directory in + # the root of the project install(DIRECTORY ${INSTALL_DIR}/lib DESTINATION ${CMAKE_SOURCE_DIR}/release) - install(DIRECTORY ${INSTALL_DIR}/include DESTINATION ${CMAKE_SOURCE_DIR}/release) + install(DIRECTORY ${INSTALL_DIR}/include + DESTINATION ${CMAKE_SOURCE_DIR}/release) endif(WIN32)