cmake_minimum_required(VERSION 3.20) project(effector VERSION 0.1.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE) endif() set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") find_package(PkgConfig REQUIRED) pkg_check_modules(GTKMM REQUIRED IMPORTED_TARGET gtkmm-4.0) pkg_check_modules(GDKPIXBUF REQUIRED IMPORTED_TARGET gdk-pixbuf-2.0) # Pango and Cairo draw the text effect's glyphs. Neither needs a display, so # the core stays headless. pkg_check_modules(PANGOCAIRO REQUIRED IMPORTED_TARGET pangocairo) find_package(Threads REQUIRED) # --- core: effects and image handling, no GUI --------------------------------- add_library(effector_core STATIC src/core/chain.cpp src/core/effect.cpp src/core/image.cpp src/core/params.cpp src/core/project.cpp src/core/registry.cpp src/core/rng.cpp src/effects/blur.cpp src/effects/grain.cpp src/effects/monochrome.cpp src/effects/overlay.cpp src/effects/scanlines.cpp src/effects/text.cpp src/effects/tiles.cpp ) target_include_directories(effector_core PUBLIC src) # The core is GUI-free: it only needs gdk-pixbuf for decoding and encoding, # so headless rendering works without a display. target_link_libraries(effector_core PUBLIC PkgConfig::GDKPIXBUF PkgConfig::PANGOCAIRO Threads::Threads) target_compile_options(effector_core PRIVATE -Wall -Wextra -Wpedantic) # --- application -------------------------------------------------------------- add_executable(effector src/main.cpp src/cli/options.cpp src/gui/app.cpp src/gui/window.cpp ) target_link_libraries(effector PRIVATE effector_core PkgConfig::GTKMM) target_compile_options(effector PRIVATE -Wall -Wextra -Wpedantic) install(TARGETS effector RUNTIME DESTINATION bin) # --- tests -------------------------------------------------------------------- include(CTest) if(BUILD_TESTING) add_subdirectory(tests) endif()