mirror of
https://github.com/wolfpld/tracy.git
synced 2026-06-08 00:23:47 +00:00
165 lines
6.0 KiB
CMake
165 lines
6.0 KiB
CMake
# CMakeLists.txt — WebGPU spinning triangle demo
|
|
#
|
|
# macOS:
|
|
# clang++ -std=c++17 -ObjC++ spinning_triangle.cpp platform/platform_macos.mm \
|
|
# -I/path/to/wgpu/include -L/path/to/wgpu/lib -lwgpu_native \
|
|
# -Wl,-rpath,@executable_path \
|
|
# -framework Cocoa -framework Metal -framework QuartzCore \
|
|
# -framework Foundation -framework IOKit -framework IOSurface \
|
|
# -o spinning_triangle
|
|
#
|
|
# Windows (MSVC):
|
|
# cl /std:c++17 spinning_triangle.cpp platform/platform_windows.cpp \
|
|
# /I\path\to\wgpu\include \path\to\wgpu\lib\wgpu_native.lib \
|
|
# user32.lib gdi32.lib /Fe:spinning_triangle.exe
|
|
#
|
|
# Linux / Wayland:
|
|
# g++ -std=c++17 spinning_triangle.cpp platform/platform_wayland.cpp \
|
|
# xdg-shell-protocol.c \
|
|
# -I/path/to/wgpu/include -L/path/to/wgpu/lib -lwgpu_native \
|
|
# -lwayland-client -o spinning_triangle
|
|
|
|
cmake_minimum_required(VERSION 3.16)
|
|
project(spinning_triangle LANGUAGES C CXX)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# WebGPU backend — set WGPU_PATH to your wgpu-native or Dawn installation.
|
|
# The library name differs between backends:
|
|
# wgpu-native → wgpu_native
|
|
# Dawn → webgpu_dawn
|
|
# ---------------------------------------------------------------------------
|
|
set(WGPU_PATH "" CACHE PATH "Root of the WebGPU native installation (contains include/ and lib/)")
|
|
set(WGPU_LIB "webgpu_dawn" CACHE STRING "WebGPU library name (wgpu_native or webgpu_dawn)")
|
|
|
|
if(NOT WGPU_PATH)
|
|
message(FATAL_ERROR "Set WGPU_PATH to the root of your WebGPU native installation.")
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Tracy root — defaults to two directories above this CMakeLists.txt.
|
|
# ---------------------------------------------------------------------------
|
|
set(TRACY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../..")
|
|
option(TRACY_ENABLE "Enable Tracy profiling" ON)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# macOS quarantine — pre-built WebGPU binaries downloaded from the internet
|
|
# carry a com.apple.quarantine extended attribute that prevents dyld from
|
|
# loading them ("damaged or incomplete" / Gatekeeper block). Strip it once
|
|
# at configure time so the linker and the runtime loader can both access the
|
|
# library directory without further user intervention.
|
|
# ---------------------------------------------------------------------------
|
|
if(APPLE)
|
|
execute_process(
|
|
COMMAND xattr -dr com.apple.quarantine "${WGPU_PATH}/lib"
|
|
)
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Platform-specific source and link settings
|
|
# ---------------------------------------------------------------------------
|
|
set(PLATFORM_GENERATED_INCLUDES "")
|
|
|
|
if(APPLE)
|
|
set(PLATFORM_SOURCES platform/platform_macos.mm)
|
|
set(PLATFORM_LIBS
|
|
"-framework Cocoa"
|
|
"-framework Metal"
|
|
"-framework QuartzCore"
|
|
"-framework Foundation"
|
|
"-framework IOKit"
|
|
"-framework IOSurface"
|
|
)
|
|
set_source_files_properties(platform/platform_macos.mm
|
|
PROPERTIES COMPILE_FLAGS "-ObjC++"
|
|
)
|
|
elseif(WIN32)
|
|
set(PLATFORM_SOURCES platform/platform_windows.cpp)
|
|
set(PLATFORM_LIBS user32 gdi32)
|
|
else()
|
|
# Linux / Wayland — generate xdg-shell protocol glue via wayland-scanner.
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(WAYLAND_PROTOCOLS REQUIRED wayland-protocols)
|
|
pkg_get_variable(WAYLAND_PROTOCOLS_DIR wayland-protocols pkgdatadir)
|
|
find_program(WAYLAND_SCANNER wayland-scanner REQUIRED)
|
|
|
|
set(XDG_SHELL_XML "${WAYLAND_PROTOCOLS_DIR}/stable/xdg-shell/xdg-shell.xml")
|
|
set(XDG_SHELL_H "${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-protocol.h")
|
|
set(XDG_SHELL_C "${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-protocol.c")
|
|
|
|
add_custom_command(
|
|
OUTPUT "${XDG_SHELL_H}"
|
|
COMMAND "${WAYLAND_SCANNER}" client-header "${XDG_SHELL_XML}" "${XDG_SHELL_H}"
|
|
DEPENDS "${XDG_SHELL_XML}"
|
|
COMMENT "Generating xdg-shell-client-protocol.h"
|
|
VERBATIM
|
|
)
|
|
add_custom_command(
|
|
OUTPUT "${XDG_SHELL_C}"
|
|
COMMAND "${WAYLAND_SCANNER}" private-code "${XDG_SHELL_XML}" "${XDG_SHELL_C}"
|
|
DEPENDS "${XDG_SHELL_XML}"
|
|
COMMENT "Generating xdg-shell-protocol.c"
|
|
VERBATIM
|
|
)
|
|
|
|
set(PLATFORM_SOURCES
|
|
platform/platform_wayland.cpp
|
|
"${XDG_SHELL_C}"
|
|
"${XDG_SHELL_H}"
|
|
)
|
|
set(PLATFORM_LIBS wayland-client)
|
|
set(PLATFORM_GENERATED_INCLUDES "${CMAKE_CURRENT_BINARY_DIR}")
|
|
endif()
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Target
|
|
# ---------------------------------------------------------------------------
|
|
add_executable(spinning_triangle
|
|
spinning_triangle.cpp
|
|
"${TRACY_DIR}/public/TracyClient.cpp"
|
|
${PLATFORM_SOURCES}
|
|
)
|
|
|
|
# Treat TracyClient.cpp as third-party code — suppress all warnings so that
|
|
# upstream changes don't pollute our build output.
|
|
if(MSVC)
|
|
set_source_files_properties("${TRACY_DIR}/public/TracyClient.cpp"
|
|
PROPERTIES COMPILE_FLAGS "/w"
|
|
)
|
|
else()
|
|
set_source_files_properties("${TRACY_DIR}/public/TracyClient.cpp"
|
|
PROPERTIES COMPILE_FLAGS "-w"
|
|
)
|
|
endif()
|
|
|
|
target_compile_features(spinning_triangle PRIVATE cxx_std_17)
|
|
|
|
if(TRACY_ENABLE)
|
|
target_compile_definitions(spinning_triangle PRIVATE TRACY_ENABLE)
|
|
endif()
|
|
|
|
target_include_directories(spinning_triangle PRIVATE
|
|
"${WGPU_PATH}/include"
|
|
"${TRACY_DIR}/public"
|
|
${PLATFORM_GENERATED_INCLUDES}
|
|
)
|
|
|
|
target_link_directories(spinning_triangle PRIVATE "${WGPU_PATH}/lib")
|
|
|
|
target_link_libraries(spinning_triangle PRIVATE
|
|
${WGPU_LIB}
|
|
${PLATFORM_LIBS}
|
|
)
|
|
|
|
# Embed the rpath so the binary finds the WebGPU dylib/so next to itself.
|
|
if(APPLE)
|
|
set_target_properties(spinning_triangle PROPERTIES
|
|
BUILD_RPATH "${WGPU_PATH}/lib"
|
|
INSTALL_RPATH "@executable_path"
|
|
)
|
|
elseif(UNIX)
|
|
set_target_properties(spinning_triangle PROPERTIES
|
|
BUILD_RPATH "${WGPU_PATH}/lib"
|
|
INSTALL_RPATH "$ORIGIN"
|
|
)
|
|
endif()
|