summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/wasm/wasm.prf
diff options
context:
space:
mode:
Diffstat (limited to 'mkspecs/features/wasm/wasm.prf')
-rw-r--r--mkspecs/features/wasm/wasm.prf89
1 files changed, 63 insertions, 26 deletions
diff --git a/mkspecs/features/wasm/wasm.prf b/mkspecs/features/wasm/wasm.prf
index 5ffc647135..c1a1a3a73e 100644
--- a/mkspecs/features/wasm/wasm.prf
+++ b/mkspecs/features/wasm/wasm.prf
@@ -1,4 +1,5 @@
+QT_FOR_CONFIG += core-private
# DESTDIR will be empty if not set in the app .pro file; make sure it has a value
isEmpty(DESTDIR): DESTDIR = $$OUT_PWD
@@ -6,9 +7,27 @@ isEmpty(DESTDIR): DESTDIR = $$OUT_PWD
exists($$QMAKE_QT_CONFIG) {
## this may be subject to change
+ ## qmake puts a space if done otherwise
+ !isEmpty(QT_WASM_EXTRA_EXPORTED_METHODS): {
+ EXPORTED_METHODS = UTF16ToString,stringToUTF16,JSEvents,specialHTMLTargets,FS,callMain,$$QT_WASM_EXTRA_EXPORTED_METHODS
+ } else {
+ EXPORTED_METHODS = UTF16ToString,stringToUTF16,JSEvents,specialHTMLTargets,FS,callMain
+ }
+ EMCC_LFLAGS += -s EXPORTED_RUNTIME_METHODS=$$EXPORTED_METHODS
+
+ !isEmpty(QT_WASM_EXPORT_NAME): {
+ EXPORT_NAME = $$QT_WASM_EXPORT_NAME
+ } else {
+ TARGET_SANITIZED = $$replace(TARGET, [^a-zA-Z0-9_], _)
+ EXPORT_NAME = $${TARGET_SANITIZED}_entry
+ }
+
+ EMCC_LFLAGS += -s EXPORT_NAME=$$EXPORT_NAME
+
qtConfig(thread) {
- EMCC_THREAD_LFLAGS += -s USE_PTHREADS=1
+ EMCC_LFLAGS += -pthread
+ EMCC_CFLAGS += -pthread
# Create worker threads at startup. This is supposed to be an optimization,
# however exceeding the pool size has been obesverved to hang the application.
@@ -18,28 +37,46 @@ exists($$QMAKE_QT_CONFIG) {
}
message("Setting PTHREAD_POOL_SIZE to" $$POOL_SIZE)
- EMCC_THREAD_LFLAGS += -s PTHREAD_POOL_SIZE=$$POOL_SIZE
+ EMCC_LFLAGS += -s PTHREAD_POOL_SIZE=$$POOL_SIZE
+ }
+
+ # Set memory options
+ EMCC_LFLAGS += -sALLOW_MEMORY_GROWTH
+ isEmpty(QT_WASM_INITIAL_MEMORY) {
+ INITIAL_MEMORY = 50MB # emscripten default is 16MB, we need slightly more
+ } else {
+ 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 {
- EMCC_THREAD_LFLAGS += -s ALLOW_MEMORY_GROWTH=1
+ MAXIMUM_MEMORY = $$QT_WASM_MAXIMUM_MEMORY
+ }
+ EMCC_LFLAGS += -s MAXIMUM_MEMORY=$$MAXIMUM_MEMORY
+
+ qtConfig(sse2) {
+ QMAKE_CFLAGS += -O2 -msimd128 -msse -msse2
+ QMAKE_CXXFLAGS += -O2 -msimd128 -msse -msse2
+ QMAKE_LFLAGS += -msimd128 -msse -msse2
+ QMAKE_LFLAGS_DEBUG += -msimd128 -msse -msse2
}
- qtConfig(thread) | !isEmpty(QT_WASM_INITIAL_MEMORY) {
-
- # Hardcode wasm memory size. Emscripten does not currently support memory growth
- # (ALLOW_MEMORY_GROWTH) in pthreads mode, and requires specifying the memory size
- # at build time. Further, browsers limit the maximum initial memory size to 1GB.
- # QT_WASM_INITIAL_MEMORY must be a multiple of 64KB
- INITIAL_MEMORY = 1GB
- !isEmpty(QT_WASM_INITIAL_MEMORY) {
- INITIAL_MEMORY = $$QT_WASM_INITIAL_MEMORY
- }
- message("Setting INITIAL_MEMORY to" $$INITIAL_MEMORY)
- EMCC_THREAD_LFLAGS += -s INITIAL_MEMORY=$$INITIAL_MEMORY
+ qtConfig(shared) {
+ contains(TEMPLATE, .*app) {
+ EMCC_MODULE_FLAGS = -s MAIN_MODULE=1
+ }
+ contains(TEMPLATE, .*lib):!static: {
+ EMCC_MODULE_FLAGS = -s SIDE_MODULE=1
+ }
+ EMCC_CFLAGS += $$EMCC_MODULE_FLAGS
+ EMCC_LFLAGS += $$EMCC_MODULE_FLAGS
}
- QMAKE_LFLAGS += $$EMCC_THREAD_LFLAGS
- QMAKE_LFLAGS_DEBUG += $$EMCC_THREAD_LFLAGS
- QMAKE_CFLAGS += $$EMCC_THREAD_LFLAGS
- QMAKE_CXXFLAGS += $$EMCC_THREAD_LFLAGS
+
+ QMAKE_LFLAGS += $$EMCC_LFLAGS
+ QMAKE_LFLAGS_DEBUG += $$EMCC_LFLAGS
+ QMAKE_CFLAGS += $$EMCC_CFLAGS
+ QMAKE_CXXFLAGS += $$EMCC_CFLAGS
}
# Create js and wasm files for applications
@@ -70,11 +107,16 @@ contains(TEMPLATE, .*app) {
WASM_PLUGIN_PATH = $$PWD/../../../src/plugins/platforms/wasm
}
+ PRELOAD = ""
+ shared {
+ PRELOAD = "preload:\ ['qt_plugins.json',\ 'qt_qml_imports.json'],"
+ }
+
# Copy/Generate main .html file (e.g. myapp.html) from the webassembly_shell.html by
# replacing the app name placeholder with the actual app name.
apphtml.name = application main html file
apphtml.output = $$DESTDIR/$$TARGET_HTML
- apphtml.commands = $$QMAKE_STREAM_EDITOR -e s/@APPNAME@/$$TARGET_BASE/g $$WASM_PLUGIN_PATH/wasm_shell.html > $$DESTDIR/$$TARGET_HTML
+ apphtml.commands = $$QMAKE_STREAM_EDITOR -e s/@APPNAME@/$$TARGET_BASE/g -e s/@APPEXPORTNAME@/$$EXPORT_NAME/g -e s/@PRELOAD@/$$PRELOAD/g $$WASM_PLUGIN_PATH/wasm_shell.html > $$DESTDIR/$$TARGET_HTML
apphtml.input = $$WASM_PLUGIN_PATH/wasm_shell.html
apphtml.depends = $$apphtml.input
QMAKE_EXTRA_COMPILERS += apphtml
@@ -118,12 +160,7 @@ CONFIG(debug):!isEmpty(QT_WASM_SOURCE_MAP) {
EMCC_VERSION = $$qtSystemEmccVersion()
- greaterThan(EMCC_VERSION, 2.0.16) {
- # emsdk 2.0.17 depreciates use of -g4
- QMAKE_LFLAGS += -gsource-map
- } else {
- QMAKE_LFLAGS += -g4
- }
+ QMAKE_LFLAGS += -gsource-map
# Pass --source-map-base on the linker line. This informs the
# browser where to find the source files when debugging.
WASM_SOURCE_MAP_BASE = http://localhost:8000/