127
CMakeLists.txt
Normal file
127
CMakeLists.txt
Normal file
@@ -0,0 +1,127 @@
|
||||
cmake_minimum_required(VERSION 3.31)
|
||||
|
||||
project(LunarWM LANGUAGES C)
|
||||
|
||||
set(CMAKE_C_STANDARD 23)
|
||||
set(CMAKE_C_STANDARD_REQUIRED 23)
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
add_compile_options(
|
||||
-fstack-protector-strong
|
||||
-fwrapv
|
||||
)
|
||||
add_compile_definitions(
|
||||
WLR_USE_UNSTABLE
|
||||
XR_USE_PLATFORM_EGL
|
||||
XR_USE_GRAPHICS_API_OPENGL_ES
|
||||
)
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
pkg_check_modules(WAYLAND REQUIRED IMPORTED_TARGET GLOBAL wayland-server)
|
||||
pkg_check_modules(EGL REQUIRED IMPORTED_TARGET egl)
|
||||
pkg_check_modules(GLES2 REQUIRED IMPORTED_TARGET glesv2)
|
||||
pkg_check_modules(WLROOTS REQUIRED IMPORTED_TARGET wlroots-0.20)
|
||||
pkg_check_modules(XKBCOMMON REQUIRED IMPORTED_TARGET xkbcommon)
|
||||
pkg_check_modules(OPENXR REQUIRED IMPORTED_TARGET openxr)
|
||||
pkg_check_modules(LUA REQUIRED IMPORTED_TARGET lua)
|
||||
pkg_check_modules(PIXMAN REQUIRED IMPORTED_TARGET pixman-1)
|
||||
|
||||
find_program(WAYLAND_SCANNER_EXECUTABLE wayland-scanner REQUIRED)
|
||||
message(STATUS "Found wayland-scanner at ${WAYLAND_SCANNER_EXECUTABLE}")
|
||||
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
|
||||
message(STATUS "Found wayland-protocols at ${WAYLAND_PROTOCOLS_DIR}")
|
||||
pkg_get_variable(WAYLAND_SCANNER_PKGDATA_DIR wayland-scanner pkgdatadir)
|
||||
message(
|
||||
STATUS "Found wayland-scanner pkgdatadir at ${WAYLAND_SCANNER_PKGDATA_DIR}")
|
||||
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
raylib
|
||||
GIT_REPOSITORY https://github.com/slendidev/raylib.git
|
||||
GIT_TAG "lunar"
|
||||
GIT_SHALLOW 1
|
||||
)
|
||||
set(OPENGL_VERSION "ES 3.0")
|
||||
set(PLATFORM DRM)
|
||||
set(BUILD_EXAMPLES OFF)
|
||||
FetchContent_MakeAvailable(raylib)
|
||||
|
||||
add_executable(${PROJECT_NAME})
|
||||
target_sources(${PROJECT_NAME} PUBLIC
|
||||
src/vec.c
|
||||
|
||||
src/RayExt.c
|
||||
src/Config.c
|
||||
src/LunarWM_core.c
|
||||
src/LunarWM_wayland.c
|
||||
src/LunarWM_xr.c
|
||||
src/LunarWM_render.c
|
||||
src/main.c
|
||||
)
|
||||
target_link_libraries(${PROJECT_NAME} PUBLIC
|
||||
PkgConfig::XKBCOMMON
|
||||
PkgConfig::WAYLAND
|
||||
PkgConfig::EGL
|
||||
PkgConfig::GLES2
|
||||
PkgConfig::WLROOTS
|
||||
PkgConfig::OPENXR
|
||||
PkgConfig::LUA
|
||||
PkgConfig::PIXMAN
|
||||
|
||||
raylib
|
||||
)
|
||||
|
||||
# Wayland protocol codegen
|
||||
set(XDG_SHELL_XML
|
||||
${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml
|
||||
)
|
||||
|
||||
set(XDG_SHELL_HEADER
|
||||
${CMAKE_BINARY_DIR}/xdg-shell-protocol.h
|
||||
)
|
||||
|
||||
set(XDG_SHELL_C
|
||||
${CMAKE_BINARY_DIR}/xdg-shell-protocol.c
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XDG_SHELL_HEADER}
|
||||
COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header
|
||||
${XDG_SHELL_XML} ${XDG_SHELL_HEADER}
|
||||
DEPENDS ${XDG_SHELL_XML}
|
||||
COMMENT "Generating xdg-shell-protocol.h (server header)"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${XDG_SHELL_C}
|
||||
COMMAND ${WAYLAND_SCANNER_EXECUTABLE} private-code
|
||||
${XDG_SHELL_XML} ${XDG_SHELL_C}
|
||||
DEPENDS ${XDG_SHELL_XML}
|
||||
COMMENT "Generating xdg-shell-protocol.c"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(xdg_shell_protocol
|
||||
DEPENDS ${XDG_SHELL_HEADER} ${XDG_SHELL_C}
|
||||
)
|
||||
|
||||
add_library(xdg_shell STATIC
|
||||
${XDG_SHELL_C}
|
||||
)
|
||||
|
||||
add_dependencies(xdg_shell xdg_shell_protocol)
|
||||
|
||||
target_include_directories(xdg_shell PUBLIC
|
||||
${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_dependencies(${PROJECT_NAME} xdg_shell_protocol)
|
||||
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE xdg_shell)
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
${CMAKE_BINARY_DIR}
|
||||
)
|
||||
Reference in New Issue
Block a user