|
| 1 | +# Copied from https://github.com/abetlen/llama-cpp-python/blob/main/CMakeLists.txt |
| 2 | +# Edits made to remove llama.cpp specific calls |
1 | 3 | cmake_minimum_required(VERSION 3.21) |
2 | 4 |
|
3 | | -project( |
4 | | - ${SKBUILD_PROJECT_NAME} |
5 | | - VERSION ${SKBUILD_PROJECT_VERSION} |
6 | | -) |
| 5 | +project(ggml) |
7 | 6 |
|
8 | | -message(SKBUILD_STATE="${SKBUILD_STATE}") |
| 7 | +function(ggml_python_install_target target) |
| 8 | + if(NOT TARGET ${target}) |
| 9 | + return() |
| 10 | + endif() |
9 | 11 |
|
10 | | -if(SKBUILD_STATE STREQUAL "editable") |
11 | | - # Temporary fix for https://github.com/scikit-build/scikit-build-core/issues/374 |
12 | | - set(GGML_PYTHON_INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib) |
13 | | -else() |
14 | | - set(GGML_PYTHON_INSTALL_DIR ${SKBUILD_PLATLIB_DIR}/ggml/lib) |
15 | | -endif() |
| 12 | + install( |
| 13 | + TARGETS ${target} |
| 14 | + LIBRARY DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 15 | + RUNTIME DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 16 | + ARCHIVE DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 17 | + FRAMEWORK DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 18 | + RESOURCE DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 19 | + ) |
| 20 | + install( |
| 21 | + TARGETS ${target} |
| 22 | + LIBRARY DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 23 | + RUNTIME DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 24 | + ARCHIVE DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 25 | + FRAMEWORK DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 26 | + RESOURCE DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 27 | + ) |
| 28 | + set_target_properties(${target} PROPERTIES |
| 29 | + INSTALL_RPATH "$ORIGIN" |
| 30 | + BUILD_WITH_INSTALL_RPATH TRUE |
| 31 | + ) |
| 32 | + if(UNIX) |
| 33 | + if(APPLE) |
| 34 | + set_target_properties(${target} PROPERTIES |
| 35 | + INSTALL_RPATH "@loader_path" |
| 36 | + BUILD_WITH_INSTALL_RPATH TRUE |
| 37 | + ) |
| 38 | + else() |
| 39 | + set_target_properties(${target} PROPERTIES |
| 40 | + INSTALL_RPATH "$ORIGIN" |
| 41 | + BUILD_WITH_INSTALL_RPATH TRUE |
| 42 | + ) |
| 43 | + endif() |
| 44 | + endif() |
| 45 | +endfunction() |
16 | 46 |
|
17 | 47 | set(BUILD_SHARED_LIBS "On") |
18 | | -set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) |
| 48 | + |
| 49 | +set(CMAKE_SKIP_BUILD_RPATH FALSE) |
| 50 | + |
| 51 | +# When building, don't use the install RPATH already |
| 52 | +# (but later on when installing) |
| 53 | +set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) |
| 54 | + |
| 55 | +# Add the automatically determined parts of the RPATH |
| 56 | +# which point to directories outside the build tree to the install RPATH |
| 57 | +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) |
| 58 | +set(CMAKE_SKIP_RPATH FALSE) |
| 59 | + |
| 60 | +# Architecture detection and settings for Apple platforms |
19 | 61 | if (APPLE) |
20 | | - if (CMAKE_SYSTEM_PROCESSOR MATCHES "arm64") |
21 | | - set(GGML_AVX "Off" CACHE BOOL "ggml: enable AVX" FORCE) |
22 | | - set(GGML_AVX2 "Off" CACHE BOOL "ggml: enable AVX2" FORCE) |
23 | | - set(GGML_FMA "Off" CACHE BOOL "ggml: enable FMA" FORCE) |
24 | | - set(GGML_F16C "Off" CACHE BOOL "ggml: enable F16C" FORCE) |
| 62 | + # Get the target architecture |
| 63 | + execute_process( |
| 64 | + COMMAND uname -m |
| 65 | + OUTPUT_VARIABLE HOST_ARCH |
| 66 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 67 | + ) |
| 68 | + |
| 69 | + # If CMAKE_OSX_ARCHITECTURES is not set, use the host architecture |
| 70 | + if(NOT CMAKE_OSX_ARCHITECTURES) |
| 71 | + set(CMAKE_OSX_ARCHITECTURES ${HOST_ARCH} CACHE STRING "Build architecture for macOS" FORCE) |
| 72 | + endif() |
| 73 | + |
| 74 | + message(STATUS "Host architecture: ${HOST_ARCH}") |
| 75 | + message(STATUS "Target architecture: ${CMAKE_OSX_ARCHITECTURES}") |
| 76 | + |
| 77 | + # Configure based on target architecture |
| 78 | + if(CMAKE_OSX_ARCHITECTURES STREQUAL "x86_64") |
| 79 | + # Intel Mac settings |
| 80 | + set(GGML_AVX "OFF" CACHE BOOL "ggml: enable AVX" FORCE) |
| 81 | + set(GGML_AVX2 "OFF" CACHE BOOL "ggml: enable AVX2" FORCE) |
| 82 | + set(GGML_FMA "OFF" CACHE BOOL "ggml: enable FMA" FORCE) |
| 83 | + set(GGML_F16C "OFF" CACHE BOOL "ggml: enable F16C" FORCE) |
25 | 84 | endif() |
26 | 85 |
|
27 | | - set(GGML_METAL_EMBED_LIBRARY "On" CACHE BOOL "ggml: embed metal library" FORCE) |
| 86 | + # Metal settings (enable for both architectures) |
| 87 | + set(GGML_METAL "ON" CACHE BOOL "ggml: enable Metal" FORCE) |
| 88 | + set(GGML_METAL_EMBED_LIBRARY "ON" CACHE BOOL "ggml: embed metal library" FORCE) |
28 | 89 | endif() |
| 90 | + |
| 91 | + |
29 | 92 | add_subdirectory(vendor/ggml) |
30 | | -install( |
31 | | - TARGETS ggml |
32 | | - ARCHIVE DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
33 | | - LIBRARY DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
34 | | - RUNTIME DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
35 | | - FRAMEWORK DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
36 | | - RESOURCE DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
37 | | -) |
38 | | -install( |
39 | | - FILES $<TARGET_RUNTIME_DLLS:ggml> |
40 | | - DESTINATION ${GGML_PYTHON_INSTALL_DIR} |
41 | | -) |
| 93 | + |
| 94 | +ggml_python_install_target(ggml) |
| 95 | + |
| 96 | +ggml_python_install_target(ggml-base) |
| 97 | + |
| 98 | +ggml_python_install_target(ggml-amx) |
| 99 | +ggml_python_install_target(ggml-blas) |
| 100 | +ggml_python_install_target(ggml-can) |
| 101 | +ggml_python_install_target(ggml-cpu) |
| 102 | +ggml_python_install_target(ggml-cuda) |
| 103 | +ggml_python_install_target(ggml-hip) |
| 104 | +ggml_python_install_target(ggml-kompute) |
| 105 | +ggml_python_install_target(ggml-metal) |
| 106 | +ggml_python_install_target(ggml-musa) |
| 107 | +ggml_python_install_target(ggml-rpc) |
| 108 | +ggml_python_install_target(ggml-sycl) |
| 109 | +ggml_python_install_target(ggml-vulkan) |
| 110 | + |
| 111 | +# Workaround for Windows + CUDA https://github.com/abetlen/llama-cpp-python/issues/563 |
| 112 | +if (WIN32) |
| 113 | + install( |
| 114 | + FILES $<TARGET_RUNTIME_DLLS:ggml> |
| 115 | + DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/ggml/lib |
| 116 | + ) |
| 117 | + install( |
| 118 | + FILES $<TARGET_RUNTIME_DLLS:ggml> |
| 119 | + DESTINATION ${SKBUILD_PLATLIB_DIR}/ggml/lib |
| 120 | + ) |
| 121 | +endif() |
0 commit comments