11cmake_minimum_required (VERSION 3.26)
22project (instinct VERSION 0.1.0)
33
4- option (BUILD_SHARED_LIBS "Build using shared libraries" OFF )
5-
6-
74set (CMAKE_CXX_STANDARD 20)
85set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
96
10-
117# force cache value to update when building with submodules
128# https://cmake.org/cmake/help/latest/policy/CMP0077.html
139set (CMAKE_POLICY_DEFAULT_CMP0077 NEW)
1410
1511# show progress
16- Set (FETCHCONTENT_QUIET FALSE )
12+ set (FETCHCONTENT_QUIET FALSE )
1713
1814# specify default install location
1915IF (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
@@ -24,25 +20,10 @@ ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
2420# see https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
2521include (GNUInstallDirs)
2622
27- find_package (Threads REQUIRED)
28-
29- # add CTest
30- include (CTest)
3123
3224#add_compile_options(-fsanitize=address)
3325#add_link_options(-fsanitize=address)
3426
35-
36- # control where libraries and executables are placed during the build.
37- # with the following settings executables are placed in <the top level of the
38- # build tree>/bin and libraries/archives in <top level of the build tree>/lib.
39- #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
40- #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
41- #set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
42-
43- # build position independent code.
44- set (CMAKE_POSITION_INDEPENDENT_CODE ON )
45-
4627# disable C and C++ compiler extensions.
4728set (CMAKE_C_EXTENSIONS OFF )
4829set (CMAKE_CXX_EXTENSIONS OFF )
@@ -51,17 +32,7 @@ set(CMAKE_CXX_EXTENSIONS OFF)
5132list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} /cmake)
5233
5334
54- option (BUILD_TESTING "Create tests using CMake" ON )
55- option (BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON )
56-
5735
58- # enable RPATH support for installed binaries and libraries
59- #include(AddInstallRPATHSupport)
60- #add_install_rpath_support(
61- # BIN_DIRS "${CMAKE_INSTALL_FULL_BINDIR}"
62- # LIB_DIRS "${CMAKE_INSTALL_FULL_LIBDIR}"
63- # INSTALL_NAME_DIR "${CMAKE_INSTALL_FULL_LIBDIR}"
64- # USE_LINK_PATH)
6536
6637# encourage user to specify a build type (e.g. Release, Debug, etc.), otherwise set it to Release.
6738if (NOT CMAKE_CONFIGURATION_TYPES )
@@ -71,14 +42,33 @@ if(NOT CMAKE_CONFIGURATION_TYPES)
7142 endif ()
7243endif ()
7344
45+ # add CTest
46+ include (CTest)
7447
48+ #add functions
49+ include (cmake/functions.cmake)
7550
76- ## gtest
77- if (BUILD_TESTING)
78- find_package (GTest REQUIRED)
79- endif ()
51+ # add dependencies
52+ option (WITH_DUCKDB "Enable duckdb related classes" ON )
53+ option (WITH_EXPRTK "Enable exprtk for LLM math" ON )
54+ option (WITH_PDFIUM "Enable PDF parsing with PDFium" ON )
55+ option (WITH_DUCKX "Enable DOCX parsing with duckx" ON )
56+ include (cmake/conan_dependencies.cmake)
57+
58+ # compilation options
59+ option (BUILD_TESTING "Create tests using CMake" ON )
60+ option (BUILD_SHARED_LIBS "Build libraries as shared as opposed to static" ON )
8061
81- include (cmake/CMakeRC.cmake)
62+ # print options before entering submodules
63+ message (STATUS "--------------------------------instinct-cpp--------------------------------------------------------" )
64+ message (STATUS "CMAKE_BUILD_TYPE: " ${CMAKE_BUILD_TYPE} )
65+ message (STATUS "BUILD_TESTING: " ${BUILD_TESTING} )
66+ message (STATUS "BUILD_SHARED_LIBS: " ${BUILD_SHARED_LIBS} )
67+ message (STATUS "WITH_DUCKDB: " ${WITH_DUCKDB} )
68+ message (STATUS "WITH_EXPRTK: " ${WITH_EXPRTK} )
69+ message (STATUS "WITH_PDFIUM: " ${WITH_PDFIUM} )
70+ message (STATUS "WITH_DUCKX: " ${WITH_DUCKX} )
71+ message (STATUS "----------------------------------------------------------------------------------------------------" )
8272
8373# project modules
8474add_subdirectory (modules/instinct-proto)
@@ -90,7 +80,63 @@ add_subdirectory(modules/instinct-server)
9080add_subdirectory (modules/instinct-data)
9181add_subdirectory (modules/instinct-assistant)
9282
93- # examples
94- add_subdirectory (modules/instinct-examples/doc -agent)
95- add_subdirectory (modules/instinct-examples/quick-start )
96- add_subdirectory (modules/instinct-examples/mini-assistant)
83+ # apps
84+ add_subdirectory (modules/instinct-apps/doc -agent)
85+ add_subdirectory (modules/instinct-apps/mini-assistant)
86+
87+
88+ # write config version file
89+ include (CMakePackageConfigHelpers)
90+ write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake
91+ VERSION ${PROJECT_VERSION}
92+ COMPATIBILITY SameMajorVersion)
93+
94+ # declare targets to be installed
95+
96+ list (APPEND EXPORTED_TARGETS proto core llm transformer data retrieval)
97+ if (TARGET instinct::assistant AND TARGET mini-assistant)
98+ list (APPEND EXPORTED_TARGETS mini-assistant)
99+ endif ()
100+ if (TARGET doc -agent)
101+ list (APPEND EXPORTED_TARGETS doc -agent)
102+ endif ()
103+
104+ install (TARGETS ${EXPORTED_TARGETS}
105+ EXPORT ${PROJECT_NAME} _Targets
106+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
107+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
108+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
109+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
110+ )
111+
112+ # install header files
113+ install (DIRECTORY ${PROJECT_BINARY_DIR} /modules/instinct-proto/
114+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
115+ FILES_MATCHING PATTERN "*.h"
116+ )
117+ install (DIRECTORY
118+ ${PROJECT_SOURCE_DIR} /modules/instinct-core/include /instinct
119+ ${PROJECT_SOURCE_DIR} /modules/instinct-llm/include /instinct
120+ ${PROJECT_SOURCE_DIR} /modules/instinct-transformer/include /instinct
121+ ${PROJECT_SOURCE_DIR} /modules/instinct-data/include /instinct
122+ ${PROJECT_SOURCE_DIR} /modules/instinct-retrieval/include /instinct
123+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
124+ )
125+
126+ # write target file to lib/instinct/cmake folder
127+ install (EXPORT ${PROJECT_NAME} _Targets
128+ FILE ${PROJECT_NAME} Targets.cmake
129+ NAMESPACE ${PROJECT_NAME} ::
130+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} /${PROJECT_NAME} /cmake)
131+
132+ configure_package_config_file(
133+ "${PROJECT_SOURCE_DIR} /cmake/${PROJECT_NAME} Config.cmake.in"
134+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
135+ INSTALL_DESTINATION
136+ ${CMAKE_INSTALL_DATAROOTDIR} /${PROJECT_NAME} /cmake)
137+
138+ # copy config files to lib/instinct/cmake folder
139+ install (FILES
140+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} Config.cmake"
141+ "${PROJECT_BINARY_DIR} /${PROJECT_NAME} ConfigVersion.cmake"
142+ DESTINATION ${CMAKE_INSTALL_DATAROOTDIR} /${PROJECT_NAME} /cmake)
0 commit comments