aquamarine/CMakeLists.txt

139 lines
4.3 KiB
CMake
Raw Normal View History

2024-06-18 11:38:26 +02:00
cmake_minimum_required(VERSION 3.19)
2024-07-18 20:03:42 +02:00
file(READ "${CMAKE_SOURCE_DIR}/VERSION" VER_RAW)
string(STRIP ${VER_RAW} AQUAMARINE_VERSION)
2024-06-18 11:38:26 +02:00
add_compile_definitions(AQUAMARINE_VERSION="${AQUAMARINE_VERSION}")
2024-07-18 20:03:58 +02:00
project(
aquamarine
VERSION ${AQUAMARINE_VERSION}
DESCRIPTION "A very light linux rendering backend library")
2024-06-18 11:38:26 +02:00
include(CTest)
include(CheckIncludeFile)
2024-06-18 11:38:26 +02:00
include(GNUInstallDirs)
set(PREFIX ${CMAKE_INSTALL_PREFIX})
set(INCLUDE ${CMAKE_INSTALL_FULL_INCLUDEDIR})
set(LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR})
find_package(PkgConfig REQUIRED)
2024-07-11 20:41:53 +02:00
find_package(OpenGL REQUIRED COMPONENTS "GLES2")
find_package(hyprwayland-scanner 0.4.0 REQUIRED)
2024-07-18 20:03:58 +02:00
pkg_check_modules(
deps
REQUIRED
IMPORTED_TARGET
libseat>=0.8.0
libinput>=1.26.0
wayland-client
wayland-protocols
hyprutils>=0.1.5
pixman-1
libdrm
gbm
libudev
libdisplay-info
hwdata)
2024-06-18 11:38:26 +02:00
configure_file(aquamarine.pc.in aquamarine.pc @ONLY)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE)
2024-06-18 11:38:26 +02:00
if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
2024-07-18 20:03:58 +02:00
message(STATUS "Configuring aquamarine in Debug")
add_compile_definitions(AQUAMARINE_DEBUG)
2024-06-18 11:38:26 +02:00
else()
2024-07-18 20:03:58 +02:00
add_compile_options(-O3)
message(STATUS "Configuring aquamarine in Release")
2024-06-18 11:38:26 +02:00
endif()
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp" "include/*.hpp")
file(GLOB_RECURSE PUBLIC_HEADERS CONFIGURE_DEPENDS "include/*.hpp")
add_library(aquamarine SHARED ${SRCFILES})
2024-07-18 20:03:58 +02:00
target_include_directories(
aquamarine
PUBLIC "./include"
PRIVATE "./src" "./src/include" "./protocols" "${CMAKE_BINARY_DIR}")
set_target_properties(aquamarine PROPERTIES VERSION ${AQUAMARINE_VERSION}
SOVERSION 0)
target_link_libraries(aquamarine OpenGL::EGL OpenGL::GL PkgConfig::deps)
2024-06-18 11:38:26 +02:00
check_include_file("sys/timerfd.h" HAS_TIMERFD)
pkg_check_modules(epoll IMPORTED_TARGET epoll-shim)
if(NOT HAS_TIMERFD AND epoll_FOUND)
2024-07-18 20:03:58 +02:00
target_link_libraries(aquamarine PkgConfig::epoll)
endif()
2024-06-18 18:45:05 +02:00
# Protocols
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
message(STATUS "Found wayland-protocols at ${WAYLAND_PROTOCOLS_DIR}")
pkg_get_variable(WAYLAND_CLIENT_DIR wayland-client pkgdatadir)
message(STATUS "Found wayland-client at ${WAYLAND_CLIENT_DIR}")
function(protocolNew protoPath protoName external)
2024-07-18 20:03:58 +02:00
if(external)
set(path ${CMAKE_SOURCE_DIR}/${protoPath})
else()
set(path ${WAYLAND_PROTOCOLS_DIR}/${protoPath})
endif()
add_custom_command(
OUTPUT ${CMAKE_SOURCE_DIR}/protocols/${protoName}.cpp
${CMAKE_SOURCE_DIR}/protocols/${protoName}.hpp
COMMAND hyprwayland-scanner --client ${path}/${protoName}.xml
${CMAKE_SOURCE_DIR}/protocols/
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
target_sources(aquamarine PRIVATE protocols/${protoName}.cpp
protocols/${protoName}.hpp)
2024-06-18 18:45:05 +02:00
endfunction()
function(protocolWayland)
2024-07-18 20:03:58 +02:00
add_custom_command(
OUTPUT ${CMAKE_SOURCE_DIR}/protocols/wayland.cpp
${CMAKE_SOURCE_DIR}/protocols/wayland.hpp
COMMAND hyprwayland-scanner --wayland-enums --client
${WAYLAND_CLIENT_DIR}/wayland.xml ${CMAKE_SOURCE_DIR}/protocols/
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
target_sources(aquamarine PRIVATE protocols/wayland.cpp protocols/wayland.hpp)
2024-06-18 18:45:05 +02:00
endfunction()
2024-07-18 20:03:58 +02:00
protocolwayland()
2024-06-18 18:45:05 +02:00
2024-07-18 20:03:58 +02:00
protocolnew("stable/xdg-shell" "xdg-shell" false)
protocolnew("stable/linux-dmabuf" "linux-dmabuf-v1" false)
2024-06-18 18:45:05 +02:00
2024-07-02 13:12:47 +02:00
# Generate hwdata info
pkg_get_variable(HWDATA_DIR hwdata pkgdatadir)
2024-07-18 20:03:58 +02:00
message(
STATUS "Running ${CMAKE_SOURCE_DIR}/data/hwdata.sh < ${HWDATA_DIR}/pnp.ids")
2024-07-02 13:12:47 +02:00
execute_process(
2024-07-18 20:03:58 +02:00
COMMAND /bin/sh -c
"${CMAKE_SOURCE_DIR}/data/hwdata.sh < ${HWDATA_DIR}/pnp.ids"
RESULT_VARIABLE HWDATA_PNP_RESULT
OUTPUT_VARIABLE HWDATA_PNP_IDS ENCODING UTF8)
if(NOT HWDATA_PNP_RESULT MATCHES 0)
message(WARNING "hwdata gathering pnps failed")
2024-07-02 13:12:47 +02:00
endif()
configure_file(data/hwdata.hpp.in hwdata.hpp @ONLY)
2024-06-18 18:45:05 +02:00
# tests
add_custom_target(tests)
add_executable(simpleWindow "tests/SimpleWindow.cpp")
target_link_libraries(simpleWindow PRIVATE PkgConfig::deps aquamarine)
2024-07-18 20:03:58 +02:00
add_test(
NAME "simpleWindow"
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests
COMMAND simpleWindow "simpleWindow")
2024-06-18 18:45:05 +02:00
add_dependencies(tests simpleWindow)
2024-06-18 11:38:26 +02:00
# Installation
install(TARGETS aquamarine)
install(DIRECTORY "include/aquamarine" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
2024-07-18 20:03:58 +02:00
install(FILES ${CMAKE_BINARY_DIR}/aquamarine.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)