cmake_minimum_required(VERSION 3.15)
project(llama-mcp-bridge VERSION 1.0.0 LANGUAGES CXX C)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

option(LLAMA_MCP_BUILD_SHARED "Build shared library" ON)
option(LLAMA_MCP_BUILD_STATIC "Build static library" ON)

set(LLAMA_CPP_DIR "${CMAKE_SOURCE_DIR}/../llama.cpp" CACHE PATH "Path to llama.cpp")

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

add_library(llama-mcp-bridge
    src/llama_mcp_bridge.cpp
    src/tensor_hooks.cpp
    src/attention_capture.cpp
    src/feature_steering.cpp
)

target_include_directories(llama-mcp-bridge PRIVATE
    ${CMAKE_SOURCE_DIR}/include
    ${LLAMA_CPP_DIR}
    ${LLAMA_CPP_DIR}/include
    ${LLAMA_CPP_DIR}/src
    ${LLAMA_CPP_DIR}/ggml/include
    ${LLAMA_CPP_DIR}/ggml/src
)

target_link_libraries(llama-mcp-bridge PRIVATE llama ggml)

if(LLAMA_MCP_BUILD_SHARED)
    add_library(llama-mcp-bridge-shared SHARED
        src/llama_mcp_bridge.cpp
        src/tensor_hooks.cpp
        src/attention_capture.cpp
        src/feature_steering.cpp
    )
    target_include_directories(llama-mcp-bridge-shared PRIVATE
        ${CMAKE_SOURCE_DIR}/include
        ${LLAMA_CPP_DIR}
        ${LLAMA_CPP_DIR}/include
        ${LLAMA_CPP_DIR}/src
        ${LLAMA_CPP_DIR}/ggml/include
        ${LLAMA_CPP_DIR}/ggml/src
    )
    target_link_libraries(llama-mcp-bridge-shared PRIVATE llama ggml)
    set_target_properties(llama-mcp-bridge-shared PROPERTIES
        OUTPUT_NAME llama_mcp_bridge
        PREFIX ""
    )
    
    if(WIN32)
        set_target_properties(llama-mcp-bridge-shared PROPERTIES
            SUFFIX ".dll"
        )
    elseif(APPLE)
        set_target_properties(llama-mcp-bridge-shared PROPERTIES
            SUFFIX ".dylib"
        )
    else()
        set_target_properties(llama-mcp-bridge-shared PROPERTIES
            SUFFIX ".so"
        )
    endif()
endif()

if(BUILD_TESTING)
    add_subdirectory(tests)
endif()
