summaryrefslogtreecommitdiff
path: root/llama.cpp/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'llama.cpp/cmake')
-rw-r--r--llama.cpp/cmake/arm64-apple-clang.cmake16
-rw-r--r--llama.cpp/cmake/arm64-windows-llvm.cmake16
-rw-r--r--llama.cpp/cmake/build-info.cmake48
-rw-r--r--llama.cpp/cmake/common.cmake58
-rw-r--r--llama.cpp/cmake/download-models.cmake21
-rw-r--r--llama.cpp/cmake/git-vars.cmake22
-rw-r--r--llama.cpp/cmake/license.cmake40
-rw-r--r--llama.cpp/cmake/llama-config.cmake.in30
-rw-r--r--llama.cpp/cmake/llama.pc.in10
-rw-r--r--llama.cpp/cmake/riscv64-spacemit-linux-gnu-gcc.cmake29
-rw-r--r--llama.cpp/cmake/x64-windows-llvm.cmake5
11 files changed, 295 insertions, 0 deletions
diff --git a/llama.cpp/cmake/arm64-apple-clang.cmake b/llama.cpp/cmake/arm64-apple-clang.cmake
new file mode 100644
index 0000000..5fcd288
--- /dev/null
+++ b/llama.cpp/cmake/arm64-apple-clang.cmake
@@ -0,0 +1,16 @@
+set( CMAKE_SYSTEM_NAME Darwin )
+set( CMAKE_SYSTEM_PROCESSOR arm64 )
+
+set( target arm64-apple-darwin-macho )
+
+set( CMAKE_C_COMPILER clang )
+set( CMAKE_CXX_COMPILER clang++ )
+
+set( CMAKE_C_COMPILER_TARGET ${target} )
+set( CMAKE_CXX_COMPILER_TARGET ${target} )
+
+set( arch_c_flags "-march=armv8.4-a -fvectorize -ffp-model=fast -fno-finite-math-only" )
+set( warn_c_flags "-Wno-format -Wno-unused-variable -Wno-unused-function" )
+
+set( CMAKE_C_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" )
+set( CMAKE_CXX_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" )
diff --git a/llama.cpp/cmake/arm64-windows-llvm.cmake b/llama.cpp/cmake/arm64-windows-llvm.cmake
new file mode 100644
index 0000000..8023796
--- /dev/null
+++ b/llama.cpp/cmake/arm64-windows-llvm.cmake
@@ -0,0 +1,16 @@
+set( CMAKE_SYSTEM_NAME Windows )
+set( CMAKE_SYSTEM_PROCESSOR arm64 )
+
+set( target arm64-pc-windows-msvc )
+
+set( CMAKE_C_COMPILER clang )
+set( CMAKE_CXX_COMPILER clang++ )
+
+set( CMAKE_C_COMPILER_TARGET ${target} )
+set( CMAKE_CXX_COMPILER_TARGET ${target} )
+
+set( arch_c_flags "-march=armv8.7-a -fvectorize -ffp-model=fast -fno-finite-math-only" )
+set( warn_c_flags "-Wno-format -Wno-unused-variable -Wno-unused-function -Wno-gnu-zero-variadic-macro-arguments" )
+
+set( CMAKE_C_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" )
+set( CMAKE_CXX_FLAGS_INIT "${arch_c_flags} ${warn_c_flags}" )
diff --git a/llama.cpp/cmake/build-info.cmake b/llama.cpp/cmake/build-info.cmake
new file mode 100644
index 0000000..c700595
--- /dev/null
+++ b/llama.cpp/cmake/build-info.cmake
@@ -0,0 +1,48 @@
+set(BUILD_NUMBER 0)
+set(BUILD_COMMIT "unknown")
+set(BUILD_COMPILER "unknown")
+set(BUILD_TARGET "unknown")
+
+# Look for git
+find_package(Git)
+if(NOT Git_FOUND)
+ find_program(GIT_EXECUTABLE NAMES git git.exe)
+ if(GIT_EXECUTABLE)
+ set(Git_FOUND TRUE)
+ message(STATUS "Found Git: ${GIT_EXECUTABLE}")
+ else()
+ message(WARNING "Git not found. Build info will not be accurate.")
+ endif()
+endif()
+
+# Get the commit count and hash
+if(Git_FOUND)
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ OUTPUT_VARIABLE HEAD
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+ )
+ if (RES EQUAL 0)
+ set(BUILD_COMMIT ${HEAD})
+ endif()
+ execute_process(
+ COMMAND ${GIT_EXECUTABLE} rev-list --count HEAD
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ OUTPUT_VARIABLE COUNT
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ RESULT_VARIABLE RES
+ )
+ if (RES EQUAL 0)
+ set(BUILD_NUMBER ${COUNT})
+ endif()
+endif()
+
+set(BUILD_COMPILER "${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
+
+if(CMAKE_VS_PLATFORM_NAME)
+ set(BUILD_TARGET ${CMAKE_VS_PLATFORM_NAME})
+else()
+ set(BUILD_TARGET "${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_PROCESSOR}")
+endif()
diff --git a/llama.cpp/cmake/common.cmake b/llama.cpp/cmake/common.cmake
new file mode 100644
index 0000000..bcf403e
--- /dev/null
+++ b/llama.cpp/cmake/common.cmake
@@ -0,0 +1,58 @@
+include("ggml/cmake/common.cmake")
+
+function(llama_add_compile_flags)
+ if (LLAMA_FATAL_WARNINGS)
+ if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ list(APPEND C_FLAGS -Werror)
+ list(APPEND CXX_FLAGS -Werror)
+ elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+ add_compile_options(/WX)
+ endif()
+ endif()
+
+ if (LLAMA_ALL_WARNINGS)
+ if (NOT MSVC)
+ list(APPEND C_FLAGS -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes
+ -Werror=implicit-int -Werror=implicit-function-declaration)
+
+ list(APPEND CXX_FLAGS -Wmissing-declarations -Wmissing-noreturn)
+
+ list(APPEND WARNING_FLAGS -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)
+
+ list(APPEND C_FLAGS ${WARNING_FLAGS})
+ list(APPEND CXX_FLAGS ${WARNING_FLAGS})
+
+ ggml_get_flags(${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION})
+
+ add_compile_options("$<$<COMPILE_LANGUAGE:C>:${C_FLAGS};${GF_C_FLAGS}>"
+ "$<$<COMPILE_LANGUAGE:CXX>:${CXX_FLAGS};${GF_CXX_FLAGS}>")
+ else()
+ # todo : msvc
+ set(C_FLAGS "" PARENT_SCOPE)
+ set(CXX_FLAGS "" PARENT_SCOPE)
+ endif()
+ endif()
+
+ if (NOT MSVC)
+ if (LLAMA_SANITIZE_THREAD)
+ message(STATUS "Using -fsanitize=thread")
+
+ add_compile_options(-fsanitize=thread)
+ link_libraries (-fsanitize=thread)
+ endif()
+
+ if (LLAMA_SANITIZE_ADDRESS)
+ message(STATUS "Using -fsanitize=address")
+
+ add_compile_options(-fsanitize=address -fno-omit-frame-pointer)
+ link_libraries (-fsanitize=address)
+ endif()
+
+ if (LLAMA_SANITIZE_UNDEFINED)
+ message(STATUS "Using -fsanitize=undefined")
+
+ add_compile_options(-fsanitize=undefined)
+ link_libraries (-fsanitize=undefined)
+ endif()
+ endif()
+endfunction()
diff --git a/llama.cpp/cmake/download-models.cmake b/llama.cpp/cmake/download-models.cmake
new file mode 100644
index 0000000..de25290
--- /dev/null
+++ b/llama.cpp/cmake/download-models.cmake
@@ -0,0 +1,21 @@
+get_filename_component(DEST_DIR "${DEST}" DIRECTORY)
+file(MAKE_DIRECTORY "${DEST_DIR}")
+
+if(NOT EXISTS "${DEST}")
+ message(STATUS "Downloading ${NAME} from ggml-org/models...")
+endif()
+
+file(DOWNLOAD
+ "https://huggingface.co/ggml-org/models/resolve/main/${NAME}?download=true"
+ "${DEST}"
+ TLS_VERIFY ON
+ EXPECTED_HASH ${HASH}
+ STATUS status
+)
+
+list(GET status 0 code)
+
+if(NOT code EQUAL 0)
+ list(GET status 1 msg)
+ message(FATAL_ERROR "Failed to download ${NAME}: ${msg}")
+endif()
diff --git a/llama.cpp/cmake/git-vars.cmake b/llama.cpp/cmake/git-vars.cmake
new file mode 100644
index 0000000..1a4c24e
--- /dev/null
+++ b/llama.cpp/cmake/git-vars.cmake
@@ -0,0 +1,22 @@
+find_package(Git)
+
+# the commit's SHA1
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" describe --match=NeVeRmAtCh --always --abbrev=8
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_SHA1
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the date of the commit
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" log -1 --format=%ad --date=local
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_DATE
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+# the subject of the commit
+execute_process(COMMAND
+ "${GIT_EXECUTABLE}" log -1 --format=%s
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
+ OUTPUT_VARIABLE GIT_COMMIT_SUBJECT
+ ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE)
diff --git a/llama.cpp/cmake/license.cmake b/llama.cpp/cmake/license.cmake
new file mode 100644
index 0000000..de06660
--- /dev/null
+++ b/llama.cpp/cmake/license.cmake
@@ -0,0 +1,40 @@
+define_property(GLOBAL PROPERTY LICENSE_TEXT
+ BRIEF_DOCS "Embedded licenses"
+ FULL_DOCS "Global string containing all aggregated licenses"
+)
+
+function(license_add_file NAME FILE)
+ if(NOT IS_ABSOLUTE "${FILE}")
+ set(FILE "${CMAKE_CURRENT_SOURCE_DIR}/${FILE}")
+ endif()
+ if(EXISTS "${FILE}")
+ set(TITLE "License for ${NAME}")
+ string(REGEX REPLACE "." "=" UNDERLINE "${TITLE}")
+ file(READ "${FILE}" TEXT)
+ get_property(TMP GLOBAL PROPERTY LICENSE_TEXT)
+ string(APPEND TMP "R\"=L=(${TITLE}\n${UNDERLINE}\n\n${TEXT})=L=\",\n")
+ set_property(GLOBAL PROPERTY LICENSE_TEXT "${TMP}")
+ else()
+ message(WARNING "License file '${FILE}' not found")
+ endif()
+endfunction()
+
+function(license_generate TARGET_NAME)
+ message(STATUS "Generating embedded license file for target: ${TARGET_NAME}")
+ get_property(TEXT GLOBAL PROPERTY LICENSE_TEXT)
+
+ set(CPP_CONTENT "// Generated by CMake\n\n")
+ string(APPEND CPP_CONTENT "const char* LICENSES[] = {\n")
+ string(APPEND CPP_CONTENT "${TEXT}")
+ string(APPEND CPP_CONTENT "nullptr\n")
+ string(APPEND CPP_CONTENT "};\n")
+
+ set(CPP_FILE "${CMAKE_BINARY_DIR}/license.cpp")
+ file(WRITE "${CPP_FILE}" "${CPP_CONTENT}")
+
+ if(TARGET ${TARGET_NAME})
+ target_sources(${TARGET_NAME} PRIVATE "${CPP_FILE}")
+ else()
+ message(FATAL_ERROR "Target '${TARGET_NAME}' does not exist")
+ endif()
+endfunction()
diff --git a/llama.cpp/cmake/llama-config.cmake.in b/llama.cpp/cmake/llama-config.cmake.in
new file mode 100644
index 0000000..90cbec5
--- /dev/null
+++ b/llama.cpp/cmake/llama-config.cmake.in
@@ -0,0 +1,30 @@
+set(LLAMA_VERSION @LLAMA_INSTALL_VERSION@)
+set(LLAMA_BUILD_COMMIT @LLAMA_BUILD_COMMIT@)
+set(LLAMA_BUILD_NUMBER @LLAMA_BUILD_NUMBER@)
+set(LLAMA_SHARED_LIB @BUILD_SHARED_LIBS@)
+
+@PACKAGE_INIT@
+
+set_and_check(LLAMA_INCLUDE_DIR "@PACKAGE_LLAMA_INCLUDE_INSTALL_DIR@")
+set_and_check(LLAMA_LIB_DIR "@PACKAGE_LLAMA_LIB_INSTALL_DIR@")
+set_and_check(LLAMA_BIN_DIR "@PACKAGE_LLAMA_BIN_INSTALL_DIR@")
+
+find_package(ggml REQUIRED HINTS ${LLAMA_LIB_DIR}/cmake)
+
+find_library(llama_LIBRARY llama
+ REQUIRED
+ HINTS ${LLAMA_LIB_DIR}
+ NO_CMAKE_FIND_ROOT_PATH
+)
+
+add_library(llama UNKNOWN IMPORTED)
+set_target_properties(llama
+ PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${LLAMA_INCLUDE_DIR}"
+ INTERFACE_LINK_LIBRARIES "ggml::ggml;ggml::ggml-base;"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${llama_LIBRARY}"
+ INTERFACE_COMPILE_FEATURES c_std_90
+ POSITION_INDEPENDENT_CODE ON)
+
+check_required_components(Llama)
diff --git a/llama.cpp/cmake/llama.pc.in b/llama.cpp/cmake/llama.pc.in
new file mode 100644
index 0000000..6fb58b5
--- /dev/null
+++ b/llama.cpp/cmake/llama.pc.in
@@ -0,0 +1,10 @@
+prefix=@CMAKE_INSTALL_PREFIX@
+exec_prefix=@CMAKE_INSTALL_PREFIX@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
+
+Name: llama
+Description: Port of Facebook's LLaMA model in C/C++
+Version: @LLAMA_INSTALL_VERSION@
+Libs: -L${libdir} -lggml -lggml-base -lllama
+Cflags: -I${includedir}
diff --git a/llama.cpp/cmake/riscv64-spacemit-linux-gnu-gcc.cmake b/llama.cpp/cmake/riscv64-spacemit-linux-gnu-gcc.cmake
new file mode 100644
index 0000000..08fdbf5
--- /dev/null
+++ b/llama.cpp/cmake/riscv64-spacemit-linux-gnu-gcc.cmake
@@ -0,0 +1,29 @@
+set(CMAKE_SYSTEM_NAME Linux)
+set(CMAKE_SYSTEM_PROCESSOR riscv64)
+set(CMAKE_SYSTEM_VERSION 1)
+
+if (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(riscv)")
+ message(STATUS "HOST SYSTEM ${CMAKE_HOST_SYSTEM_PROCESSOR}")
+else()
+ set(GNU_MACHINE riscv64-unknown-linux-gnu CACHE STRING "GNU compiler triple")
+ if (DEFINED ENV{RISCV_ROOT_PATH})
+ file(TO_CMAKE_PATH $ENV{RISCV_ROOT_PATH} RISCV_ROOT_PATH)
+ else()
+ message(FATAL_ERROR "RISCV_ROOT_PATH env must be defined")
+ endif()
+
+ set(RISCV_ROOT_PATH ${RISCV_ROOT_PATH} CACHE STRING "root path to riscv toolchain")
+ set(CMAKE_C_COMPILER ${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-gcc)
+ set(CMAKE_CXX_COMPILER ${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-g++)
+ set(CMAKE_STRIP ${RISCV_ROOT_PATH}/bin/riscv64-unknown-linux-gnu-strip)
+ set(CMAKE_FIND_ROOT_PATH "${RISCV_ROOT_PATH}/riscv64-unknown-linux-gnu")
+ set(CMAKE_SYSROOT "${RISCV_ROOT_PATH}/sysroot")
+endif()
+
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+set(CMAKE_C_FLAGS "-march=rv64gcv_zfh_zba_zicbop -mabi=lp64d ${CMAKE_C_FLAGS}")
+set(CMAKE_CXX_FLAGS "-march=rv64gcv_zfh_zba_zicbop -mabi=lp64d ${CXX_FLAGS}")
+set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -latomic")
diff --git a/llama.cpp/cmake/x64-windows-llvm.cmake b/llama.cpp/cmake/x64-windows-llvm.cmake
new file mode 100644
index 0000000..77e7914
--- /dev/null
+++ b/llama.cpp/cmake/x64-windows-llvm.cmake
@@ -0,0 +1,5 @@
+set( CMAKE_SYSTEM_NAME Windows )
+set( CMAKE_SYSTEM_PROCESSOR x86_64 )
+
+set( CMAKE_C_COMPILER clang )
+set( CMAKE_CXX_COMPILER clang++ )