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") # Regression tests add_executable(regression_test tests/regression_test.cpp src/irc/serializer.cpp src/irc/parser.cpp ) target_include_directories(regression_test PRIVATE ${CMAKE_SOURCE_DIR}/src ${NIX_STORE_INCLUDE_DIRS} ${NIX_EXPR_INCLUDE_DIRS} ${NIX_UTIL_INCLUDE_DIRS} ) target_link_libraries(regression_test PRIVATE ${NIX_STORE_LINK_LIBRARIES} ${NIX_EXPR_LINK_LIBRARIES} ${NIX_UTIL_LINK_LIBRARIES} )