cmake_minimum_required(VERSION 3.24)
project(AgentSmith)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS FALSE)
include(FetchContent)
FetchContent_Declare(
libmw
GIT_REPOSITORY https://github.com/MetroWind/libmw.git
)
FetchContent_Declare(
spdlog
GIT_REPOSITORY https://github.com/gabime/spdlog.git
GIT_TAG v1.12.0
)
FetchContent_Declare(
json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
)
FetchContent_Declare(
cxxopts
GIT_REPOSITORY https://github.com/jarro2783/cxxopts.git
GIT_TAG v3.1.1
)
set(SPDLOG_USE_STD_FORMAT ON)
set(LIBMW_BUILD_URL ON)
set(LIBMW_BUILD_SQLITE ON)
set(LIBMW_BUILD_HTTP_SERVER OFF)
set(LIBMW_BUILD_CRYPTO OFF)
FetchContent_MakeAvailable(libmw spdlog json cxxopts)
set(LIB_SOURCE_FILES
src/agent.cpp
src/llm_client.cpp
src/memory.cpp
src/tool.cpp
src/message.cpp
)
set(LIBS
mw::mw
mw::url
mw::sqlite
spdlog::spdlog
nlohmann_json::nlohmann_json
)
set(INCLUDES
${libmw_SOURCE_DIR}/includes
${json_SOURCE_DIR}/single_include
)
# 1. Build the Agent Smith Library
add_library(agent_smith ${LIB_SOURCE_FILES})
set_property(TARGET agent_smith PROPERTY CXX_STANDARD 23)
target_compile_options(agent_smith PRIVATE -Wall -Wextra)
target_include_directories(agent_smith PUBLIC ${INCLUDES} src)
target_link_libraries(agent_smith PUBLIC ${LIBS})
# 2. Build the Example CLI Executable
add_executable(agent_smith_cli src/main.cpp)
set_property(TARGET agent_smith_cli PROPERTY CXX_STANDARD 23)
target_compile_options(agent_smith_cli PRIVATE -Wall -Wextra)
target_include_directories(agent_smith_cli PRIVATE ${cxxopts_SOURCE_DIR}/include)
target_link_libraries(agent_smith_cli PRIVATE agent_smith cxxopts::cxxopts)
option(AGENT_SMITH_BUILD_TESTS "Build unit tests" ON)
if(AGENT_SMITH_BUILD_TESTS)
FetchContent_Declare(
googletest
URL https://github.com/google/googletest/archive/refs/tags/v1.14.0.tar.gz
)
FetchContent_MakeAvailable(googletest)
set(TEST_FILES
src/task_test.cpp
src/memory_test.cpp
src/tool_test.cpp
src/agent_test.cpp
src/llm_client_test.cpp
src/message_test.cpp
)
add_executable(agent_smith_test ${TEST_FILES})
set_property(TARGET agent_smith_test PROPERTY CXX_STANDARD 23)
target_compile_options(agent_smith_test PRIVATE -Wall -Wextra)
target_include_directories(agent_smith_test PRIVATE
${googletest_SOURCE_DIR}/googletest/include
${googletest_SOURCE_DIR}/googlemock/include
)
target_link_libraries(agent_smith_test PRIVATE
agent_smith
GTest::gtest_main
GTest::gmock_main
)
enable_testing()
include(GoogleTest)
gtest_discover_tests(agent_smith_test)
endif()