@@ -117,6 +117,16 @@ endif()
117117if (NOT DEFINED LLVM_PROVIDER)
118118 set (LLVM_PROVIDER "source" )
119119endif ()
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 ()
120130if (NOT DEFINED LLVM_GIT_REF)
121131 set (LLVM_GIT_REF "afd4df07ab0262482829d4410a6bae9f2809d37b" )
122132endif ()
@@ -258,7 +268,7 @@ set(MESA_LAVAPIPE_THIN_ARCHIVE "${MESA_BUILD_DIR}/src/gallium/frontends/lavapipe
258268set (MESA_LAVAPIPE_FULL_ARCHIVE "${MESA_BUILD_DIR} /src/gallium/frontends/lavapipe/liblavapipe_st.full.a" )
259269set (MESA_WEBVULKAN_DRIVER_ARCHIVE "${MESA_BUILD_DIR} /libwebvulkan_driver.full.a" )
260270set (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 " )
262272set (MESA_SOURCE_REV "${MESA_GIT_REF} " )
263273set (MESA_SOURCE_TREE_STATE "unknown" )
264274if (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} \n untracked=${MESA_SOURCE_UNTRACKED_HASH} \n " )
331+ set (MESA_SOURCE_TREE_STATE "dirty:${MESA_SOURCE_TREE_HASH} " )
332+ endif ()
293333 endif ()
294334endif ()
295335
296336set (MESA_CONFIG_SIGNATURE_INPUT
297- "llvm_provider=${LLVM_PROVIDER} \n llvm_git_ref=${LLVM_GIT_REF} \n llvm_prebuilt_url=${LLVM_PREBUILT_URL} \n llvm_prebuilt_sha256=${LLVM_PREBUILT_SHA256} \n emsdk_root=${EMSDK_ROOT} \n "
337+ "llvm_provider=${LLVM_PROVIDER} \n llvm_git_ref=${LLVM_GIT_REF} \n llvm_prebuilt_url=${LLVM_PREBUILT_URL} \n llvm_prebuilt_sha256=${LLVM_PREBUILT_SHA256} \n emsdk_root=${EMSDK_ROOT} \n llvm_orcjit= ${WEBVULKAN_LLVM_ORCJIT_MESON} \ n "
298338)
299339string (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)
337377endif ()
338378
339379set (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 )
342384elseif (NOT MESA_EXISTING_FORMAT STREQUAL MESA_BUILD_SIGNATURE_VERSION)
343385 set (MESA_REQUIRES_COMPILE ON )
344386elseif (NOT MESA_EXISTING_SOURCE_HASH STREQUAL MESA_SOURCE_SIGNATURE_HASH)
345387 set (MESA_REQUIRES_COMPILE ON )
346388endif ()
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 ()
351398endif ()
@@ -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
0 commit comments