-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
142 lines (113 loc) · 5.07 KB
/
CMakeLists.txt
File metadata and controls
142 lines (113 loc) · 5.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
cmake_minimum_required(VERSION 3.26)
project(instinct VERSION 0.1.0)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# force cache value to update when building with submodules
# https://cmake.org/cmake/help/latest/policy/CMP0077.html
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
# show progress
set(FETCHCONTENT_QUIET FALSE)
# specify default install location
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Specify install location." FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# defines CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and many other useful macros.
# see https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
include(GNUInstallDirs)
#add_compile_options(-fsanitize=address)
#add_link_options(-fsanitize=address)
# disable C and C++ compiler extensions.
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
# include additional cmake modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# encourage user to specify a build type (e.g. Release, Debug, etc.), otherwise set it to Release.
if(NOT CMAKE_CONFIGURATION_TYPES)
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "Setting build type to 'Release' as none was specified.")
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY VALUE "Release")
endif()
endif()
# add CTest
include(CTest)
#add functions
include(cmake/functions.cmake)
# add dependencies
option(WITH_DUCKDB "Enable duckdb related classes" ON)
option(WITH_EXPRTK "Enable exprtk for LLM math" ON)
option(WITH_PDFIUM "Enable PDF parsing with PDFium" ON)
option(WITH_DUCKX "Enable DOCX parsing with duckx" ON)
include(cmake/conan_dependencies.cmake)
# compilation options
option(BUILD_TESTING "Create tests using CMake" ON)
option(BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON)
# print options before entering submodules
message(STATUS "--------------------------------instinct-cpp--------------------------------------------------------")
message(STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
message(STATUS "BUILD_TESTING: " ${BUILD_TESTING})
message(STATUS "BUILD_SHARED_LIBS: " ${BUILD_SHARED_LIBS})
message(STATUS "WITH_DUCKDB: " ${WITH_DUCKDB})
message(STATUS "WITH_EXPRTK: " ${WITH_EXPRTK})
message(STATUS "WITH_PDFIUM: " ${WITH_PDFIUM})
message(STATUS "WITH_DUCKX: " ${WITH_DUCKX})
message(STATUS "----------------------------------------------------------------------------------------------------")
# project modules
add_subdirectory(modules/instinct-proto)
add_subdirectory(modules/instinct-transformer)
add_subdirectory(modules/instinct-core)
add_subdirectory(modules/instinct-llm)
add_subdirectory(modules/instinct-retrieval)
add_subdirectory(modules/instinct-server)
add_subdirectory(modules/instinct-data)
add_subdirectory(modules/instinct-assistant)
# apps
add_subdirectory(modules/instinct-apps/doc-agent)
add_subdirectory(modules/instinct-apps/mini-assistant)
# write config version file
include(CMakePackageConfigHelpers)
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion)
# declare targets to be installed
list(APPEND EXPORTED_TARGETS proto core llm transformer data retrieval)
if (TARGET instinct::assistant AND TARGET mini-assistant)
list(APPEND EXPORTED_TARGETS mini-assistant)
endif ()
if (TARGET doc-agent)
list(APPEND EXPORTED_TARGETS doc-agent)
endif ()
install(TARGETS ${EXPORTED_TARGETS}
EXPORT ${PROJECT_NAME}_Targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# install header files
install(DIRECTORY ${PROJECT_BINARY_DIR}/modules/instinct-proto/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h"
)
install(DIRECTORY
${PROJECT_SOURCE_DIR}/modules/instinct-core/include/instinct
${PROJECT_SOURCE_DIR}/modules/instinct-llm/include/instinct
${PROJECT_SOURCE_DIR}/modules/instinct-transformer/include/instinct
${PROJECT_SOURCE_DIR}/modules/instinct-data/include/instinct
${PROJECT_SOURCE_DIR}/modules/instinct-retrieval/include/instinct
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
# write target file to lib/instinct/cmake folder
install(EXPORT ${PROJECT_NAME}_Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)
configure_package_config_file(
"${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
INSTALL_DESTINATION
${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)
# copy config files to lib/instinct/cmake folder
install(FILES
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
"${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/cmake)