miracle-wm/CMakeLists.txt
Matthew Kosarek 690da3a8f4
feature: miracle can now integrate with systemd in a meaningful way (#228)
Miracle now supports running through systemd, including logging to the
journal and invoking processes as transient units through systemd-run.

This is controlled as a build-time feature in CMake.
2024-09-07 13:07:58 +00:00

159 lines
5.1 KiB
CMake

cmake_minimum_required(VERSION 3.7)
cmake_policy(SET CMP0015 NEW)
cmake_policy(SET CMP0022 NEW)
project(miracle-wm)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(MIR_LIBRARIES_PKGCONFIG_DIRECTORY "" CACHE STRING "Search for Mir libraries pc files in this directory")
option(SNAP_BUILD "Building as a snap?" OFF)
option(SYSTEMD_INTEGRATION "Specifies that the systemd integration script will run at startup" OFF)
set(ENV{PKG_CONFIG_PATH} "${MIR_LIBRARIES_PKGCONFIG_DIRECTORY}:/usr/local/lib/pkgconfig/")
find_package(PkgConfig)
pkg_check_modules(MIRAL miral REQUIRED)
pkg_check_modules(MIROIL miroil REQUIRED)
pkg_check_modules(MIRRENDERER mirrenderer REQUIRED)
pkg_check_modules(MIRPLATFORM mirplatform REQUIRED)
pkg_check_modules(MIRCOMMON mircommon REQUIRED)
pkg_check_modules(MIRCOMMON_INTERNAL mircommon-internal REQUIRED)
pkg_check_modules(MIRSERVER mirserver REQUIRED)
pkg_check_modules(MIRSERVER_INTERNAL mirserver-internal REQUIRED)
pkg_check_modules(MIRWAYLAND mirwayland REQUIRED)
pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
pkg_check_modules(YAML REQUIRED IMPORTED_TARGET yaml-cpp)
pkg_check_modules(LIBEVDEV REQUIRED IMPORTED_TARGET libevdev)
find_package(nlohmann_json 3.2.0 REQUIRED)
pkg_check_modules(LIBNOTIFY REQUIRED IMPORTED_TARGET libnotify)
pkg_check_modules(EGL REQUIRED IMPORTED_TARGET egl)
pkg_check_modules(GLESv2 REQUIRED IMPORTED_TARGET glesv2)
include(GNUInstallDirs)
add_library(miracle-wm-implementation
STATIC
src/policy.cpp
src/tiling_window_tree.cpp
src/container.cpp
src/window_helpers.h
src/window_helpers.cpp
src/config.cpp
src/config.h
src/output.cpp
src/workspace_manager.cpp
src/ipc.cpp
src/auto_restarting_launcher.cpp
src/workspace_observer.cpp
src/workspace.cpp
src/leaf_container.cpp
src/parent_container.cpp
src/window_manager_tools_window_controller.cpp
src/renderer.cpp
src/tessellation_helpers.cpp
src/miracle_gl_config.cpp
src/i3_command.cpp
src/i3_command_executor.cpp
src/surface_tracker.cpp
src/window_tools_accessor.cpp
src/animator.cpp
src/animation_definition.cpp
src/program_factory.cpp
src/mode_observer.cpp
src/debug_helper.h
src/floating_window_container.cpp
src/shell_component_container.cpp
src/container_group_container.cpp
src/container_group_container.h
src/floating_tree_container.cpp
src/floating_tree_container.h
)
add_executable(miracle-wm
src/main.cpp
)
target_include_directories(miracle-wm-implementation PUBLIC SYSTEM
${MIRAL_INCLUDE_DIRS}
${MIROIL_INCLUDE_DIRS}
${MIRCOMMON_INCLUDE_DIRS}
${MIRRENDERER_INCLUDE_DIRS}
${MIRPLATFORM_INCLUDE_DIRS}
${MIRCOMMON_INTERNAL_INCLUDE_DIRS}
${MIRSERVER_INTERNAL_INCLUDE_DIRS}
${MIRSERVER_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}/include)
target_link_libraries(miracle-wm-implementation
${MIRAL_LDFLAGS}
${MIROIL_LDFLAGS}
${MIRRENDERER_LDFLAGS}
${MIRPLATFORM_LDFLAGS}
${MIRSERVER_LDFLAGS}
${MIRSERVER_INTERNAL_LDFLAGS}
${MIRWAYLAND_LDFLAGS}
PkgConfig::YAML
PkgConfig::GLIB
PkgConfig::LIBEVDEV
PkgConfig::LIBNOTIFY
nlohmann_json::nlohmann_json
PkgConfig::EGL
PkgConfig::GLESv2
-lpcre2-8 -lpcre2-16 -lpcre2-32)
if(SYSTEMD_INTEGRATION)
# Install systemd files
install(FILES session/usr/lib/systemd/user/miracle-wm-session.target
session/usr/lib/systemd/user/miracle-wm-session-shutdown.target
DESTINATION /usr/lib/systemd/user/)
# Install the setup script
install(PROGRAMS session/usr/bin/libexec/miracle-wm-session-setup
DESTINATION ${CMAKE_INSTALL_LIBEXECDIR})
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/miracle-wm-session.systemd.in miracle-wm-session @ONLY)
else()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/miracle-wm-session.none.in miracle-wm-session @ONLY)
endif()
target_include_directories(miracle-wm PUBLIC SYSTEM ${MIRAL_INCLUDE_DIRS})
target_link_libraries(miracle-wm PUBLIC ${MIRAL_LDFLAGS} PRIVATE miracle-wm-implementation)
install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/miracle-wm
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
configure_file(session/usr/local/share/wayland-sessions/miracle-wm.desktop.in miracle-wm.desktop @ONLY)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/miracle-wm.desktop
DESTINATION ${CMAKE_INSTALL_DATADIR}/wayland-sessions)
add_custom_target(miracle-wm-sensible-terminal ALL
cp ${CMAKE_CURRENT_SOURCE_DIR}/src/miracle-wm-sensible-terminal ${CMAKE_BINARY_DIR}/bin
)
install(PROGRAMS
src/miracle-wm-sensible-terminal
${CMAKE_CURRENT_BINARY_DIR}/miracle-wm-session
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(SNAP_BUILD)
add_custom_target(miracle-wm-unsnap ALL
cp ${CMAKE_CURRENT_SOURCE_DIR}/src/miracle-wm-unsnap ${CMAKE_BINARY_DIR}/bin
)
install(PROGRAMS
src/miracle-wm-unsnap
DESTINATION ${CMAKE_INSTALL_BINDIR}
)
endif()
add_subdirectory(tests/)
add_subdirectory(miraclemsg/)