Compare commits

..

5 Commits

Author SHA1 Message Date
Sebastian Dawid
7cfe62502f
Merge 4e1fbfbf92 into 936307558e 2025-11-12 15:37:24 +00:00
Sebastian Emanuel Dawid
4e1fbfbf92 Fix IMPLIB naming for MinGW 2025-11-12 16:35:38 +01:00
Sebastian Emanuel Dawid
db5fc21072 Switch back to linking against shared library version of wgpu_native 2025-11-12 16:31:08 +01:00
Sebastian Emanuel Dawid
c8c7405f37 Fix typo in URL for secondary wgpu_native ARCH on macOS 2025-11-12 15:45:51 +01:00
Sebastian Emanuel Dawid
15693a1bde Inline code to fetch prebuilt wgpu_native static library 2025-11-12 15:43:49 +01:00

View File

@ -25,16 +25,94 @@ set(GETOPT "${GLFW_SOURCE_DIR}/deps/getopt.h"
set(TINYCTHREAD "${GLFW_SOURCE_DIR}/deps/tinycthread.h" set(TINYCTHREAD "${GLFW_SOURCE_DIR}/deps/tinycthread.h"
"${GLFW_SOURCE_DIR}/deps/tinycthread.c") "${GLFW_SOURCE_DIR}/deps/tinycthread.c")
set(URL_ARCH)
if (CMAKE_SYSTEM_PROCESSOR STREQUAL "AMD64" OR CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(URL_ARCH "x86_64")
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
set(URL_ARCH "i686")
endif ()
elseif (CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|armv8|arm)$")
set(URL_ARCH "aarch64")
else ()
message(FATAL_ERROR "Unsopported CPU architecture: ${CMAKE_SYSTEM_PROCESSOR}")
endif ()
set(URL_OS)
set(WEBGPU_LIBNAME "libwgpu_native.so")
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
set(URL_OS "windows")
set(WEBGPU_LIBNAME "wgpu_native.dll")
if (MSVC)
set(URL_ARCH "${URL_ARCH}-msvc")
else ()
set(URL_ARCH "${URL_ARCH}-gnu")
endif ()
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
set(WEBGPU_LIBNAME "libwgpu_native.dylib")
set(URL_OS "macos")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(URL_OS "linux")
else ()
message(FATAL_ERROR "Unsopported OS: ${CMAKE_SYSTEM_NAME}")
endif ()
set(WEBGPU_URL "https://github.com/gfx-rs/wgpu-native/releases/download/v24.0.3.1/wgpu-${URL_OS}-${URL_ARCH}-release.zip")
include(FetchContent) include(FetchContent)
FetchContent_Declare( FetchContent_Declare(webgpu_bins
webgpu URL ${WEBGPU_URL}
GIT_REPOSITORY https://github.com/eliemichel/WebGPU-distribution.git
GIT_TAG v0.3.0-gamma
GIT_SHALLOW TRUE
GIT_PROGRESS TRUE
EXCLUDE_FROM_ALL
) )
FetchContent_MakeAvailable(webgpu) FetchContent_MakeAvailable(webgpu_bins)
add_library(webgpu SHARED IMPORTED GLOBAL)
set(WEBGPU_RUNTIME_LIB "${webgpu_bins_SOURCE_DIR}/lib/${WEBGPU_LIBNAME}")
set_target_properties(webgpu PROPERTIES
IMPORTED_LOCATION "${WEBGPU_RUNTIME_LIB}"
)
target_include_directories(webgpu INTERFACE
"${webgpu_bins_SOURCE_DIR}/include"
"${webgpu_bins_SOURCE_DIR}/include/webgpu"
)
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
if (MSVC)
set_target_properties(webgpu PROPERTIES
IMPORTED_IMPLIB ${webgpu_bins_SOURCE_DIR}/lib/${WEBGPU_LIBNAME}.lib
)
else ()
set_target_properties(webgpu PROPERTIES
IMPORTED_IMPLIB ${webgpu_bins_SOURCE_DIR}/lib/lib${WEBGPU_LIBNAME}.a
)
endif ()
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set_target_properties(webgpu PROPERTIES IMPORTED_NO_SONAME True)
else () # macOS
if (URL_ARCH STREQUAL "aarch64")
set(URL_ARCH "x86_64")
else ()
set(URL_ARCH "aarch64")
endif ()
set(WEBGPU_URL "https://github.com/gfx-rs/wgpu-native/releases/download/v24.0.3.1/wgpu-macos-${URL_ARCH}-release.zip")
FetchContent_Declare(webgpu_other_bins
URL ${WEBGPU_URL}
)
FetchContent_MakeAvailable(webgpu_other_bins)
add_library(webgpu_other STATIC IMPORTED GLOBAL)
set(WEBGPU_RUNTIME_LIB_OTHER "${webgpu_other_bins_SOURCE_DIR}/lib/${WEBGPU_LIBNAME}")
set_target_properties(webgpu_other PROPERTIES
IMPORTED_LOCATION "${WEBGPU_RUNTIME_LIB_OTHER}"
)
target_include_directories(webgpu_other INTERFACE
"${webgpu_other_bins_SOURCE_DIR}/include"
"${webgpu_other_bins_SOURCE_DIR}/include/webgpu"
)
target_link_libraries(webgpu INTERFACE
webgpu_other
)
endif ()
add_executable(boing WIN32 MACOSX_BUNDLE boing.c ${ICON} ${GLAD_GL}) add_executable(boing WIN32 MACOSX_BUNDLE boing.c ${ICON} ${GLAD_GL})
add_executable(gears WIN32 MACOSX_BUNDLE gears.c ${ICON} ${GLAD_GL}) add_executable(gears WIN32 MACOSX_BUNDLE gears.c ${ICON} ${GLAD_GL})
@ -55,7 +133,6 @@ if (RT_LIBRARY)
endif() endif()
target_link_libraries(triangle-webgpu webgpu) target_link_libraries(triangle-webgpu webgpu)
target_copy_webgpu_binaries(triangle-webgpu)
set(GUI_ONLY_BINARIES boing gears heightmap particles sharing splitview set(GUI_ONLY_BINARIES boing gears heightmap particles sharing splitview
triangle-opengl triangle-opengles triangle-webgpu wave windows) triangle-opengl triangle-opengles triangle-webgpu wave windows)