1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
#
# BUILD THIRD PARTY FROM SUBMODULES
#
if(GGML_BACKEND_DL)
set(BUILD_SHARED_LIBS ON)
endif()
set(TARGET_NATIVE_OUTPUT_GGML ${A2_OUTPUT}/lib/${TARGET_NATIVE_CATEGORY_PREFIX}/org.argeo.tp.ggml)
set(TARGET_NATIVE_OUTPUT_LLAMA ${TARGET_NATIVE_OUTPUT_GGML})
# All CPU variants backends take the default output directory
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_GGML}>)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_GGML}>)
if(MINGW)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_GGML}>)
elseif(MSVC)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_GGML}>)
else()
endif()
if(NOT EXISTS ${GGML_LIBRARY})
## multiple backends libraries
if(NOT DEFINED GGML_BACKEND_DL AND NOT DEFINED GGML_NATIVE AND NOT DEFINED GGML_CPU_ALL_VARIANTS)
set(GGML_BACKEND_DL ON)
set(GGML_CPU_ALL_VARIANTS ON)
set(GGML_NATIVE OFF)
message(STATUS "Enabling GGML_BACKEND_DL with all CPU variants by default")
endif()
# build locally
if(JJML_FORCE_BUILD_LLAMA_GGML)
add_subdirectory(llama.cpp/ggml)
else() # default
add_subdirectory(ggml)
endif()
message(STATUS "Build ggml locally from submodule native/tp/ggml")
endif()
if(NOT EXISTS "${llama_LIBRARY}")
set(LLAMA_STANDALONE ON)
add_subdirectory(llama.cpp) # build locally
if(MINGW)
set_target_properties(llama PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_NATIVE_OUTPUT_LLAMA})
if(LLAMA_BUILD_TOOLS)
set_target_properties(mtmd PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_NATIVE_OUTPUT_LLAMA})
endif()
elseif(MSVC)
set_target_properties(llama PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_LLAMA}>)
if(LLAMA_BUILD_TOOLS)
set_target_properties(mtmd PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_LLAMA}>)
endif()
else()
set_target_properties(llama PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${TARGET_NATIVE_OUTPUT_LLAMA})
if(LLAMA_BUILD_TOOLS)
set_target_properties(mtmd PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${TARGET_NATIVE_OUTPUT_LLAMA})
endif()
endif()
if(LLAMA_BUILD_TOOLS)
set_target_properties(llama-cli PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_LLAMA}>)
set_target_properties(llama-bench PROPERTIES RUNTIME_OUTPUT_DIRECTORY $<1:${TARGET_NATIVE_OUTPUT_LLAMA}>)
endif()
message(STATUS "Build llama.cpp locally from submodule native/tp/llama.cpp")
endif()
# ggml and llama.cpp versions
# hack to retrieve GGML base version
# see https://stackoverflow.com/a/15519607
file(STRINGS ggml/CMakeLists.txt VersionSetter
REGEX "^[ ]*set\\(GGML_VERSION_MAJOR")
string(REGEX REPLACE "(^[ ]*set\\(GGML_VERSION_MAJOR[ ]*)([^\\)]*)\\)" "\\2"
GGML_VERSION_MAJOR ${VersionSetter})
file(STRINGS ggml/CMakeLists.txt VersionSetter
REGEX "^[ ]*set\\(GGML_VERSION_MINOR")
string(REGEX REPLACE "(^[ ]*set\\(GGML_VERSION_MINOR[ ]*)([^\\)]*)\\)" "\\2"
GGML_VERSION_MINOR ${VersionSetter})
file(STRINGS ggml/CMakeLists.txt VersionSetter
REGEX "^[ ]*set\\(GGML_VERSION_PATCH")
string(REGEX REPLACE "(^[ ]*set\\(GGML_VERSION_PATCH[ ]*)([^\\)]*)\\)" "\\2"
GGML_VERSION_PATCH ${VersionSetter})
if (Git_FOUND)
execute_process(COMMAND "${GIT_EXECUTABLE}" describe --exact-match --tags
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ggml
OUTPUT_VARIABLE JJML_GGML_TAG OUTPUT_STRIP_TRAILING_WHITESPACE)
if (NOT JJML_GGML_TAG)
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-list --count v${GGML_VERSION_MAJOR}.${GGML_VERSION_MINOR}.${GGML_VERSION_PATCH}..HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ggml
OUTPUT_VARIABLE JJML_GGML_COMMIT_COUNT OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-list --count HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/llama.cpp
OUTPUT_VARIABLE JJML_LLAMA_COMMIT_COUNT OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
if(NOT GGML_BUILD_NUMBER)
set(GGML_BUILD_NUMBER ${JJML_GGML_COMMIT_COUNT} CACHE INTERNAL GGML_BUILD_NUMBER)
endif()
if(NOT GGML_VERSION)
if (JJML_GGML_COMMIT_COUNT)
set(GGML_VERSION ${GGML_VERSION_MAJOR}.${GGML_VERSION_MINOR}.${GGML_VERSION_PATCH}.${JJML_GGML_COMMIT_COUNT} CACHE INTERNAL GGML_VERSION)
else()
set(GGML_VERSION ${GGML_VERSION_MAJOR}.${GGML_VERSION_MINOR}.${GGML_VERSION_PATCH} CACHE INTERNAL GGML_VERSION)
endif()
endif()
if(NOT LLAMA_BUILD_NUMBER)
set(LLAMA_BUILD_NUMBER ${JJML_LLAMA_COMMIT_COUNT} CACHE INTERNAL LLAMA_BUILD_NUMBER)
endif()
if(NOT LLAMA_VERSION)
set(LLAMA_VERSION 0.0.${JJML_LLAMA_COMMIT_COUNT} CACHE INTERNAL LLAMA_VERSION)
endif()
file(WRITE versions.mk "GGML_VERSION=${GGML_VERSION}\n")
file(APPEND versions.mk "LLAMA_VERSION=${LLAMA_VERSION}\n")
|