Spaces:
Sleeping
Sleeping
cmake : use list(APPEND ...) instead of set() + dedup linker (llama/9463)
Browse files* cmake : use list(APPEND ...) instead of set() + dedup linker
ggml-ci
* cmake : try fix sycl
* cmake : try to fix sycl 2
* cmake : fix sycl build (llama/9469)
* try fix sycl build
* use CMAKE_CXX_FLAGS as a string variable
---------
Co-authored-by: Georgi Gerganov <[email protected]>
* one more CMAKE_CXX_FLAGS fix (llama/9471)
---------
Co-authored-by: Michael Podvitskiy <[email protected]>
- ggml/src/CMakeLists.txt +45 -32
ggml/src/CMakeLists.txt
CHANGED
|
@@ -26,6 +26,8 @@ if (NOT MSVC)
|
|
| 26 |
endif()
|
| 27 |
endif()
|
| 28 |
|
|
|
|
|
|
|
| 29 |
if (APPLE AND GGML_ACCELERATE)
|
| 30 |
find_library(ACCELERATE_FRAMEWORK Accelerate)
|
| 31 |
if (ACCELERATE_FRAMEWORK)
|
|
@@ -35,7 +37,7 @@ if (APPLE AND GGML_ACCELERATE)
|
|
| 35 |
add_compile_definitions(ACCELERATE_NEW_LAPACK)
|
| 36 |
add_compile_definitions(ACCELERATE_LAPACK_ILP64)
|
| 37 |
|
| 38 |
-
|
| 39 |
else()
|
| 40 |
message(WARNING "Accelerate framework not found")
|
| 41 |
endif()
|
|
@@ -87,7 +89,7 @@ if (GGML_METAL)
|
|
| 87 |
COMMENT "Generate assembly for embedded Metal library"
|
| 88 |
)
|
| 89 |
|
| 90 |
-
|
| 91 |
else()
|
| 92 |
if (GGML_METAL_SHADER_DEBUG)
|
| 93 |
# custom command to do the following:
|
|
@@ -132,7 +134,7 @@ if (GGML_METAL)
|
|
| 132 |
)
|
| 133 |
endif() # GGML_METAL_EMBED_LIBRARY
|
| 134 |
|
| 135 |
-
|
| 136 |
${FOUNDATION_LIBRARY}
|
| 137 |
${METAL_FRAMEWORK}
|
| 138 |
${METALKIT_FRAMEWORK}
|
|
@@ -157,11 +159,11 @@ if (GGML_OPENMP)
|
|
| 157 |
|
| 158 |
add_compile_definitions(GGML_USE_OPENMP)
|
| 159 |
|
| 160 |
-
|
| 161 |
|
| 162 |
if (GGML_MUSA)
|
| 163 |
-
|
| 164 |
-
|
| 165 |
endif()
|
| 166 |
else()
|
| 167 |
message(WARNING "OpenMP not found")
|
|
@@ -244,8 +246,8 @@ if (GGML_BLAS)
|
|
| 244 |
set(GGML_HEADERS_BLAS ../include/ggml-blas.h)
|
| 245 |
set(GGML_SOURCES_BLAS ggml-blas.cpp)
|
| 246 |
|
| 247 |
-
|
| 248 |
-
|
| 249 |
else()
|
| 250 |
message(WARNING "BLAS not found, please refer to "
|
| 251 |
"https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors"
|
|
@@ -368,19 +370,19 @@ if (GGML_CUDA)
|
|
| 368 |
if (GGML_STATIC)
|
| 369 |
if (WIN32)
|
| 370 |
# As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library
|
| 371 |
-
|
| 372 |
else ()
|
| 373 |
if (GGML_MUSA)
|
| 374 |
-
|
| 375 |
else()
|
| 376 |
-
|
| 377 |
endif()
|
| 378 |
endif()
|
| 379 |
else()
|
| 380 |
if (GGML_MUSA)
|
| 381 |
-
|
| 382 |
else()
|
| 383 |
-
|
| 384 |
endif()
|
| 385 |
endif()
|
| 386 |
|
|
@@ -388,9 +390,9 @@ if (GGML_CUDA)
|
|
| 388 |
# No VMM requested, no need to link directly with the cuda driver lib (libcuda.so)
|
| 389 |
else()
|
| 390 |
if (GGML_MUSA)
|
| 391 |
-
|
| 392 |
else()
|
| 393 |
-
|
| 394 |
endif()
|
| 395 |
endif()
|
| 396 |
else()
|
|
@@ -495,7 +497,7 @@ if (GGML_HIPBLAS)
|
|
| 495 |
|
| 496 |
if (CXX_IS_HIPCC)
|
| 497 |
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
|
| 498 |
-
|
| 499 |
else()
|
| 500 |
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
|
| 501 |
endif()
|
|
@@ -504,7 +506,8 @@ if (GGML_HIPBLAS)
|
|
| 504 |
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
|
| 505 |
endif()
|
| 506 |
|
| 507 |
-
|
|
|
|
| 508 |
endif()
|
| 509 |
|
| 510 |
if (GGML_SYCL)
|
|
@@ -513,7 +516,8 @@ if (GGML_SYCL)
|
|
| 513 |
endif()
|
| 514 |
|
| 515 |
check_cxx_compiler_flag("-fsycl" SUPPORTS_SYCL)
|
| 516 |
-
|
|
|
|
| 517 |
message(STATUS "Using oneAPI Release SYCL compiler (icpx).")
|
| 518 |
elseif(SUPPORTS_SYCL)
|
| 519 |
message(WARNING "Using open-source SYCL compiler (clang++). Didn't detect ENV {ONEAPI_ROOT}.
|
|
@@ -551,21 +555,27 @@ if (GGML_SYCL)
|
|
| 551 |
|
| 552 |
find_package(DNNL)
|
| 553 |
message("-- DNNL found:" ${DNNL_FOUND})
|
|
|
|
| 554 |
if (GGML_SYCL_TARGET STREQUAL "INTEL")
|
| 555 |
add_compile_definitions(GGML_SYCL_DNNL=${DNNL_FOUND})
|
| 556 |
else()
|
| 557 |
add_compile_definitions(GGML_SYCL_DNNL=0)
|
| 558 |
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 559 |
if (WIN32)
|
| 560 |
find_package(IntelSYCL REQUIRED)
|
| 561 |
find_package(MKL REQUIRED)
|
| 562 |
-
|
| 563 |
else()
|
| 564 |
if (GGML_SYCL_TARGET STREQUAL "INTEL")
|
| 565 |
-
|
| 566 |
elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA")
|
| 567 |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda")
|
| 568 |
-
|
| 569 |
endif()
|
| 570 |
endif()
|
| 571 |
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
|
|
@@ -579,7 +589,7 @@ if (GGML_RPC)
|
|
| 579 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_RPC)
|
| 580 |
|
| 581 |
if (WIN32)
|
| 582 |
-
|
| 583 |
endif()
|
| 584 |
|
| 585 |
set(GGML_HEADERS_RPC ../include/ggml-rpc.h)
|
|
@@ -657,8 +667,8 @@ if (GGML_VULKAN)
|
|
| 657 |
set(GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR}/../include/ggml-vulkan.h ${_ggml_vk_header})
|
| 658 |
set(GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source})
|
| 659 |
|
| 660 |
-
|
| 661 |
-
|
| 662 |
else()
|
| 663 |
message(WARNING "Vulkan not found")
|
| 664 |
endif()
|
|
@@ -817,8 +827,8 @@ if (GGML_KOMPUTE)
|
|
| 817 |
|
| 818 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_KOMPUTE)
|
| 819 |
|
| 820 |
-
|
| 821 |
-
|
| 822 |
else()
|
| 823 |
message(WARNING "Kompute not found")
|
| 824 |
endif()
|
|
@@ -883,9 +893,10 @@ if (GGML_CANN)
|
|
| 883 |
message(STATUS "CANN: CANN_INCLUDE_DIRS = ${CANN_INCLUDE_DIRS}")
|
| 884 |
message(STATUS "CANN: CANN_LIBRARIES = ${CANN_LIBRARIES}")
|
| 885 |
|
| 886 |
-
|
| 887 |
-
|
| 888 |
-
|
|
|
|
| 889 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_CANN)
|
| 890 |
endif()
|
| 891 |
else()
|
|
@@ -1322,12 +1333,14 @@ if (EMSCRIPTEN)
|
|
| 1322 |
set_target_properties(ggml PROPERTIES COMPILE_FLAGS "-msimd128")
|
| 1323 |
endif()
|
| 1324 |
|
| 1325 |
-
target_compile_definitions(ggml PUBLIC
|
| 1326 |
-
target_include_directories(ggml PUBLIC
|
| 1327 |
target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES})
|
| 1328 |
-
target_link_directories(ggml PRIVATE
|
| 1329 |
target_compile_features (ggml PRIVATE c_std_11) # don't bump
|
| 1330 |
|
|
|
|
|
|
|
| 1331 |
target_link_libraries(ggml PRIVATE Threads::Threads ${GGML_EXTRA_LIBS})
|
| 1332 |
|
| 1333 |
find_library(MATH_LIBRARY m)
|
|
|
|
| 26 |
endif()
|
| 27 |
endif()
|
| 28 |
|
| 29 |
+
unset(GGML_EXTRA_LIBS)
|
| 30 |
+
|
| 31 |
if (APPLE AND GGML_ACCELERATE)
|
| 32 |
find_library(ACCELERATE_FRAMEWORK Accelerate)
|
| 33 |
if (ACCELERATE_FRAMEWORK)
|
|
|
|
| 37 |
add_compile_definitions(ACCELERATE_NEW_LAPACK)
|
| 38 |
add_compile_definitions(ACCELERATE_LAPACK_ILP64)
|
| 39 |
|
| 40 |
+
list(APPEND GGML_EXTRA_LIBS ${ACCELERATE_FRAMEWORK})
|
| 41 |
else()
|
| 42 |
message(WARNING "Accelerate framework not found")
|
| 43 |
endif()
|
|
|
|
| 89 |
COMMENT "Generate assembly for embedded Metal library"
|
| 90 |
)
|
| 91 |
|
| 92 |
+
list(APPEND GGML_SOURCES_METAL ${METALLIB_EMBED_ASM})
|
| 93 |
else()
|
| 94 |
if (GGML_METAL_SHADER_DEBUG)
|
| 95 |
# custom command to do the following:
|
|
|
|
| 134 |
)
|
| 135 |
endif() # GGML_METAL_EMBED_LIBRARY
|
| 136 |
|
| 137 |
+
list(APPEND GGML_EXTRA_LIBS
|
| 138 |
${FOUNDATION_LIBRARY}
|
| 139 |
${METAL_FRAMEWORK}
|
| 140 |
${METALKIT_FRAMEWORK}
|
|
|
|
| 159 |
|
| 160 |
add_compile_definitions(GGML_USE_OPENMP)
|
| 161 |
|
| 162 |
+
list(APPEND GGML_EXTRA_LIBS OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
|
| 163 |
|
| 164 |
if (GGML_MUSA)
|
| 165 |
+
list(APPEND GGML_EXTRA_INCLUDES "/usr/lib/llvm-10/include/openmp")
|
| 166 |
+
list(APPEND GGML_EXTRA_LIBS "/usr/lib/llvm-10/lib/libomp.so")
|
| 167 |
endif()
|
| 168 |
else()
|
| 169 |
message(WARNING "OpenMP not found")
|
|
|
|
| 246 |
set(GGML_HEADERS_BLAS ../include/ggml-blas.h)
|
| 247 |
set(GGML_SOURCES_BLAS ggml-blas.cpp)
|
| 248 |
|
| 249 |
+
list(APPEND GGML_EXTRA_LIBS ${BLAS_LIBRARIES})
|
| 250 |
+
list(APPEND GGML_EXTRA_INCLUDES ${BLAS_INCLUDE_DIRS})
|
| 251 |
else()
|
| 252 |
message(WARNING "BLAS not found, please refer to "
|
| 253 |
"https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors"
|
|
|
|
| 370 |
if (GGML_STATIC)
|
| 371 |
if (WIN32)
|
| 372 |
# As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library
|
| 373 |
+
list(APPEND GGML_EXTRA_LIBS CUDA::cudart_static CUDA::cublas CUDA::cublasLt)
|
| 374 |
else ()
|
| 375 |
if (GGML_MUSA)
|
| 376 |
+
list(APPEND GGML_EXTRA_LIBS MUSA::musart_static MUSA::mublas_static)
|
| 377 |
else()
|
| 378 |
+
list(APPEND GGML_EXTRA_LIBS CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static)
|
| 379 |
endif()
|
| 380 |
endif()
|
| 381 |
else()
|
| 382 |
if (GGML_MUSA)
|
| 383 |
+
list(APPEND GGML_EXTRA_LIBS MUSA::musart MUSA::mublas)
|
| 384 |
else()
|
| 385 |
+
list(APPEND GGML_EXTRA_LIBS CUDA::cudart CUDA::cublas CUDA::cublasLt)
|
| 386 |
endif()
|
| 387 |
endif()
|
| 388 |
|
|
|
|
| 390 |
# No VMM requested, no need to link directly with the cuda driver lib (libcuda.so)
|
| 391 |
else()
|
| 392 |
if (GGML_MUSA)
|
| 393 |
+
list(APPEND GGML_EXTRA_LIBS MUSA::musa_driver) # required by muDeviceGetAttribute(), muMemGetAllocationGranularity(...), ...
|
| 394 |
else()
|
| 395 |
+
list(APPEND GGML_EXTRA_LIBS CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ...
|
| 396 |
endif()
|
| 397 |
endif()
|
| 398 |
else()
|
|
|
|
| 497 |
|
| 498 |
if (CXX_IS_HIPCC)
|
| 499 |
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX)
|
| 500 |
+
list(APPEND GGML_EXTRA_LIBS hip::device)
|
| 501 |
else()
|
| 502 |
set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP)
|
| 503 |
endif()
|
|
|
|
| 506 |
message(FATAL_ERROR "Static linking not supported for HIP/ROCm")
|
| 507 |
endif()
|
| 508 |
|
| 509 |
+
# TODO: this "PUBLIC" here seems wrong
|
| 510 |
+
list(APPEND GGML_EXTRA_LIBS PUBLIC hip::host roc::rocblas roc::hipblas)
|
| 511 |
endif()
|
| 512 |
|
| 513 |
if (GGML_SYCL)
|
|
|
|
| 516 |
endif()
|
| 517 |
|
| 518 |
check_cxx_compiler_flag("-fsycl" SUPPORTS_SYCL)
|
| 519 |
+
|
| 520 |
+
if (DEFINED ENV{ONEAPI_ROOT})
|
| 521 |
message(STATUS "Using oneAPI Release SYCL compiler (icpx).")
|
| 522 |
elseif(SUPPORTS_SYCL)
|
| 523 |
message(WARNING "Using open-source SYCL compiler (clang++). Didn't detect ENV {ONEAPI_ROOT}.
|
|
|
|
| 555 |
|
| 556 |
find_package(DNNL)
|
| 557 |
message("-- DNNL found:" ${DNNL_FOUND})
|
| 558 |
+
|
| 559 |
if (GGML_SYCL_TARGET STREQUAL "INTEL")
|
| 560 |
add_compile_definitions(GGML_SYCL_DNNL=${DNNL_FOUND})
|
| 561 |
else()
|
| 562 |
add_compile_definitions(GGML_SYCL_DNNL=0)
|
| 563 |
endif()
|
| 564 |
+
|
| 565 |
+
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
|
| 566 |
+
list(APPEND GGML_EXTRA_LIBS DNNL::dnnl)
|
| 567 |
+
endif()
|
| 568 |
+
|
| 569 |
if (WIN32)
|
| 570 |
find_package(IntelSYCL REQUIRED)
|
| 571 |
find_package(MKL REQUIRED)
|
| 572 |
+
list(APPEND GGML_EXTRA_LIBS IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
|
| 573 |
else()
|
| 574 |
if (GGML_SYCL_TARGET STREQUAL "INTEL")
|
| 575 |
+
list(APPEND GGML_EXTRA_LIBS OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread)
|
| 576 |
elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA")
|
| 577 |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda")
|
| 578 |
+
list(APPEND GGML_EXTRA_LIBS pthread m dl onemkl)
|
| 579 |
endif()
|
| 580 |
endif()
|
| 581 |
if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL")
|
|
|
|
| 589 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_RPC)
|
| 590 |
|
| 591 |
if (WIN32)
|
| 592 |
+
list(APPEND GGML_EXTRA_LIBS ws2_32)
|
| 593 |
endif()
|
| 594 |
|
| 595 |
set(GGML_HEADERS_RPC ../include/ggml-rpc.h)
|
|
|
|
| 667 |
set(GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR}/../include/ggml-vulkan.h ${_ggml_vk_header})
|
| 668 |
set(GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source})
|
| 669 |
|
| 670 |
+
list(APPEND GGML_EXTRA_LIBS Vulkan::Vulkan)
|
| 671 |
+
list(APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR})
|
| 672 |
else()
|
| 673 |
message(WARNING "Vulkan not found")
|
| 674 |
endif()
|
|
|
|
| 827 |
|
| 828 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_KOMPUTE)
|
| 829 |
|
| 830 |
+
list(APPEND GGML_EXTRA_LIBS kompute)
|
| 831 |
+
list(APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR})
|
| 832 |
else()
|
| 833 |
message(WARNING "Kompute not found")
|
| 834 |
endif()
|
|
|
|
| 893 |
message(STATUS "CANN: CANN_INCLUDE_DIRS = ${CANN_INCLUDE_DIRS}")
|
| 894 |
message(STATUS "CANN: CANN_LIBRARIES = ${CANN_LIBRARIES}")
|
| 895 |
|
| 896 |
+
list(APPEND GGML_EXTRA_LIBS ${CANN_LIBRARIES} )
|
| 897 |
+
list(APPEND GGML_EXTRA_INCLUDES ${CANN_INCLUDE_DIRS})
|
| 898 |
+
list(APPEND GGML_EXTRA_LIBDIRS ${CANN_INSTALL_DIR}/lib64)
|
| 899 |
+
|
| 900 |
list(APPEND GGML_CDEF_PUBLIC GGML_USE_CANN)
|
| 901 |
endif()
|
| 902 |
else()
|
|
|
|
| 1333 |
set_target_properties(ggml PROPERTIES COMPILE_FLAGS "-msimd128")
|
| 1334 |
endif()
|
| 1335 |
|
| 1336 |
+
target_compile_definitions(ggml PUBLIC ${GGML_CDEF_PUBLIC})
|
| 1337 |
+
target_include_directories(ggml PUBLIC ../include)
|
| 1338 |
target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES})
|
| 1339 |
+
target_link_directories (ggml PRIVATE ${GGML_EXTRA_LIBDIRS})
|
| 1340 |
target_compile_features (ggml PRIVATE c_std_11) # don't bump
|
| 1341 |
|
| 1342 |
+
list(REMOVE_DUPLICATES GGML_EXTRA_LIBS)
|
| 1343 |
+
|
| 1344 |
target_link_libraries(ggml PRIVATE Threads::Threads ${GGML_EXTRA_LIBS})
|
| 1345 |
|
| 1346 |
find_library(MATH_LIBRARY m)
|