mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-30 08:42:00 +00:00 
			
		
		
		
	cmake : use list(APPEND ...) instead of set() + dedup linker (#9463)
* 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 (#9469) * try fix sycl build * use CMAKE_CXX_FLAGS as a string variable --------- Co-authored-by: Georgi Gerganov <ggerganov@gmail.com> * one more CMAKE_CXX_FLAGS fix (#9471) --------- Co-authored-by: Michael Podvitskiy <podvitskiymichael@gmail.com>
This commit is contained in:
		| @@ -26,6 +26,8 @@ if (NOT MSVC) | ||||
|     endif() | ||||
| endif() | ||||
|  | ||||
| unset(GGML_EXTRA_LIBS) | ||||
|  | ||||
| if (APPLE AND GGML_ACCELERATE) | ||||
|     find_library(ACCELERATE_FRAMEWORK Accelerate) | ||||
|     if (ACCELERATE_FRAMEWORK) | ||||
| @@ -35,7 +37,7 @@ if (APPLE AND GGML_ACCELERATE) | ||||
|         add_compile_definitions(ACCELERATE_NEW_LAPACK) | ||||
|         add_compile_definitions(ACCELERATE_LAPACK_ILP64) | ||||
|  | ||||
|         set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK}) | ||||
|         list(APPEND GGML_EXTRA_LIBS ${ACCELERATE_FRAMEWORK}) | ||||
|     else() | ||||
|         message(WARNING "Accelerate framework not found") | ||||
|     endif() | ||||
| @@ -87,7 +89,7 @@ if (GGML_METAL) | ||||
|             COMMENT "Generate assembly for embedded Metal library" | ||||
|         ) | ||||
|  | ||||
|         set(GGML_SOURCES_METAL ${GGML_SOURCES_METAL} ${METALLIB_EMBED_ASM}) | ||||
|     list(APPEND GGML_SOURCES_METAL ${METALLIB_EMBED_ASM}) | ||||
|     else() | ||||
|         if (GGML_METAL_SHADER_DEBUG) | ||||
|             # custom command to do the following: | ||||
| @@ -132,7 +134,7 @@ if (GGML_METAL) | ||||
|             ) | ||||
|     endif() # GGML_METAL_EMBED_LIBRARY | ||||
|  | ||||
|     set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} | ||||
|     list(APPEND GGML_EXTRA_LIBS | ||||
|         ${FOUNDATION_LIBRARY} | ||||
|         ${METAL_FRAMEWORK} | ||||
|         ${METALKIT_FRAMEWORK} | ||||
| @@ -157,11 +159,11 @@ if (GGML_OPENMP) | ||||
|  | ||||
|         add_compile_definitions(GGML_USE_OPENMP) | ||||
|  | ||||
|         set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} OpenMP::OpenMP_C OpenMP::OpenMP_CXX) | ||||
|         list(APPEND GGML_EXTRA_LIBS OpenMP::OpenMP_C OpenMP::OpenMP_CXX) | ||||
|  | ||||
|         if (GGML_MUSA) | ||||
|             set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} "/usr/lib/llvm-10/include/openmp") | ||||
|             set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} "/usr/lib/llvm-10/lib/libomp.so") | ||||
|             list(APPEND GGML_EXTRA_INCLUDES "/usr/lib/llvm-10/include/openmp") | ||||
|             list(APPEND GGML_EXTRA_LIBS     "/usr/lib/llvm-10/lib/libomp.so") | ||||
|         endif() | ||||
|     else() | ||||
|         message(WARNING "OpenMP not found") | ||||
| @@ -244,8 +246,8 @@ if (GGML_BLAS) | ||||
|         set(GGML_HEADERS_BLAS ../include/ggml-blas.h) | ||||
|         set(GGML_SOURCES_BLAS ggml-blas.cpp) | ||||
|  | ||||
|         set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS}     ${BLAS_LIBRARIES}) | ||||
|         set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${BLAS_INCLUDE_DIRS}) | ||||
|         list(APPEND GGML_EXTRA_LIBS     ${BLAS_LIBRARIES}) | ||||
|         list(APPEND GGML_EXTRA_INCLUDES ${BLAS_INCLUDE_DIRS}) | ||||
|     else() | ||||
|         message(WARNING "BLAS not found, please refer to " | ||||
|         "https://cmake.org/cmake/help/latest/module/FindBLAS.html#blas-lapack-vendors" | ||||
| @@ -368,19 +370,19 @@ if (GGML_CUDA) | ||||
|         if (GGML_STATIC) | ||||
|             if (WIN32) | ||||
|                 # As of 12.3.1 CUDA Toolkit for Windows does not offer a static cublas library | ||||
|                 set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas CUDA::cublasLt) | ||||
|                 list(APPEND GGML_EXTRA_LIBS CUDA::cudart_static CUDA::cublas CUDA::cublasLt) | ||||
|             else () | ||||
|                 if (GGML_MUSA) | ||||
|                     set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart_static MUSA::mublas_static) | ||||
|                     list(APPEND GGML_EXTRA_LIBS MUSA::musart_static MUSA::mublas_static) | ||||
|                 else() | ||||
|                     set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static) | ||||
|                     list(APPEND GGML_EXTRA_LIBS CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static) | ||||
|                 endif() | ||||
|             endif() | ||||
|         else() | ||||
|             if (GGML_MUSA) | ||||
|                 set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart MUSA::mublas) | ||||
|                 list(APPEND GGML_EXTRA_LIBS MUSA::musart MUSA::mublas) | ||||
|             else() | ||||
|                 set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt) | ||||
|                 list(APPEND GGML_EXTRA_LIBS CUDA::cudart CUDA::cublas CUDA::cublasLt) | ||||
|             endif() | ||||
|         endif() | ||||
|  | ||||
| @@ -388,9 +390,9 @@ if (GGML_CUDA) | ||||
|             # No VMM requested, no need to link directly with the cuda driver lib (libcuda.so) | ||||
|         else() | ||||
|             if (GGML_MUSA) | ||||
|                 set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musa_driver) # required by muDeviceGetAttribute(), muMemGetAllocationGranularity(...), ... | ||||
|                 list(APPEND GGML_EXTRA_LIBS MUSA::musa_driver) # required by muDeviceGetAttribute(), muMemGetAllocationGranularity(...), ... | ||||
|             else() | ||||
|                 set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ... | ||||
|                 list(APPEND GGML_EXTRA_LIBS CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ... | ||||
|             endif() | ||||
|         endif() | ||||
|     else() | ||||
| @@ -495,7 +497,7 @@ if (GGML_HIPBLAS) | ||||
|  | ||||
|     if (CXX_IS_HIPCC) | ||||
|         set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE CXX) | ||||
|         set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} hip::device) | ||||
|         list(APPEND GGML_EXTRA_LIBS hip::device) | ||||
|     else() | ||||
|         set_source_files_properties(${GGML_SOURCES_ROCM} PROPERTIES LANGUAGE HIP) | ||||
|     endif() | ||||
| @@ -504,7 +506,8 @@ if (GGML_HIPBLAS) | ||||
|         message(FATAL_ERROR "Static linking not supported for HIP/ROCm") | ||||
|     endif() | ||||
|  | ||||
|     set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} PUBLIC hip::host roc::rocblas roc::hipblas) | ||||
|     # TODO: this "PUBLIC" here seems wrong | ||||
|     list(APPEND GGML_EXTRA_LIBS PUBLIC hip::host roc::rocblas roc::hipblas) | ||||
| endif() | ||||
|  | ||||
| if (GGML_SYCL) | ||||
| @@ -513,7 +516,8 @@ if (GGML_SYCL) | ||||
|     endif() | ||||
|  | ||||
|     check_cxx_compiler_flag("-fsycl" SUPPORTS_SYCL) | ||||
|     if ( DEFINED ENV{ONEAPI_ROOT}) | ||||
|  | ||||
|     if (DEFINED ENV{ONEAPI_ROOT}) | ||||
|         message(STATUS "Using oneAPI Release SYCL compiler (icpx).") | ||||
|     elseif(SUPPORTS_SYCL) | ||||
|         message(WARNING "Using open-source SYCL compiler (clang++). Didn't detect ENV {ONEAPI_ROOT}. | ||||
| @@ -551,21 +555,27 @@ if (GGML_SYCL) | ||||
|  | ||||
|     find_package(DNNL) | ||||
|     message("-- DNNL found:" ${DNNL_FOUND}) | ||||
|  | ||||
|     if (GGML_SYCL_TARGET STREQUAL "INTEL") | ||||
|         add_compile_definitions(GGML_SYCL_DNNL=${DNNL_FOUND}) | ||||
|     else() | ||||
|         add_compile_definitions(GGML_SYCL_DNNL=0) | ||||
|     endif() | ||||
|  | ||||
|     if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL") | ||||
|         list(APPEND GGML_EXTRA_LIBS DNNL::dnnl) | ||||
|     endif() | ||||
|  | ||||
|     if (WIN32) | ||||
|         find_package(IntelSYCL REQUIRED) | ||||
|         find_package(MKL REQUIRED) | ||||
|         set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL) | ||||
|         list(APPEND GGML_EXTRA_LIBS IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL) | ||||
|     else() | ||||
|         if (GGML_SYCL_TARGET STREQUAL "INTEL") | ||||
|             set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread) | ||||
|             list(APPEND GGML_EXTRA_LIBS OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread) | ||||
|         elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA") | ||||
|             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda") | ||||
|             set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl pthread m dl onemkl) | ||||
|             list(APPEND GGML_EXTRA_LIBS pthread m dl onemkl) | ||||
|         endif() | ||||
|     endif() | ||||
|     if (${DNNL_FOUND} AND GGML_SYCL_TARGET STREQUAL "INTEL") | ||||
| @@ -579,7 +589,7 @@ if (GGML_RPC) | ||||
|     list(APPEND GGML_CDEF_PUBLIC GGML_USE_RPC) | ||||
|  | ||||
|     if (WIN32) | ||||
|         set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ws2_32) | ||||
|         list(APPEND GGML_EXTRA_LIBS ws2_32) | ||||
|     endif() | ||||
|  | ||||
|     set(GGML_HEADERS_RPC ../include/ggml-rpc.h) | ||||
| @@ -657,8 +667,8 @@ if (GGML_VULKAN) | ||||
|         set(GGML_HEADERS_VULKAN ${CMAKE_CURRENT_SOURCE_DIR}/../include/ggml-vulkan.h ${_ggml_vk_header}) | ||||
|         set(GGML_SOURCES_VULKAN ggml-vulkan.cpp ${_ggml_vk_source}) | ||||
|  | ||||
|         set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS} Vulkan::Vulkan) | ||||
|         set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) | ||||
|         list(APPEND GGML_EXTRA_LIBS     Vulkan::Vulkan) | ||||
|         list(APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}) | ||||
|     else() | ||||
|         message(WARNING "Vulkan not found") | ||||
|     endif() | ||||
| @@ -817,8 +827,8 @@ if (GGML_KOMPUTE) | ||||
|  | ||||
|         list(APPEND GGML_CDEF_PUBLIC GGML_USE_KOMPUTE) | ||||
|  | ||||
|         set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS}     kompute) | ||||
|         set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR}) | ||||
|         list(APPEND GGML_EXTRA_LIBS     kompute) | ||||
|         list(APPEND GGML_EXTRA_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}) | ||||
|     else() | ||||
|         message(WARNING "Kompute not found") | ||||
|     endif() | ||||
| @@ -883,9 +893,10 @@ if (GGML_CANN) | ||||
|             message(STATUS "CANN: CANN_INCLUDE_DIRS =  ${CANN_INCLUDE_DIRS}") | ||||
|             message(STATUS "CANN: CANN_LIBRARIES =  ${CANN_LIBRARIES}") | ||||
|  | ||||
|             set(GGML_EXTRA_LIBS     ${GGML_EXTRA_LIBS}     ${CANN_LIBRARIES} ) | ||||
|             set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CANN_INCLUDE_DIRS}) | ||||
|             set(GGML_EXTRA_LIBDIRS  ${GGML_EXTRA_LIBDIRS}  ${CANN_INSTALL_DIR}/lib64) | ||||
|             list(APPEND GGML_EXTRA_LIBS     ${CANN_LIBRARIES} ) | ||||
|             list(APPEND GGML_EXTRA_INCLUDES ${CANN_INCLUDE_DIRS}) | ||||
|             list(APPEND GGML_EXTRA_LIBDIRS  ${CANN_INSTALL_DIR}/lib64) | ||||
|  | ||||
|             list(APPEND GGML_CDEF_PUBLIC GGML_USE_CANN) | ||||
|         endif() | ||||
|     else() | ||||
| @@ -1325,9 +1336,11 @@ endif() | ||||
| target_compile_definitions(ggml PUBLIC    ${GGML_CDEF_PUBLIC}) | ||||
| target_include_directories(ggml PUBLIC  ../include) | ||||
| target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES}) | ||||
| target_link_directories(ggml PRIVATE ${GGML_EXTRA_LIBDIRS}) | ||||
| target_link_directories   (ggml PRIVATE   ${GGML_EXTRA_LIBDIRS}) | ||||
| target_compile_features   (ggml PRIVATE c_std_11) # don't bump | ||||
|  | ||||
| list(REMOVE_DUPLICATES GGML_EXTRA_LIBS) | ||||
|  | ||||
| target_link_libraries(ggml PRIVATE Threads::Threads ${GGML_EXTRA_LIBS}) | ||||
|  | ||||
| find_library(MATH_LIBRARY m) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Georgi Gerganov
					Georgi Gerganov