ggerganov Michael Podvitskiy commited on
Commit
5497c27
·
1 Parent(s): 7cbca42

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]>

Files changed (1) hide show
  1. 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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${ACCELERATE_FRAMEWORK})
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
- set(GGML_SOURCES_METAL ${GGML_SOURCES_METAL} ${METALLIB_EMBED_ASM})
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS}
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} OpenMP::OpenMP_C OpenMP::OpenMP_CXX)
161
 
162
  if (GGML_MUSA)
163
- set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} "/usr/lib/llvm-10/include/openmp")
164
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} "/usr/lib/llvm-10/lib/libomp.so")
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${BLAS_LIBRARIES})
248
- set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${BLAS_INCLUDE_DIRS})
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas CUDA::cublasLt)
372
  else ()
373
  if (GGML_MUSA)
374
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart_static MUSA::mublas_static)
375
  else()
376
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart_static CUDA::cublas_static CUDA::cublasLt_static)
377
  endif()
378
  endif()
379
  else()
380
  if (GGML_MUSA)
381
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musart MUSA::mublas)
382
  else()
383
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cudart CUDA::cublas CUDA::cublasLt)
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} MUSA::musa_driver) # required by muDeviceGetAttribute(), muMemGetAllocationGranularity(...), ...
392
  else()
393
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} CUDA::cuda_driver) # required by cuDeviceGetAttribute(), cuMemGetAllocationGranularity(...), ...
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} hip::device)
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} PUBLIC hip::host roc::rocblas roc::hipblas)
 
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
- if ( DEFINED ENV{ONEAPI_ROOT})
 
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} IntelSYCL::SYCL_CXX MKL::MKL MKL::MKL_SYCL)
563
  else()
564
  if (GGML_SYCL_TARGET STREQUAL "INTEL")
565
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl OpenCL mkl_core pthread m dl mkl_sycl_blas mkl_intel_ilp64 mkl_tbb_thread)
566
  elseif (GGML_SYCL_TARGET STREQUAL "NVIDIA")
567
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsycl-targets=nvptx64-nvidia-cuda")
568
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} -fsycl pthread m dl onemkl)
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ws2_32)
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} Vulkan::Vulkan)
661
- set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} kompute)
821
- set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
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
- set(GGML_EXTRA_LIBS ${GGML_EXTRA_LIBS} ${CANN_LIBRARIES} )
887
- set(GGML_EXTRA_INCLUDES ${GGML_EXTRA_INCLUDES} ${CANN_INCLUDE_DIRS})
888
- set(GGML_EXTRA_LIBDIRS ${GGML_EXTRA_LIBDIRS} ${CANN_INSTALL_DIR}/lib64)
 
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 ${GGML_CDEF_PUBLIC})
1326
- target_include_directories(ggml PUBLIC ../include)
1327
  target_include_directories(ggml PRIVATE . ${GGML_EXTRA_INCLUDES})
1328
- target_link_directories(ggml PRIVATE ${GGML_EXTRA_LIBDIRS})
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)