1- if (NOT TARGET llvmpipe_wasm_spike)
2- message (FATAL_ERROR "tests require llvmpipe_wasm_spike target from the parent project" )
1+ cmake_minimum_required (VERSION 4.2 )
2+
3+ if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR )
4+ project (webvulkan_tests LANGUAGES NONE )
5+ endif ()
6+
7+ set (WEBVULKAN_TEST_MODE "auto" CACHE STRING "Test mode: auto, in-tree, or package" )
8+ set_property (CACHE WEBVULKAN_TEST_MODE PROPERTY STRINGS auto in-tree package)
9+ set (WEBVULKAN_TEST_PACKAGE_PREFIX "" CACHE PATH "Install prefix for WebVulkan package mode" )
10+ set (WEBVULKAN_TEST_WASM_BUILD_DIR "${CMAKE_BINARY_DIR } /wasm" CACHE PATH "WASM smoke build directory" )
11+
12+ set (_webvulkan_test_mode "${WEBVULKAN_TEST_MODE} " )
13+ if (_webvulkan_test_mode STREQUAL "auto" )
14+ if (TARGET llvmpipe_wasm_spike)
15+ set (_webvulkan_test_mode "in-tree" )
16+ else ()
17+ set (_webvulkan_test_mode "package" )
18+ endif ()
19+ endif ()
20+
21+ if (NOT DEFINED EMSDK_ROOT OR EMSDK_ROOT STREQUAL "" )
22+ if (DEFINED ENV{EMSDK} AND NOT "$ENV{EMSDK} " STREQUAL "" )
23+ set (EMSDK_ROOT "$ENV{EMSDK} " )
24+ endif ()
25+ endif ()
26+
27+ if (NOT DEFINED WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE OR WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE STREQUAL "" )
28+ if (DEFINED EMSDK_ROOT AND NOT EMSDK_ROOT STREQUAL "" )
29+ set (WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE
30+ "${EMSDK_ROOT} /upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" )
31+ endif ()
32+ endif ()
33+
34+ if (NOT DEFINED SUBBUILD_GENERATOR OR SUBBUILD_GENERATOR STREQUAL "" )
35+ set (SUBBUILD_GENERATOR "${CMAKE_GENERATOR } " )
36+ endif ()
37+
38+ if (NOT DEFINED WASM_BUILD_DIR OR WASM_BUILD_DIR STREQUAL "" )
39+ set (WASM_BUILD_DIR "${WEBVULKAN_TEST_WASM_BUILD_DIR} " )
40+ endif ()
41+
42+ if (NOT DEFINED EMSDK_ROOT OR EMSDK_ROOT STREQUAL "" )
43+ message (FATAL_ERROR "EMSDK_ROOT is required for runtime smoke tests" )
44+ endif ()
45+
46+ if (NOT EXISTS "${WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE} " )
47+ message (FATAL_ERROR "Emscripten toolchain file was not found at ${WEBVULKAN_EMSCRIPTEN_TOOLCHAIN_FILE} " )
48+ endif ()
49+
50+ if (NOT SUBBUILD_GENERATOR)
51+ message (FATAL_ERROR "No CMake generator is available for wasm smoke sub-build" )
52+ endif ()
53+
54+ if (_webvulkan_test_mode STREQUAL "in-tree" )
55+ if (NOT TARGET llvmpipe_wasm_spike)
56+ message (FATAL_ERROR "in-tree test mode requires llvmpipe_wasm_spike target" )
57+ endif ()
58+ if (NOT DEFINED WEBVULKAN_DRIVER_ARCHIVE OR WEBVULKAN_DRIVER_ARCHIVE STREQUAL "" )
59+ message (FATAL_ERROR "in-tree test mode requires WEBVULKAN_DRIVER_ARCHIVE" )
60+ endif ()
61+ if (NOT DEFINED MESA_SRC_DIR OR MESA_SRC_DIR STREQUAL "" )
62+ message (FATAL_ERROR "in-tree test mode requires MESA_SRC_DIR" )
63+ endif ()
64+ set (_webvulkan_driver_archive "${WEBVULKAN_DRIVER_ARCHIVE} " )
65+ set (_webvulkan_smoke_include_dirs
66+ "${MESA_SRC_DIR} /include"
67+ "${MESA_SRC_DIR} /src"
68+ )
69+ elseif (_webvulkan_test_mode STREQUAL "package" )
70+ if (NOT WEBVULKAN_TEST_PACKAGE_PREFIX)
71+ message (FATAL_ERROR "package test mode requires WEBVULKAN_TEST_PACKAGE_PREFIX" )
72+ endif ()
73+ set (_webvulkan_driver_archive "${WEBVULKAN_TEST_PACKAGE_PREFIX} /lib/libwebvulkan_driver.a" )
74+ set (_webvulkan_smoke_include_dirs
75+ "${WEBVULKAN_TEST_PACKAGE_PREFIX} /include/mesa"
76+ "${WEBVULKAN_TEST_PACKAGE_PREFIX} /include/mesa/src"
77+ "${WEBVULKAN_TEST_PACKAGE_PREFIX} /include/llvm"
78+ )
79+ else ()
80+ message (FATAL_ERROR "Unsupported WEBVULKAN_TEST_MODE='${WEBVULKAN_TEST_MODE} '" )
381endif ()
482
583set (WEBVULKAN_WASM_SMOKE_OK "${WASM_BUILD_DIR} /runtime_smoke.ok" )
@@ -24,24 +102,29 @@ add_custom_target(wasm_runtime_smoke DEPENDS "${WEBVULKAN_WASM_SMOKE_OK}")
24102
25103set (WEBVULKAN_LAVAPIPE_SMOKE_OK "${CMAKE_BINARY_DIR } /lavapipe_runtime_smoke.ok" )
26104set (WEBVULKAN_LAVAPIPE_SMOKE_JS "${CMAKE_BINARY_DIR } /lavapipe-smoke/lavapipe_runtime_smoke.js" )
105+ set (_webvulkan_lavapipe_depends
106+ "${CMAKE_CURRENT_LIST_DIR } /RunLavapipeRuntimeSmoke.cmake"
107+ "${CMAKE_CURRENT_LIST_DIR } /wasm/src/lavapipe_runtime_smoke.c"
108+ "${CMAKE_CURRENT_LIST_DIR } /wasm/tools/smoke_runtime.mjs"
109+ "${_webvulkan_driver_archive} "
110+ )
111+ if (_webvulkan_test_mode STREQUAL "in-tree" )
112+ list (APPEND _webvulkan_lavapipe_depends llvmpipe_wasm_spike)
113+ endif ()
114+
27115add_custom_command (
28116 OUTPUT "${WEBVULKAN_LAVAPIPE_SMOKE_OK} "
29117 COMMAND
30118 "${CMAKE_COMMAND } "
31119 -DEMSDK_ROOT=${EMSDK_ROOT}
32- -DMESA_SRC_DIR=${MESA_SRC_DIR}
33- -DMESA_BUILD_DIR=${MESA_WASM_BUILD_DIR}
34- -DDRIVER_ARCHIVE=${WEBVULKAN_DRIVER_ARCHIVE}
120+ -DDRIVER_ARCHIVE=${_webvulkan_driver_archive}
121+ -DSMOKE_INCLUDE_DIRS=${_webvulkan_smoke_include_dirs}
35122 -DSMOKE_SOURCE=${CMAKE_CURRENT_LIST_DIR}/wasm/src/lavapipe_runtime_smoke.c
36123 -DSMOKE_JS_OUT=${WEBVULKAN_LAVAPIPE_SMOKE_JS}
37124 -DSMOKE_SCRIPT=${CMAKE_CURRENT_LIST_DIR}/wasm/tools/smoke_runtime.mjs
38125 -P "${CMAKE_CURRENT_LIST_DIR } /RunLavapipeRuntimeSmoke.cmake"
39126 COMMAND "${CMAKE_COMMAND } " -E touch "${WEBVULKAN_LAVAPIPE_SMOKE_OK} "
40- DEPENDS
41- llvmpipe_wasm_spike
42- "${CMAKE_CURRENT_LIST_DIR } /RunLavapipeRuntimeSmoke.cmake"
43- "${CMAKE_CURRENT_LIST_DIR } /wasm/src/lavapipe_runtime_smoke.c"
44- "${CMAKE_CURRENT_LIST_DIR } /wasm/tools/smoke_runtime.mjs"
127+ DEPENDS ${_webvulkan_lavapipe_depends}
45128 USES_TERMINAL
46129 VERBATIM
47130)
0 commit comments