Skip to content

Commit 1f391bb

Browse files
committed
Wayland woes...
1 parent 1ae231c commit 1f391bb

1 file changed

Lines changed: 31 additions & 2 deletions

File tree

examples/WebGPUDemo/CMakeLists.txt

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ endif()
5757
# ---------------------------------------------------------------------------
5858
# Platform-specific source and link settings
5959
# ---------------------------------------------------------------------------
60+
set(PLATFORM_GENERATED_INCLUDES "")
61+
6062
if(APPLE)
6163
set(PLATFORM_SOURCES platform/platform_macos.mm)
6264
set(PLATFORM_LIBS
@@ -74,12 +76,38 @@ elseif(WIN32)
7476
set(PLATFORM_SOURCES platform/platform_windows.cpp)
7577
set(PLATFORM_LIBS user32 gdi32)
7678
else()
77-
# Linux / Wayland — also needs the generated xdg-shell protocol glue.
79+
# Linux / Wayland — generate xdg-shell protocol glue via wayland-scanner.
80+
find_package(PkgConfig REQUIRED)
81+
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
82+
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
83+
find_program(WAYLAND_SCANNER wayland-scanner REQUIRED)
84+
85+
set(XDG_SHELL_XML "${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml")
86+
set(XDG_SHELL_H "${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-protocol.h")
87+
set(XDG_SHELL_C "${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-protocol.c")
88+
89+
add_custom_command(
90+
OUTPUT "${XDG_SHELL_H}"
91+
COMMAND "${WAYLAND_SCANNER}" client-header "${XDG_SHELL_XML}" "${XDG_SHELL_H}"
92+
DEPENDS "${XDG_SHELL_XML}"
93+
COMMENT "Generating xdg-shell-client-protocol.h"
94+
VERBATIM
95+
)
96+
add_custom_command(
97+
OUTPUT "${XDG_SHELL_C}"
98+
COMMAND "${WAYLAND_SCANNER}" private-code "${XDG_SHELL_XML}" "${XDG_SHELL_C}"
99+
DEPENDS "${XDG_SHELL_XML}"
100+
COMMENT "Generating xdg-shell-protocol.c"
101+
VERBATIM
102+
)
103+
78104
set(PLATFORM_SOURCES
79105
platform/platform_wayland.cpp
80-
platform/xdg-shell-protocol.c
106+
"${XDG_SHELL_C}"
107+
"${XDG_SHELL_H}"
81108
)
82109
set(PLATFORM_LIBS wayland-client)
110+
set(PLATFORM_GENERATED_INCLUDES "${CMAKE_CURRENT_BINARY_DIR}")
83111
endif()
84112

85113
# ---------------------------------------------------------------------------
@@ -112,6 +140,7 @@ endif()
112140
target_include_directories(spinning_triangle PRIVATE
113141
"${WGPU_PATH}/include"
114142
"${TRACY_DIR}/public"
143+
${PLATFORM_GENERATED_INCLUDES}
115144
)
116145

117146
target_link_directories(spinning_triangle PRIVATE "${WGPU_PATH}/lib")

0 commit comments

Comments
 (0)