From d510bfa2df52e6ec6e78c59fe7a2855f3344665e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Mon, 23 Oct 2023 22:29:44 +0200 Subject: [PATCH] wasm: set MAXIMUM_MEMORY to 4GB MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This increases the maximum available memory from 2GB (Emscritpten default) to 4GB, which is the 32-bit wasm max. Add QT_WASM_MAXIMUM_MEMORY qmake/cmake option for overriding. Change-Id: I6257fc919a749412c4ba1e0f939996c6057ce314 Reviewed-by: Morten Johan Sørvig (cherry picked from commit c6d3b91549ceaafa81cbcedf243f798f1114a467) Reviewed-by: Qt Cherry-pick Bot --- mkspecs/features/wasm/wasm.prf | 6 +++++ src/corelib/Qt6WasmMacros.cmake | 9 ++++++++ .../doc/src/cmake/cmake-properties.qdoc | 23 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/mkspecs/features/wasm/wasm.prf b/mkspecs/features/wasm/wasm.prf index 4e969aaf5ff..fb9f757ce26 100644 --- a/mkspecs/features/wasm/wasm.prf +++ b/mkspecs/features/wasm/wasm.prf @@ -48,6 +48,12 @@ exists($$QMAKE_QT_CONFIG) { INITIAL_MEMORY = $$QT_WASM_INITIAL_MEMORY } EMCC_LFLAGS += -s INITIAL_MEMORY=$$INITIAL_MEMORY + isEmpty(QT_WASM_MAXIMUM_MEMORY) { + MAXIMUM_MEMORY = 4GB # 32-bit max + } else { + MAXIMUM_MEMORY = $$QT_WASM_MAXIMUM_MEMORY + } + EMCC_LFLAGS += -s MAXIMUM_MEMORY=$$MAXIMUM_MEMORY qtConfig(sse2) { QMAKE_CFLAGS += -O2 -msimd128 -msse -msse2 diff --git a/src/corelib/Qt6WasmMacros.cmake b/src/corelib/Qt6WasmMacros.cmake index 147c02e36df..0d851e0e481 100644 --- a/src/corelib/Qt6WasmMacros.cmake +++ b/src/corelib/Qt6WasmMacros.cmake @@ -91,6 +91,15 @@ function(_qt_internal_wasm_add_target_helpers target) endif() target_link_options("${target}" PRIVATE "SHELL:-s INITIAL_MEMORY=${QT_WASM_INITIAL_MEMORY}") + # Set maximum memory size, either from user setting or to 4GB (the 32-bit maximum) + get_target_property(_tmp_maximumMemory "${target}" QT_WASM_MAXIMUM_MEMORY) + if(_tmp_maximumMemory) + set(QT_WASM_MAXIMUM_MEMORY "${_tmp_maximumMemory}") + elseif(NOT DEFINED QT_WASM_MAXIMUM_MEMORY) + set(QT_WASM_MAXIMUM_MEMORY "4GB") + endif() + target_link_options("${target}" PRIVATE "SHELL:-s MAXIMUM_MEMORY=${QT_WASM_MAXIMUM_MEMORY}") + endif() endfunction() diff --git a/src/corelib/doc/src/cmake/cmake-properties.qdoc b/src/corelib/doc/src/cmake/cmake-properties.qdoc index 91b2259eafd..f228cea1019 100644 --- a/src/corelib/doc/src/cmake/cmake-properties.qdoc +++ b/src/corelib/doc/src/cmake/cmake-properties.qdoc @@ -591,6 +591,29 @@ QT_WASM_INITIAL_MEMORY must be a multiple of 65536 bytes. For more information, see \l{https://github.com/emscripten-core/emscripten/blob/main/src/settings.js}{Emscripten compiler settings}. */ +/*! +\page cmake-target-property-qt-wasm-maximum-memory.html +\ingroup cmake-properties-qtcore +\ingroup cmake-target-properties-qtcore + +\title QT_WASM_MAXIMUM_MEMORY +\target cmake-target-property-QT_WASM_MAXIMUM_MEMORY + +\summary {Internal WebAssembly maximum memory.} + +\cmakepropertysince 6.7 +\preliminarycmakeproperty +\cmakepropertywebassemblyonly + +Specifies the maximum amount of memory the applicataion can use. Translates into +the Emscripten compiler setting of MAXIMUM_MEMORY. The default value +is 4GB, which is the maximum for 32-bit WebAssembly. + +For more information, see \l{https://github.com/emscripten-core/emscripten/blob/main/src/settings.js}{Emscripten compiler settings}. +*/ + + + /*! \page cmake-target-property-qt-ios-launch-screen.html \ingroup cmake-properties-qtcore