cmake_minimum_required(VERSION 3.25) project(PaulDB VERSION 0.1.0 LANGUAGES C CXX) # --------------------------------------------------------------------------- # Sprachstandards # --------------------------------------------------------------------------- set(CMAKE_C_STANDARD 17) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # -std=c++20 statt -std=gnu++20 # --------------------------------------------------------------------------- # Conan-generierte Pakete einbinden (CMakeDeps-Finder liegen im build-Ordner) # --------------------------------------------------------------------------- # find_package(fmt REQUIRED) # einkommentieren wenn dep da ist # find_package(spdlog REQUIRED) # --------------------------------------------------------------------------- # Schicht 1 - Storage Engine (C) # Hinweis: neue .c-Dateien hier manuell eintragen (kein GLOB) # --------------------------------------------------------------------------- set(STORAGE_SOURCES src/storage/page.c src/storage/heap.c src/storage/btree.c src/storage/buffer_pool.c src/storage/free_space_map.c src/storage/arena.c src/storage/wal.c ) # --------------------------------------------------------------------------- # Schicht 2 - Engine Logic (C++) # --------------------------------------------------------------------------- set(ENGINE_SOURCES src/engine/query_router.cpp src/engine/delta_merge.cpp src/engine/mvcc.cpp src/engine/executor.cpp ) # --------------------------------------------------------------------------- # Schicht 3 - SQL Frontend (C++) # --------------------------------------------------------------------------- set(SQL_SOURCES src/sql/tokenizer.cpp src/sql/parser.cpp src/sql/ast.cpp src/sql/planner.cpp ) # --------------------------------------------------------------------------- # Hauptprogramm # --------------------------------------------------------------------------- add_executable(pauldb src/main.cpp ${STORAGE_SOURCES} ${ENGINE_SOURCES} ${SQL_SOURCES} ) target_include_directories(pauldb PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include ) # Externe Libs linken - Beispiel: # target_link_libraries(pauldb PRIVATE fmt::fmt spdlog::spdlog) # --------------------------------------------------------------------------- # Tests (CTest) # --------------------------------------------------------------------------- enable_testing() add_executable(test_page test/storage/test_page.c src/storage/page.c ) target_include_directories(test_page PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) add_test(NAME test_page COMMAND test_page) # --------------------------------------------------------------------------- # Installationsregeln (fur package() in conanfile.py) # --------------------------------------------------------------------------- install(TARGETS pauldb DESTINATION bin)