brewery
notashelf /
bfbcef9c284c54772e80b5a7f33efe9f9bcf75fa

nixir

public

Import-resolving Nix IR plugin

Star0tarball
clone
ssh://git@git.notashelf.dev:33/notashelf/nixir.git
CMakeLists.txt109 lines2.7 KB
1
cmake_minimum_required(VERSION 3.19)
2
project(nix-ir-plugin)
3
4
set(CMAKE_CXX_STANDARD 23)
5
set(CMAKE_CXX_STANDARD_REQUIRED ON)
6
7
find_package(PkgConfig REQUIRED)
8
9
pkg_check_modules(NIX_STORE REQUIRED IMPORTED_TARGET nix-store)
10
pkg_check_modules(NIX_EXPR REQUIRED IMPORTED_TARGET nix-expr)
11
pkg_check_modules(NIX_CMD REQUIRED IMPORTED_TARGET nix-cmd)
12
pkg_check_modules(NIX_UTIL REQUIRED IMPORTED_TARGET nix-util)
13
pkg_check_modules(NIX_FETCHERS REQUIRED IMPORTED_TARGET nix-fetchers)
14
pkg_check_modules(NIX_MAIN REQUIRED IMPORTED_TARGET nix-main)
15
16
# nix-irc
17
add_executable(nix-irc
18
    src/irc/main.cpp
19
    src/irc/parser.cpp
20
    src/irc/lexer.cpp
21
    src/irc/resolver.cpp
22
    src/irc/ir_gen.cpp
23
    src/irc/serializer.cpp
24
    src/irc/types.cpp
25
)
26
27
target_include_directories(nix-irc PRIVATE
28
    ${NIX_STORE_INCLUDE_DIRS}
29
    ${NIX_EXPR_INCLUDE_DIRS}
30
    ${NIX_UTIL_INCLUDE_DIRS}
31
)
32
33
target_link_libraries(nix-irc PRIVATE
34
    ${NIX_STORE_LINK_LIBRARIES}
35
    ${NIX_EXPR_LINK_LIBRARIES}
36
    ${NIX_UTIL_LINK_LIBRARIES}
37
)
38
39
# Nix IR Plugin
40
add_library(nix-ir-plugin MODULE
41
    src/plugin.cpp
42
    src/irc/parser.cpp
43
    src/irc/lexer.cpp
44
    src/irc/resolver.cpp
45
    src/irc/ir_gen.cpp
46
    src/irc/serializer.cpp
47
    src/irc/evaluator.cpp
48
    src/irc/types.cpp
49
)
50
51
# Include directories from pkg-config
52
target_include_directories(nix-ir-plugin PRIVATE
53
    ${CMAKE_SOURCE_DIR}/src
54
    ${NIX_STORE_INCLUDE_DIRS}
55
    ${NIX_EXPR_INCLUDE_DIRS}
56
    ${NIX_CMD_INCLUDE_DIRS}
57
    ${NIX_UTIL_INCLUDE_DIRS}
58
    ${NIX_FETCHERS_INCLUDE_DIRS}
59
    ${NIX_MAIN_INCLUDE_DIRS}
60
)
61
62
# Link libraries
63
target_link_libraries(nix-ir-plugin PRIVATE
64
    ${NIX_STORE_LINK_LIBRARIES}
65
    ${NIX_EXPR_LINK_LIBRARIES}
66
    ${NIX_CMD_LINK_LIBRARIES}
67
    ${NIX_UTIL_LINK_LIBRARIES}
68
    ${NIX_FETCHERS_LINK_LIBRARIES}
69
    ${NIX_MAIN_LINK_LIBRARIES}
70
)
71
72
# Set output directories to build/
73
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
74
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
75
76
# Set output name
77
set_target_properties(nix-ir-plugin PROPERTIES
78
    PREFIX ""
79
    OUTPUT_NAME "nix-ir-plugin"
80
)
81
82
# Install to plugin directory
83
install(TARGETS nix-ir-plugin LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/nix/plugins")
84
85
# Regression tests
86
add_executable(regression_test
87
    tests/regression_test.cpp
88
    src/irc/serializer.cpp
89
    src/irc/parser.cpp
90
    src/irc/lexer.cpp
91
    src/irc/types.cpp
92
)
93
94
target_include_directories(regression_test PRIVATE
95
    ${CMAKE_SOURCE_DIR}/src
96
    ${NIX_STORE_INCLUDE_DIRS}
97
    ${NIX_EXPR_INCLUDE_DIRS}
98
    ${NIX_UTIL_INCLUDE_DIRS}
99
)
100
101
target_link_libraries(regression_test PRIVATE
102
    ${NIX_STORE_LINK_LIBRARIES}
103
    ${NIX_EXPR_LINK_LIBRARIES}
104
    ${NIX_UTIL_LINK_LIBRARIES}
105
)
106
107
# CTest integration
108
enable_testing()
109
add_test(NAME regression_test COMMAND regression_test)