cmake_minimum_required(VERSION 3.19)
project(nix-ir-plugin)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(PkgConfig REQUIRED)

pkg_check_modules(NIX_STORE REQUIRED IMPORTED_TARGET nix-store)
pkg_check_modules(NIX_EXPR REQUIRED IMPORTED_TARGET nix-expr)
pkg_check_modules(NIX_CMD REQUIRED IMPORTED_TARGET nix-cmd)
pkg_check_modules(NIX_UTIL REQUIRED IMPORTED_TARGET nix-util)
pkg_check_modules(NIX_FETCHERS REQUIRED IMPORTED_TARGET nix-fetchers)
pkg_check_modules(NIX_MAIN REQUIRED IMPORTED_TARGET nix-main)

# nix-irc
add_executable(nix-irc
    src/irc/main.cpp
    src/irc/parser.cpp
    src/irc/resolver.cpp
    src/irc/ir_gen.cpp
    src/irc/serializer.cpp
)

target_include_directories(nix-irc PRIVATE
    ${NIX_STORE_INCLUDE_DIRS}
    ${NIX_EXPR_INCLUDE_DIRS}
    ${NIX_UTIL_INCLUDE_DIRS}
)

target_link_libraries(nix-irc PRIVATE
    ${NIX_STORE_LINK_LIBRARIES}
    ${NIX_EXPR_LINK_LIBRARIES}
    ${NIX_UTIL_LINK_LIBRARIES}
)

# Nix IR Plugin
add_library(nix-ir-plugin MODULE
    src/plugin.cpp
    src/irc/parser.cpp
    src/irc/resolver.cpp
    src/irc/ir_gen.cpp
    src/irc/serializer.cpp
    src/irc/evaluator.cpp
)

# Include directories from pkg-config
target_include_directories(nix-ir-plugin PRIVATE
    ${CMAKE_SOURCE_DIR}/src
    ${NIX_STORE_INCLUDE_DIRS}
    ${NIX_EXPR_INCLUDE_DIRS}
    ${NIX_CMD_INCLUDE_DIRS}
    ${NIX_UTIL_INCLUDE_DIRS}
    ${NIX_FETCHERS_INCLUDE_DIRS}
    ${NIX_MAIN_INCLUDE_DIRS}
)

# Link libraries
target_link_libraries(nix-ir-plugin PRIVATE
    ${NIX_STORE_LINK_LIBRARIES}
    ${NIX_EXPR_LINK_LIBRARIES}
    ${NIX_CMD_LINK_LIBRARIES}
    ${NIX_UTIL_LINK_LIBRARIES}
    ${NIX_FETCHERS_LINK_LIBRARIES}
    ${NIX_MAIN_LINK_LIBRARIES}
)

# Set output name
set_target_properties(nix-ir-plugin PROPERTIES
    PREFIX ""
    OUTPUT_NAME "nix-ir-plugin"
)

# Install to plugin directory
install(TARGETS nix-ir-plugin LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/nix/plugins")
