@@ -57,6 +57,8 @@ endif()
5757# ---------------------------------------------------------------------------
5858# Platform-specific source and link settings
5959# ---------------------------------------------------------------------------
60+ set (PLATFORM_GENERATED_INCLUDES "" )
61+
6062if (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)
7678else ()
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} " )
83111endif ()
84112
85113# ---------------------------------------------------------------------------
@@ -112,6 +140,7 @@ endif()
112140target_include_directories (spinning_triangle PRIVATE
113141 "${WGPU_PATH} /include"
114142 "${TRACY_DIR} /public"
143+ ${PLATFORM_GENERATED_INCLUDES}
115144)
116145
117146target_link_directories (spinning_triangle PRIVATE "${WGPU_PATH} /lib" )
0 commit comments