diff options
Diffstat (limited to 'mkspecs/features/wasm/wasm.prf')
-rw-r--r-- | mkspecs/features/wasm/wasm.prf | 105 |
1 files changed, 77 insertions, 28 deletions
diff --git a/mkspecs/features/wasm/wasm.prf b/mkspecs/features/wasm/wasm.prf index 2e886fc4a5..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,40 +7,76 @@ 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. POOL_SIZE = 4 - !isEmpty(QMAKE_WASM_PTHREAD_POOL_SIZE) { - POOL_SIZE = $$QMAKE_WASM_PTHREAD_POOL_SIZE + !isEmpty(QT_WASM_PTHREAD_POOL_SIZE) { + POOL_SIZE = $$QT_WASM_PTHREAD_POOL_SIZE } 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(thread) | !isEmpty(QMAKE_WASM_TOTAL_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. - # QMAKE_WASM_TOTAL_MEMORY must be a multiple of 64KB - TOTAL_MEMORY = 1GB - !isEmpty(QMAKE_WASM_TOTAL_MEMORY) { - TOTAL_MEMORY = $$QMAKE_WASM_TOTAL_MEMORY - } - message("Setting TOTAL_MEMORY to" $$TOTAL_MEMORY) - EMCC_THREAD_LFLAGS += -s TOTAL_MEMORY=$$TOTAL_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 } - QMAKE_LFLAGS += $$EMCC_THREAD_LFLAGS - QMAKE_LFLAGS_DEBUG += $$EMCC_THREAD_LFLAGS - QMAKE_CFLAGS += $$EMCC_THREAD_LFLAGS - QMAKE_CXXFLAGS += $$EMCC_THREAD_LFLAGS + + 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_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 @@ -114,12 +156,19 @@ contains(TEMPLATE, .*app) { qtConfTest_emccVersion() -# 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/ -!isEmpty(QMAKE_WASM_SOURCE_MAP_BASE):\ - WASM_SOURCE_MAP_BASE = $$QMAKE_WASM_SOURCE_MAP_BASE -CONFIG(debug): QMAKE_LFLAGS += --source-map-base $$WASM_SOURCE_MAP_BASE +CONFIG(debug):!isEmpty(QT_WASM_SOURCE_MAP) { + + EMCC_VERSION = $$qtSystemEmccVersion() + + 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/ + !isEmpty(QT_WASM_SOURCE_MAP_BASE):\ + WASM_SOURCE_MAP_BASE = $$QT_WASM_SOURCE_MAP_BASE + QMAKE_LFLAGS += --source-map-base $$WASM_SOURCE_MAP_BASE +} + # Creates the stand-alone version of the library from bitcode !static:contains(TEMPLATE, .*lib): { |