cmake_minimum_required(VERSION 3.30) project(camellya) set(CMAKE_CXX_STANDARD 20) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) option(CAMELLYA_BUILD_TESTS "Build tests" ON) option(CAMELLYA_BUILD_STATIC "Build static library" ON) option(CAMELLYA_BUILD_CLI "Build command line interface" ON) # Library sources set(LIB_SOURCES src/lexer.cpp src/parser.cpp src/value.cpp src/interpreter.cpp src/state.cpp ) # Library headers set(LIB_HEADERS src/camellya.h src/lexer.h src/parser.h src/ast.h src/value.h src/interpreter.h src/state.h ) if(CAMELLYA_BUILD_STATIC) add_library(libcamellya STATIC ${LIB_SOURCES} ${LIB_HEADERS}) elseif() add_library(libcamellya SHARED ${LIB_SOURCES} ${LIB_HEADERS}) endif() target_include_directories(libcamellya PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) if(CAMELLYA_BUILD_CLI) add_executable(camellya cli/main.cpp ) target_link_libraries(camellya PRIVATE libcamellya ) endif() if(CAMELLYA_BUILD_TESTS) include(FetchContent) FetchContent_Declare( Catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.12.0 ) FetchContent_MakeAvailable(Catch2) enable_testing() add_executable(camellya_tests tests/test_basic.cpp ) target_include_directories(camellya_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries(camellya_tests PRIVATE libcamellya Catch2::Catch2WithMain ) add_test(NAME camellya_tests COMMAND camellya_tests) endif()