cmake_minimum_required(VERSION 3.24) project(plot VERSION 0.1.0 LANGUAGES CXX) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(plot_options) add_library(plot_core src/core/status.cpp src/math/transform.cpp src/data/minmax_pyramid.cpp src/data/series.cpp src/data/array_series.cpp src/data/stream_series.cpp src/gl/loader.cpp src/gl/handle.cpp src/render/shaders.cpp src/render/bitmap_font.cpp src/render/primitives.cpp src/render/buffer.cpp src/render/vertex_array.cpp src/render/program.cpp src/render/renderer.cpp src/plot/ticks.cpp src/plot/axis.cpp src/plot/grid.cpp src/plot/measure.cpp src/plot/plot.cpp src/input/controller.cpp ) add_library(plot::core ALIAS plot_core) target_include_directories(plot_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include") target_compile_features(plot_core PUBLIC cxx_std_20) target_link_libraries(plot_core PRIVATE ${CMAKE_DL_LIBS}) plot_apply_warnings(plot_core) # Adapters own the surface and translate their host's events; examples link the # adapter they demo. Both are opt-in, so the core library and its tests still build # on a bare toolchain. # # They are added before the test suite on purpose: a test that drives an adapter # needs that adapter's targets to exist, and with both switches on the suite can # then exercise them (see tests/CMakeLists.txt). if(PLOT_BUILD_GLFW) add_subdirectory(adapters/glfw) endif() if(PLOT_BUILD_IMGUI) add_subdirectory(adapters/imgui) endif() if(PLOT_BUILD_EXAMPLES) add_subdirectory(examples) endif() if(PLOT_BUILD_TESTS) # Test-only: counts the pyramid's covering-decomposition entries and its bucket # merges so a test can pin the query's O(log n) cost and the append path's # amortised O(1) cost, neither of which any answer reveals. Off in every # non-test build (see include/plot/data/detail/{cover,merge}_count.hpp). target_compile_definitions(plot_core PRIVATE PLOT_PYRAMID_COUNT_COVERS PLOT_PYRAMID_COUNT_MERGES) enable_testing() add_subdirectory(tests) endif()