95457ba8e7
Set QMAKE_REPONSEFILE_THRESHOLD to 1 in the WebAssembly mkspec to enforce the usage of linker response files. This fixes "The command line is too long." errors when linking user projects that depend on many libraries, for example projects using QtQuickControls2. Pick-to: 6.2 6.3 Fixes: QTBUG-100559 Change-Id: I2f03f0756c9f171bc7382940fa0f8079bdb75a00 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
90 lines
2.9 KiB
Plaintext
90 lines
2.9 KiB
Plaintext
# qmake configuration for building with emscripten
|
|
MAKEFILE_GENERATOR = UNIX
|
|
QMAKE_PLATFORM = wasm unix
|
|
|
|
include(../common/gcc-base.conf)
|
|
include(../common/clang.conf)
|
|
|
|
load(device_config)
|
|
load(emcc_ver)
|
|
|
|
# Support enabling asyncify by configuring with "-device-option QT_EMSCRIPTEN_ASYNCIFY=1"
|
|
!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, 1): {
|
|
QMAKE_CFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY
|
|
QMAKE_CXXFLAGS += -DQT_HAVE_EMSCRIPTEN_ASYNCIFY
|
|
QMAKE_LFLAGS += -s ASYNCIFY
|
|
|
|
# Emscripten recommends building with optimizations when using asyncify
|
|
# in order to reduce wasm file size, and may also generate broken wasm
|
|
# (with "wasm validation error: too many locals" type errors) if optimizations
|
|
# are omitted. Enable optimizations also for debug builds.
|
|
QMAKE_LFLAGS_DEBUG += -Os
|
|
|
|
# Declare all async functions
|
|
QMAKE_LFLAGS += -s \'ASYNCIFY_IMPORTS=[\"qt_asyncify_suspend_js\", \"qt_asyncify_resume_js\", \"emscripten_sleep\"]\'
|
|
}
|
|
}
|
|
|
|
EMCC_COMMON_LFLAGS += \
|
|
-s WASM=1 \
|
|
-s FULL_ES2=1 \
|
|
-s FULL_ES3=1 \
|
|
-s USE_WEBGL2=1 \
|
|
-s ERROR_ON_UNDEFINED_SYMBOLS=1 \
|
|
-s EXPORTED_RUNTIME_METHODS=[UTF16ToString,stringToUTF16] \
|
|
--bind \
|
|
-s FETCH=1 \
|
|
-s MODULARIZE=1 \
|
|
-s EXPORT_NAME=createQtAppInstance
|
|
|
|
# The -s arguments can also be used with release builds,
|
|
# but are here in debug for clarity.
|
|
EMCC_COMMON_LFLAGS_DEBUG = \
|
|
$$EMCC_COMMON_LFLAGS \
|
|
-s ASSERTIONS=2 \
|
|
-s DEMANGLE_SUPPORT=1 \
|
|
# -s LIBRARY_DEBUG=1 \ #print out library calls, verbose
|
|
# -s SYSCALL_DEBUG=1 \ #print out sys calls, verbose
|
|
# -s FS_LOG=1 \ #print out filesystem ops, verbose
|
|
# -s SOCKET_DEBUG \ #print out socket,network data transfer
|
|
-s GL_DEBUG=1 \
|
|
--profiling-funcs
|
|
|
|
QMAKE_LFLAGS_DEBUG += -g2
|
|
QMAKE_LFLAGS_RELEASE += -O2
|
|
|
|
QMAKE_COMPILER += emscripten
|
|
|
|
QMAKE_CC = emcc
|
|
QMAKE_CXX = em++
|
|
|
|
QMAKE_LINK = $$QMAKE_CXX
|
|
QMAKE_LINK_SHLIB = $$QMAKE_CXX
|
|
QMAKE_LINK_C = $$QMAKE_CC
|
|
QMAKE_LINK_C_SHLIB = $$QMAKE_CC
|
|
|
|
QMAKE_LIBS_THREAD = $$QMAKE_CFLAGS_THREAD
|
|
|
|
QMAKE_LFLAGS += $$EMCC_COMMON_LFLAGS
|
|
QMAKE_LFLAGS_DEBUG += $$EMCC_COMMON_LFLAGS_DEBUG
|
|
|
|
QMAKE_PREFIX_SHLIB = lib
|
|
QMAKE_EXTENSION_SHLIB = so # llvm bitcode, linked to js in post_link
|
|
QMAKE_PREFIX_STATICLIB = lib
|
|
QMAKE_EXTENSION_STATICLIB = a # llvm bitcode
|
|
|
|
QMAKE_AR = emar cqs
|
|
equals(QMAKE_HOST.os, Windows) {
|
|
QMAKE_RESPONSEFILE_THRESHOLD = 1
|
|
QMAKE_AR_CMD = \
|
|
"$(file >$(OBJECTS_DIR)/$(TARGET).rsp, $(subst \\,/,$(OBJECTS)))$$escape_expand(\\n\\t)" \
|
|
"$(AR) $(DESTDIR)$(TARGET) @$(OBJECTS_DIR)/$(TARGET).rsp"
|
|
}
|
|
|
|
QMAKE_DISTCLEAN += *.html *.js *.wasm
|
|
|
|
load(qt_config)
|