Files
hypr-chrome/CMakeLists.txt
darmanandgitea-actions 5c2ed492d6 hypr-chrome v0.1.1 (#7)
---------

Co-authored-by: gitea-actions <actions@noreply.localhost>
Reviewed-on: #7
2026-07-30 00:10:38 +02:00

70 lines
2.3 KiB
CMake

cmake_minimum_required(VERSION 3.27)
# PLUGIN_VERSION lives in .env (single source of truth - also read by
# flake.nix) so .gitea/workflows/version-bump.yml only ever has to touch one
# file, rather than a "VERSION X.Y" grep/sed that can't tell this project's
# own version apart from cmake_minimum_required's version above.
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/.env" HYPR_CHROME_ENV_LINES)
foreach(HYPR_CHROME_ENV_LINE IN LISTS HYPR_CHROME_ENV_LINES)
if(HYPR_CHROME_ENV_LINE MATCHES "^PLUGIN_VERSION=(.*)$")
set(HYPR_CHROME_PLUGIN_VERSION "${CMAKE_MATCH_1}")
endif()
endforeach()
project(hypr-chrome
DESCRIPTION "Draws a chamfered HUD-style border frame with a title bar around each window."
VERSION ${HYPR_CHROME_PLUGIN_VERSION}
)
# Match the Makefile's prior default (CXXFLAGS ?= -O2) so a bare `cmake -B
# build` still produces an optimized build; pass -DCMAKE_BUILD_TYPE=Debug to
# override.
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Lets clangd discover build/compile_commands.json automatically (it checks
# common build-dir names on its own) - no hand-rolled compile_flags.txt
# needed.
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(PkgConfig REQUIRED)
pkg_check_modules(deps REQUIRED IMPORTED_TARGET
hyprland
libdrm
libinput
libudev
pixman-1
wayland-server
xkbcommon
)
add_library(hypr-chrome SHARED
src/Main.cpp
src/ChromeDecoration.cpp
src/ChromePassElement.cpp
)
target_link_libraries(hypr-chrome PRIVATE rt PkgConfig::deps)
set_target_properties(hypr-chrome PROPERTIES
PREFIX ""
POSITION_INDEPENDENT_CODE ON
# hyprctl plugin load/buildAndLoad.sh both expect the built .so at the
# repo root, not buried in the build tree.
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}
)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
# GCC emits STB_GNU_UNIQUE bindings for vague-linkage symbols (header
# inline/static globals) by default; those break repeated dlopen/dlclose
# of the same symbol names, which is exactly what reloading this plugin
# does. Clang doesn't emit them and doesn't support this flag.
target_compile_options(hypr-chrome PRIVATE --no-gnu-unique)
endif()
install(TARGETS hypr-chrome)