Skip to content

Commit 44e26ee

Browse files
committed
Checkpoint stable lavapipe runtime smoke
1 parent 7969e5b commit 44e26ee

5 files changed

Lines changed: 321 additions & 53 deletions

File tree

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ set(LLVM_PREBUILT_URL "${_WEBVULKAN_DEFAULT_LLVM_PREBUILT_URL}" CACHE STRING "UR
4545
set(LLVM_PREBUILT_SHA256 "${_WEBVULKAN_DEFAULT_LLVM_PREBUILT_SHA256}" CACHE STRING "SHA256 for LLVM_PREBUILT_URL (optional)")
4646
set(LLVM_PROVIDER "prebuilt" CACHE STRING "LLVM provider: source, prebuilt, or system")
4747
set_property(CACHE LLVM_PROVIDER PROPERTY STRINGS source prebuilt system)
48+
option(WEBVULKAN_LLVM_ORCJIT "Build Mesa with LLVM ORCJIT path" OFF)
4849
set(LLVM_GIT_REF "afd4df07ab0262482829d4410a6bae9f2809d37b" CACHE STRING "Pinned LLVM git ref")
4950
if(LLVM_GIT_REF STREQUAL "ee9aeb4e05aa8edd2077b79f6712ea353ef5be77")
5051
set(LLVM_GIT_REF "afd4df07ab0262482829d4410a6bae9f2809d37b" CACHE STRING "Pinned LLVM git ref" FORCE)
@@ -124,6 +125,7 @@ add_custom_target(llvmpipe_wasm_spike
124125
-DLLVM_WASM_BUILD_DIR=${LLVM_WASM_BUILD_DIR}
125126
-DLLVM_WASM_INSTALL_DIR=${LLVM_WASM_INSTALL_DIR}
126127
-DLLVM_PROVIDER=${LLVM_PROVIDER}
128+
-DWEBVULKAN_LLVM_ORCJIT=${WEBVULKAN_LLVM_ORCJIT}
127129
-DLLVM_GIT_REF=${LLVM_GIT_REF}
128130
-DLLVM_PREBUILT_URL=${LLVM_PREBUILT_URL}
129131
-DLLVM_PREBUILT_SHA256=${LLVM_PREBUILT_SHA256}
@@ -138,8 +140,11 @@ add_custom_target(lavapipe_wasm_spike DEPENDS llvmpipe_wasm_spike)
138140
add_library(webvulkan_llvmpipe_wasm INTERFACE)
139141
add_library(webvulkan::llvmpipe_wasm ALIAS webvulkan_llvmpipe_wasm)
140142
add_library(webvulkan::lavapipe_wasm ALIAS webvulkan_llvmpipe_wasm)
143+
add_library(webvulkan_llvm_jit INTERFACE)
144+
add_library(webvulkan::llvm_jit ALIAS webvulkan_llvm_jit)
141145

142146
add_dependencies(webvulkan_llvmpipe_wasm llvmpipe_wasm_spike)
147+
add_dependencies(webvulkan_llvm_jit llvmpipe_wasm_spike)
143148

144149
target_include_directories(webvulkan_llvmpipe_wasm INTERFACE
145150
"$<BUILD_INTERFACE:${MESA_SRC_DIR}/include>"
@@ -153,6 +158,8 @@ target_include_directories(webvulkan_llvmpipe_wasm INTERFACE
153158
target_link_libraries(webvulkan_llvmpipe_wasm INTERFACE
154159
"$<BUILD_INTERFACE:${WEBVULKAN_DRIVER_ARCHIVE}>"
155160
)
161+
target_link_libraries(webvulkan_llvm_jit INTERFACE webvulkan::llvmpipe_wasm)
162+
target_compile_definitions(webvulkan_llvm_jit INTERFACE WEBVULKAN_ENABLE_LLVM_JIT=1)
156163

157164
set(WEBVULKAN_PACKAGE_NAME "WebVulkanLlvmpipeWasm")
158165
set(WEBVULKAN_CONFIG_DIR "${CMAKE_INSTALL_LIBDIR}/cmake/${WEBVULKAN_PACKAGE_NAME}")

cmake/BuildMesaLlvmpipeWasm.cmake

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,16 @@ endif()
117117
if(NOT DEFINED LLVM_PROVIDER)
118118
set(LLVM_PROVIDER "source")
119119
endif()
120+
if(NOT DEFINED WEBVULKAN_LLVM_ORCJIT)
121+
set(WEBVULKAN_LLVM_ORCJIT OFF)
122+
endif()
123+
if(WEBVULKAN_LLVM_ORCJIT)
124+
set(WEBVULKAN_LLVM_ORCJIT_MESON true)
125+
set(WEBVULKAN_LLVM_ENABLE_THREADS ON)
126+
else()
127+
set(WEBVULKAN_LLVM_ORCJIT_MESON false)
128+
set(WEBVULKAN_LLVM_ENABLE_THREADS OFF)
129+
endif()
120130
if(NOT DEFINED LLVM_GIT_REF)
121131
set(LLVM_GIT_REF "afd4df07ab0262482829d4410a6bae9f2809d37b")
122132
endif()
@@ -258,7 +268,7 @@ set(MESA_LAVAPIPE_THIN_ARCHIVE "${MESA_BUILD_DIR}/src/gallium/frontends/lavapipe
258268
set(MESA_LAVAPIPE_FULL_ARCHIVE "${MESA_BUILD_DIR}/src/gallium/frontends/lavapipe/liblavapipe_st.full.a")
259269
set(MESA_WEBVULKAN_DRIVER_ARCHIVE "${MESA_BUILD_DIR}/libwebvulkan_driver.full.a")
260270
set(MESA_BUILD_STATE_FILE "${MESA_BUILD_DIR}/.webvulkan_mesa_build_state.txt")
261-
set(MESA_BUILD_SIGNATURE_VERSION "3")
271+
set(MESA_BUILD_SIGNATURE_VERSION "4")
262272
set(MESA_SOURCE_REV "${MESA_GIT_REF}")
263273
set(MESA_SOURCE_TREE_STATE "unknown")
264274
if(EXISTS "${MESA_SRC_DIR}/.git")
@@ -276,25 +286,55 @@ if(EXISTS "${MESA_SRC_DIR}/.git")
276286
endif()
277287

278288
execute_process(
279-
COMMAND "${GIT_EXECUTABLE}" -C "${MESA_SRC_DIR}" status --porcelain=v1 --untracked-files=no
280-
OUTPUT_VARIABLE MESA_SOURCE_STATUS
289+
COMMAND "${GIT_EXECUTABLE}" -C "${MESA_SRC_DIR}" diff --no-ext-diff --binary --no-color HEAD --
290+
OUTPUT_VARIABLE MESA_SOURCE_DIFF
291+
OUTPUT_STRIP_TRAILING_WHITESPACE
292+
ERROR_QUIET
293+
RESULT_VARIABLE MESA_SOURCE_DIFF_RESULT
294+
)
295+
296+
set(MESA_SOURCE_DIFF_HASH "")
297+
if(MESA_SOURCE_DIFF_RESULT EQUAL 0 AND NOT MESA_SOURCE_DIFF STREQUAL "")
298+
string(SHA256 MESA_SOURCE_DIFF_HASH "${MESA_SOURCE_DIFF}")
299+
endif()
300+
301+
execute_process(
302+
COMMAND "${GIT_EXECUTABLE}" -C "${MESA_SRC_DIR}" ls-files --others --exclude-standard
303+
OUTPUT_VARIABLE MESA_SOURCE_UNTRACKED_LIST
281304
OUTPUT_STRIP_TRAILING_WHITESPACE
282305
ERROR_QUIET
283-
RESULT_VARIABLE MESA_SOURCE_STATUS_RESULT
306+
RESULT_VARIABLE MESA_SOURCE_UNTRACKED_RESULT
284307
)
285-
if(MESA_SOURCE_STATUS_RESULT EQUAL 0)
286-
if(MESA_SOURCE_STATUS STREQUAL "")
287-
set(MESA_SOURCE_TREE_STATE "clean")
288-
else()
289-
string(SHA256 MESA_SOURCE_STATUS_HASH "${MESA_SOURCE_STATUS}")
290-
set(MESA_SOURCE_TREE_STATE "dirty:${MESA_SOURCE_STATUS_HASH}")
308+
309+
set(MESA_SOURCE_UNTRACKED_HASH "")
310+
if(MESA_SOURCE_UNTRACKED_RESULT EQUAL 0 AND NOT MESA_SOURCE_UNTRACKED_LIST STREQUAL "")
311+
string(REPLACE "\n" ";" MESA_SOURCE_UNTRACKED_FILES "${MESA_SOURCE_UNTRACKED_LIST}")
312+
set(MESA_SOURCE_UNTRACKED_INPUT "")
313+
foreach(MESA_SOURCE_UNTRACKED_FILE IN LISTS MESA_SOURCE_UNTRACKED_FILES)
314+
if(NOT MESA_SOURCE_UNTRACKED_FILE STREQUAL "")
315+
set(MESA_SOURCE_UNTRACKED_PATH "${MESA_SRC_DIR}/${MESA_SOURCE_UNTRACKED_FILE}")
316+
if(EXISTS "${MESA_SOURCE_UNTRACKED_PATH}" AND NOT IS_DIRECTORY "${MESA_SOURCE_UNTRACKED_PATH}")
317+
file(SHA256 "${MESA_SOURCE_UNTRACKED_PATH}" MESA_SOURCE_UNTRACKED_FILE_HASH)
318+
string(APPEND MESA_SOURCE_UNTRACKED_INPUT "${MESA_SOURCE_UNTRACKED_FILE}=${MESA_SOURCE_UNTRACKED_FILE_HASH}\n")
319+
endif()
320+
endif()
321+
endforeach()
322+
if(NOT MESA_SOURCE_UNTRACKED_INPUT STREQUAL "")
323+
string(SHA256 MESA_SOURCE_UNTRACKED_HASH "${MESA_SOURCE_UNTRACKED_INPUT}")
291324
endif()
292325
endif()
326+
327+
if(MESA_SOURCE_DIFF_HASH STREQUAL "" AND MESA_SOURCE_UNTRACKED_HASH STREQUAL "")
328+
set(MESA_SOURCE_TREE_STATE "clean")
329+
else()
330+
string(SHA256 MESA_SOURCE_TREE_HASH "diff=${MESA_SOURCE_DIFF_HASH}\nuntracked=${MESA_SOURCE_UNTRACKED_HASH}\n")
331+
set(MESA_SOURCE_TREE_STATE "dirty:${MESA_SOURCE_TREE_HASH}")
332+
endif()
293333
endif()
294334
endif()
295335

296336
set(MESA_CONFIG_SIGNATURE_INPUT
297-
"llvm_provider=${LLVM_PROVIDER}\nllvm_git_ref=${LLVM_GIT_REF}\nllvm_prebuilt_url=${LLVM_PREBUILT_URL}\nllvm_prebuilt_sha256=${LLVM_PREBUILT_SHA256}\nemsdk_root=${EMSDK_ROOT}\n"
337+
"llvm_provider=${LLVM_PROVIDER}\nllvm_git_ref=${LLVM_GIT_REF}\nllvm_prebuilt_url=${LLVM_PREBUILT_URL}\nllvm_prebuilt_sha256=${LLVM_PREBUILT_SHA256}\nemsdk_root=${EMSDK_ROOT}\nllvm_orcjit=${WEBVULKAN_LLVM_ORCJIT_MESON}\n"
298338
)
299339
string(SHA256 MESA_CONFIG_SIGNATURE_HASH "${MESA_CONFIG_SIGNATURE_INPUT}")
300340

@@ -337,15 +377,22 @@ elseif(NOT MESA_EXISTING_CONFIG_HASH STREQUAL MESA_CONFIG_SIGNATURE_HASH)
337377
endif()
338378

339379
set(MESA_REQUIRES_COMPILE OFF)
340-
if(NOT MESA_HAS_REQUIRED_OUTPUTS)
380+
if(MESA_REQUIRES_CONFIGURE)
381+
set(MESA_REQUIRES_COMPILE ON)
382+
elseif(NOT MESA_HAS_REQUIRED_OUTPUTS)
341383
set(MESA_REQUIRES_COMPILE ON)
342384
elseif(NOT MESA_EXISTING_FORMAT STREQUAL MESA_BUILD_SIGNATURE_VERSION)
343385
set(MESA_REQUIRES_COMPILE ON)
344386
elseif(NOT MESA_EXISTING_SOURCE_HASH STREQUAL MESA_SOURCE_SIGNATURE_HASH)
345387
set(MESA_REQUIRES_COMPILE ON)
346388
endif()
347389

348-
if(NOT MESA_REQUIRES_CONFIGURE AND NOT MESA_REQUIRES_COMPILE)
390+
set(WEBVULKAN_LLVM_INSTALL_READY OFF)
391+
if(EXISTS "${LLVM_WASM_INSTALL_DIR}/include/llvm/Config/llvm-config.h")
392+
set(WEBVULKAN_LLVM_INSTALL_READY ON)
393+
endif()
394+
395+
if(NOT MESA_REQUIRES_CONFIGURE AND NOT MESA_REQUIRES_COMPILE AND WEBVULKAN_LLVM_INSTALL_READY)
349396
message(STATUS "Mesa lavapipe wasm build is up to date")
350397
return()
351398
endif()
@@ -403,6 +450,8 @@ if(LLVM_PROVIDER STREQUAL "source")
403450
-DLLVM_ENABLE_ZLIB=OFF
404451
-DLLVM_ENABLE_ZSTD=OFF
405452
-DLLVM_ENABLE_LIBXML2=OFF
453+
-DLLVM_FORCE_USE_OLD_TOOLCHAIN=ON
454+
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
406455
-DLLVM_BUILD_TOOLS=ON
407456
-DLLVM_INCLUDE_TOOLS=ON
408457
)
@@ -447,10 +496,12 @@ if(LLVM_PROVIDER STREQUAL "source")
447496
-DLLVM_INCLUDE_BENCHMARKS=OFF
448497
-DLLVM_INCLUDE_DOCS=OFF
449498
-DLLVM_ENABLE_BINDINGS=OFF
450-
-DLLVM_ENABLE_THREADS=OFF
499+
-DLLVM_ENABLE_THREADS=${WEBVULKAN_LLVM_ENABLE_THREADS}
451500
-DLLVM_ENABLE_ZLIB=OFF
452501
-DLLVM_ENABLE_ZSTD=OFF
453502
-DLLVM_ENABLE_LIBXML2=OFF
503+
-DLLVM_FORCE_USE_OLD_TOOLCHAIN=ON
504+
-DLLVM_TEMPORARILY_ALLOW_OLD_TOOLCHAIN=ON
454505
-DLLVM_ENABLE_RTTI=ON
455506
-DLLVM_BUILD_TOOLS=OFF
456507
-DLLVM_INCLUDE_TOOLS=OFF
@@ -615,6 +666,7 @@ if(MESA_REQUIRES_CONFIGURE)
615666
-Dllvm=enabled
616667
-Dshared-llvm=disabled
617668
-Ddraw-use-llvm=true
669+
-Dllvm-orcjit=${WEBVULKAN_LLVM_ORCJIT_MESON}
618670
-Dopengl=false
619671
-Dgles1=disabled
620672
-Dgles2=disabled

cmake/WebVulkanLlvmpipeWasmConfig.cmake.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ if(NOT TARGET webvulkan::lavapipe_wasm)
2020
target_link_libraries(webvulkan::lavapipe_wasm INTERFACE webvulkan::llvmpipe_wasm)
2121
endif()
2222

23+
if(NOT TARGET webvulkan::llvm_jit)
24+
add_library(webvulkan::llvm_jit INTERFACE IMPORTED)
25+
target_link_libraries(webvulkan::llvm_jit INTERFACE webvulkan::llvmpipe_wasm)
26+
target_compile_definitions(webvulkan::llvm_jit INTERFACE WEBVULKAN_ENABLE_LLVM_JIT=1)
27+
endif()
28+
2329
if(NOT TARGET webvulkan_llvmpipe_wasm)
2430
add_library(webvulkan_llvmpipe_wasm INTERFACE IMPORTED)
2531
target_link_libraries(webvulkan_llvmpipe_wasm INTERFACE webvulkan::llvmpipe_wasm)

tests/RunLavapipeRuntimeSmoke.cmake

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ append_rsp("-sEXPORT_ES6=1")
7171
append_rsp("-sENVIRONMENT=web,worker,node")
7272
append_rsp("-sEXPORTED_FUNCTIONS=['_main','_lavapipe_runtime_smoke']")
7373
append_rsp("-sEXPORTED_RUNTIME_METHODS=['ccall']")
74+
append_rsp("-sMAIN_MODULE=2")
75+
append_rsp("-sALLOW_TABLE_GROWTH=1")
76+
append_rsp("-Wl,--allow-multiple-definition")
77+
append_rsp("-sASSERTIONS=2")
78+
append_rsp("-sSTACK_OVERFLOW_CHECK=2")
79+
append_rsp("--profiling-funcs")
7480
append_rsp("${DRIVER_ARCHIVE}")
7581

7682
execute_process(

0 commit comments

Comments
 (0)