cmake_minimum_required(VERSION 3.14)
project(pylolm_native C CXX)

# Usage: cmake -S <this dir> -B <build dir> -DLLAMA_CPP_DIR=/path/to/llama.cpp [...]
if (NOT LLAMA_CPP_DIR)
    message(FATAL_ERROR "Set -DLLAMA_CPP_DIR=/path/to/llama.cpp")
endif()

# Everything lands in <build>/bin, and every library finds its siblings via $ORIGIN.
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(BUILD_SHARED_LIBS ON CACHE BOOL "" FORCE)

# Only the libraries are needed: no tools, tests, examples or server.
foreach(opt
        LLAMA_BUILD_COMMON LLAMA_BUILD_TESTS LLAMA_BUILD_EXAMPLES
        LLAMA_BUILD_SERVER LLAMA_BUILD_TOOLS LLAMA_CURL LLAMA_OPENSSL
        GGML_BUILD_TESTS GGML_BUILD_EXAMPLES)
    set(${opt} OFF CACHE BOOL "" FORCE)
endforeach()

add_subdirectory(${LLAMA_CPP_DIR} ${CMAKE_BINARY_DIR}/llama.cpp)

add_library(pylolm_shim SHARED pylolm_shim.c)
target_link_libraries(pylolm_shim PRIVATE llama)
