diff --git a/cmake/QtWasmHelpers.cmake b/cmake/QtWasmHelpers.cmake index 6c42bd124d5..b30f5895c7a 100644 --- a/cmake/QtWasmHelpers.cmake +++ b/cmake/QtWasmHelpers.cmake @@ -72,6 +72,12 @@ function (qt_internal_setup_wasm_target_properties wasmTarget) target_link_options("${wasmTarget}" INTERFACE "SHELL:-s ASYNCIFY" "-Os") target_compile_definitions("${wasmTarget}" INTERFACE QT_HAVE_EMSCRIPTEN_ASYNCIFY) + elseif ("QT_EMSCRIPTEN_ASYNCIFY=2" IN_LIST QT_QMAKE_DEVICE_OPTIONS) + # Enable JSPI (also known as asyncify 2). Unlike asyncify 1 this + # is supported natively by the browsers, and does not require + # enabling optimizations. + target_link_options("${wasmTarget}" INTERFACE "SHELL:-s JSPI") + target_compile_definitions("${wasmTarget}" INTERFACE QT_HAVE_EMSCRIPTEN_ASYNCIFY) endif() # Set ASYNCIFY_IMPORTS unconditionally in order to support enabling asyncify at link time. diff --git a/mkspecs/common/wasm/wasm.conf b/mkspecs/common/wasm/wasm.conf index 51fa9d7ceb3..6b967d79f24 100644 --- a/mkspecs/common/wasm/wasm.conf +++ b/mkspecs/common/wasm/wasm.conf @@ -8,10 +8,10 @@ include(../clang.conf) load(device_config) load(emcc_ver) -# Support enabling asyncify by configuring with "-device-option QT_EMSCRIPTEN_ASYNCIFY=1" +# Support enabling asyncify by configuring with "-device-option QT_EMSCRIPTEN_ASYNCIFY" !isEmpty(QT_EMSCRIPTEN_ASYNCIFY): { - !equals(QT_EMSCRIPTEN_ASYNCIFY, 1):!equals(QT_EMSCRIPTEN_ASYNCIFY, 0): \ - message(Error: The value for QT_EMSCRIPTEN_ASYNCIFY must be 0 or 1) + !equals(QT_EMSCRIPTEN_ASYNCIFY, 2):!equals(QT_EMSCRIPTEN_ASYNCIFY, 1):!equals(QT_EMSCRIPTEN_ASYNCIFY, 0): \ + message(Error: The value for QT_EMSCRIPTEN_ASYNCIFY must be 0, 1, or 2) equals(QT_EMSCRIPTEN_ASYNCIFY, 1): { QMAKE_CFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY QMAKE_CXXFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY @@ -23,6 +23,11 @@ load(emcc_ver) # are omitted. Enable optimizations also for debug builds. QMAKE_LFLAGS_DEBUG += -Os } + equals(QT_EMSCRIPTEN_ASYNCIFY, 2): { + QMAKE_CFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY + QMAKE_CXXFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY + QMAKE_LFLAGS += -s JSPI + } } # Declare async functions