22c1e10e19
On Windows we hit the command line length limit when building the wasm port of Qt. We must not pass the list of object files directly to emar, but write a response file which is then passed via the @ parameter. Fixes: QTBUG-75257 Change-Id: Id518fd81325716b8efaba29f495568a9a3e34be4 Reviewed-by: Kai Koehne <kai.koehne@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
106 lines
3.1 KiB
Plaintext
106 lines
3.1 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)
|
|
|
|
# Support setting WASM_OBJECT_FILES with -device-option WASM_OBJECT_FILES=1
|
|
!isEmpty(WASM_OBJECT_FILES): {
|
|
!equals(WASM_OBJECT_FILES, 1):!equals(WASM_OBJECT_FILES, 0): \
|
|
message(Error: The value for WASM_OBJECT_FILES must be 0 or 1)
|
|
QMAKE_CFLAGS += -s WASM_OBJECT_FILES=$$WASM_OBJECT_FILES
|
|
QMAKE_CXXFLAGS += -s WASM_OBJECT_FILES=$$WASM_OBJECT_FILES
|
|
QMAKE_LFLAGS += -s WASM_OBJECT_FILES=$$WASM_OBJECT_FILES
|
|
}
|
|
|
|
EMTERP_FLAGS = \
|
|
-s EMTERPRETIFY=1 \
|
|
-s EMTERPRETIFY_ASYNC=1 \
|
|
-s \"EMTERPRETIFY_FILE=\'data.binary\'\" \
|
|
-s ASSERTIONS=1 \
|
|
--profiling-funcs
|
|
|
|
EMCC_COMMON_LFLAGS = \
|
|
-s WASM=1 \
|
|
-s FULL_ES2=1 \
|
|
-s USE_WEBGL2=1 \
|
|
-s NO_EXIT_RUNTIME=0 \
|
|
-s ERROR_ON_UNDEFINED_SYMBOLS=1 \
|
|
--bind \
|
|
-s \"BINARYEN_TRAP_MODE=\'clamp\'\"
|
|
|
|
# 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
|
|
|
|
# Set up debug/optimization flags
|
|
QMAKE_CXXFLAGS_RELEASE -= -O2
|
|
QMAKE_CFLAGS_RELEASE -= -O2
|
|
equals(WASM_OBJECT_FILES, 1) {
|
|
QMAKE_LFLAGS_DEBUG += -g
|
|
|
|
QMAKE_CXXFLAGS_RELEASE += -O3
|
|
QMAKE_CFLAGS_RELEASE += -O3
|
|
QMAKE_LFLAGS_RELEASE += -O3
|
|
QMAKE_CFLAGS_OPTIMIZE += -O3
|
|
QMAKE_CFLAGS_OPTIMIZE_FULL += -Oz
|
|
} else {
|
|
# Practical debugging setup:
|
|
# "-g4" preserves function names for stack traces
|
|
# "-Os" produces reasonably sized binaries
|
|
QMAKE_CFLAGS_DEBUG -= -g
|
|
QMAKE_CXXFLAGS_DEBUG -= -g
|
|
QMAKE_CFLAGS_DEBUG += -Os -g4
|
|
QMAKE_CXXFLAGS_DEBUG += -Os -g4
|
|
QMAKE_LFLAGS_DEBUG += -Os -g4
|
|
|
|
QMAKE_CXXFLAGS_RELEASE += -O3
|
|
QMAKE_CFLAGS_RELEASE += -O3
|
|
QMAKE_LFLAGS_RELEASE += -O3
|
|
QMAKE_CFLAGS_OPTIMIZE += -O3
|
|
QMAKE_CFLAGS_OPTIMIZE_FULL += -Oz
|
|
}
|
|
|
|
|
|
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_AR_CMD = \
|
|
"$(file >$(OBJECTS_DIR)/$(TARGET).rsp, $(OBJECTS))$$escape_expand(\\n\\t)" \
|
|
"$(AR) $(DESTDIR)$(TARGET) @$(OBJECTS_DIR)/$(TARGET).rsp"
|
|
}
|
|
|
|
QMAKE_DISTCLEAN += *.html *.js *.wasm
|
|
|
|
load(qt_config)
|