| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | cmake_minimum_required(VERSION 3.21)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | project(Ollama C CXX)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include(CheckLanguage)
 | 
					
						
							| 
									
										
										
										
											2025-08-15 05:42:58 +08:00
										 |  |  | include(GNUInstallDirs)
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | find_package(Threads REQUIRED)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(CMAKE_BUILD_TYPE Release)
 | 
					
						
							|  |  |  | set(BUILD_SHARED_LIBS ON)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(CMAKE_CXX_STANDARD 17)
 | 
					
						
							|  |  |  | set(CMAKE_CXX_STANDARD_REQUIRED ON)
 | 
					
						
							|  |  |  | set(CMAKE_CXX_EXTENSIONS OFF)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(GGML_BUILD ON)
 | 
					
						
							|  |  |  | set(GGML_SHARED ON)
 | 
					
						
							|  |  |  | set(GGML_CCACHE ON)
 | 
					
						
							|  |  |  | set(GGML_BACKEND_DL ON)
 | 
					
						
							|  |  |  | set(GGML_BACKEND_SHARED ON)
 | 
					
						
							|  |  |  | set(GGML_SCHED_MAX_COPIES 4)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set(GGML_LLAMAFILE ON)
 | 
					
						
							|  |  |  | set(GGML_CUDA_PEER_MAX_BATCH_SIZE 128)
 | 
					
						
							|  |  |  | set(GGML_CUDA_GRAPHS ON)
 | 
					
						
							| 
									
										
										
										
											2025-03-01 03:28:26 +08:00
										 |  |  | set(GGML_CUDA_FA ON)
 | 
					
						
							| 
									
										
										
										
											2025-09-12 22:59:14 +08:00
										 |  |  | set(GGML_CUDA_COMPRESSION_MODE default)
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-19 01:54:53 +08:00
										 |  |  | if((CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_OSX_ARCHITECTURES MATCHES "arm64") | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |     OR (NOT CMAKE_OSX_ARCHITECTURES AND NOT CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64|ARM64|ARMv[0-9]+"))
 | 
					
						
							|  |  |  |     set(GGML_CPU_ALL_VARIANTS ON)
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-05 07:05:39 +08:00
										 |  |  | if (CMAKE_OSX_ARCHITECTURES MATCHES "x86_64")
 | 
					
						
							|  |  |  |     set(CMAKE_BUILD_RPATH "@loader_path")
 | 
					
						
							|  |  |  |     set(CMAKE_INSTALL_RPATH "@loader_path")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | set(OLLAMA_BUILD_DIR ${CMAKE_BINARY_DIR}/lib/ollama)
 | 
					
						
							| 
									
										
										
										
											2025-09-11 03:05:18 +08:00
										 |  |  | set(OLLAMA_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib/ollama/${OLLAMA_RUNNER_DIR})
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY         ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG   ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY         ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG   ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${OLLAMA_BUILD_DIR})
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src)
 | 
					
						
							|  |  |  | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/include)
 | 
					
						
							|  |  |  | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-cpu)
 | 
					
						
							|  |  |  | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-cpu/amx)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-15 05:42:58 +08:00
										 |  |  | add_compile_definitions(NDEBUG GGML_VERSION=0x0 GGML_COMMIT=0x0)
 | 
					
						
							| 
									
										
										
										
											2025-05-22 00:39:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | set(GGML_CPU ON)
 | 
					
						
							| 
									
										
										
										
											2025-04-17 09:56:29 +08:00
										 |  |  | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src)
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | set_property(TARGET ggml PROPERTY EXCLUDE_FROM_ALL TRUE)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | get_target_property(CPU_VARIANTS ggml-cpu MANUALLY_ADDED_DEPENDENCIES)
 | 
					
						
							|  |  |  | if(NOT CPU_VARIANTS)
 | 
					
						
							|  |  |  |     set(CPU_VARIANTS "ggml-cpu")
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | install(TARGETS ggml-base ${CPU_VARIANTS} | 
					
						
							|  |  |  |     RUNTIME_DEPENDENCIES
 | 
					
						
							|  |  |  |         PRE_EXCLUDE_REGEXES ".*"
 | 
					
						
							|  |  |  |     RUNTIME DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT CPU
 | 
					
						
							|  |  |  |     LIBRARY DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT CPU
 | 
					
						
							|  |  |  |     FRAMEWORK DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT CPU
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | check_language(CUDA)
 | 
					
						
							|  |  |  | if(CMAKE_CUDA_COMPILER)
 | 
					
						
							|  |  |  |     if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24" AND NOT CMAKE_CUDA_ARCHITECTURES)
 | 
					
						
							|  |  |  |         set(CMAKE_CUDA_ARCHITECTURES "native")
 | 
					
						
							|  |  |  |     endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     find_package(CUDAToolkit)
 | 
					
						
							|  |  |  |     add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-cuda)
 | 
					
						
							|  |  |  |     install(TARGETS ggml-cuda | 
					
						
							|  |  |  |         RUNTIME_DEPENDENCIES
 | 
					
						
							| 
									
										
										
										
											2025-09-11 03:05:18 +08:00
										 |  |  |             DIRECTORIES ${CUDAToolkit_BIN_DIR} ${CUDAToolkit_BIN_DIR}/x64 ${CUDAToolkit_LIBRARY_DIR}
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |             PRE_INCLUDE_REGEXES cublas cublasLt cudart
 | 
					
						
							|  |  |  |             PRE_EXCLUDE_REGEXES ".*"
 | 
					
						
							| 
									
										
										
										
											2025-06-24 05:07:00 +08:00
										 |  |  |         RUNTIME DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT CUDA
 | 
					
						
							|  |  |  |         LIBRARY DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT CUDA
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |     )
 | 
					
						
							|  |  |  | endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-27 22:35:19 +08:00
										 |  |  | set(WINDOWS_AMDGPU_TARGETS_EXCLUDE_REGEX "^gfx(906|908|90a|1200|1201):xnack[+-]$" | 
					
						
							| 
									
										
										
										
											2025-02-08 01:51:22 +08:00
										 |  |  |     CACHE STRING
 | 
					
						
							| 
									
										
										
										
											2025-03-27 22:35:19 +08:00
										 |  |  |     "Regular expression describing AMDGPU_TARGETS not supported on Windows. Override to force building these targets. Default \"^gfx(906|908|90a|1200|1201):xnack[+-]$\"."
 | 
					
						
							| 
									
										
										
										
											2025-02-08 01:51:22 +08:00
										 |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  | check_language(HIP)
 | 
					
						
							|  |  |  | if(CMAKE_HIP_COMPILER)
 | 
					
						
							|  |  |  |     set(HIP_PLATFORM "amd")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     find_package(hip REQUIRED)
 | 
					
						
							|  |  |  |     if(NOT AMDGPU_TARGETS)
 | 
					
						
							| 
									
										
										
										
											2025-03-27 22:35:19 +08:00
										 |  |  |         list(FILTER AMDGPU_TARGETS INCLUDE REGEX "^gfx(900|94[012]|101[02]|1030|110[012]|120[01])$")
 | 
					
						
							| 
									
										
										
										
											2025-02-08 01:51:22 +08:00
										 |  |  |     elseif(WIN32 AND WINDOWS_AMDGPU_TARGETS_EXCLUDE_REGEX)
 | 
					
						
							|  |  |  |         list(FILTER AMDGPU_TARGETS EXCLUDE REGEX ${WINDOWS_AMDGPU_TARGETS_EXCLUDE_REGEX})
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |     endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if(AMDGPU_TARGETS)
 | 
					
						
							|  |  |  |         add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/ml/backend/ggml/ggml/src/ggml-hip)
 | 
					
						
							| 
									
										
										
										
											2025-02-07 05:12:16 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-02-13 16:23:17 +08:00
										 |  |  |         if (WIN32)
 | 
					
						
							| 
									
										
										
										
											2025-03-02 06:02:19 +08:00
										 |  |  |             target_compile_definitions(ggml-hip PRIVATE GGML_CUDA_NO_PEER_COPY)
 | 
					
						
							| 
									
										
										
										
											2025-02-13 16:23:17 +08:00
										 |  |  |         endif()
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-02 09:00:31 +08:00
										 |  |  |         target_compile_definitions(ggml-hip PRIVATE GGML_HIP_NO_VMM)
 | 
					
						
							| 
									
										
										
										
											2025-03-02 06:02:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |         set(OLLAMA_HIP_INSTALL_DIR ${OLLAMA_INSTALL_DIR}/rocm)
 | 
					
						
							|  |  |  |         install(TARGETS ggml-hip | 
					
						
							| 
									
										
										
										
											2025-06-24 05:07:00 +08:00
										 |  |  |             RUNTIME_DEPENDENCY_SET rocm
 | 
					
						
							|  |  |  |             RUNTIME DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT HIP
 | 
					
						
							|  |  |  |             LIBRARY DESTINATION ${OLLAMA_INSTALL_DIR} COMPONENT HIP
 | 
					
						
							|  |  |  |         )
 | 
					
						
							|  |  |  |         install(RUNTIME_DEPENDENCY_SET rocm | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |                 DIRECTORIES ${HIP_BIN_INSTALL_DIR} ${HIP_LIB_INSTALL_DIR}
 | 
					
						
							| 
									
										
										
										
											2025-02-07 07:46:30 +08:00
										 |  |  |                 PRE_INCLUDE_REGEXES hipblas rocblas amdhip64 rocsolver amd_comgr hsa-runtime64 rocsparse tinfo rocprofiler-register drm drm_amdgpu numa elf
 | 
					
						
							| 
									
										
										
										
											2025-01-30 07:03:38 +08:00
										 |  |  |                 PRE_EXCLUDE_REGEXES ".*"
 | 
					
						
							|  |  |  |                 POST_EXCLUDE_REGEXES "system32"
 | 
					
						
							|  |  |  |             RUNTIME DESTINATION ${OLLAMA_HIP_INSTALL_DIR} COMPONENT HIP
 | 
					
						
							|  |  |  |             LIBRARY DESTINATION ${OLLAMA_HIP_INSTALL_DIR} COMPONENT HIP
 | 
					
						
							|  |  |  |         )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         foreach(HIP_LIB_BIN_INSTALL_DIR IN ITEMS ${HIP_BIN_INSTALL_DIR} ${HIP_LIB_INSTALL_DIR})
 | 
					
						
							|  |  |  |             if(EXISTS ${HIP_LIB_BIN_INSTALL_DIR}/rocblas)
 | 
					
						
							|  |  |  |                 install(DIRECTORY ${HIP_LIB_BIN_INSTALL_DIR}/rocblas DESTINATION ${OLLAMA_HIP_INSTALL_DIR} COMPONENT HIP)
 | 
					
						
							|  |  |  |                 break()
 | 
					
						
							|  |  |  |             endif()
 | 
					
						
							|  |  |  |         endforeach()
 | 
					
						
							|  |  |  |     endif()
 | 
					
						
							|  |  |  | endif()
 |