diff options
| author | ruki <[email protected]> | 2023-09-08 10:14:22 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-09-08 10:14:22 +0800 |
| commit | 0c6cb1962f9e836eebdac1a7072dd77cd0841ba6 (patch) | |
| tree | f97bd80b77df26d17ee8d43bd97d7b041313eb33 | |
| parent | 94d538bc662124b6f4f5f06b2954bd6e2c633a6a (diff) | |
| parent | 5a4a6f05e2d59249eae9094b59c5cac6a9f145d8 (diff) | |
Merge pull request #4175 from darcy-shen/da/qtwasm2
rules for Qt 6 on WASM
| -rw-r--r-- | xmake/modules/detect/sdks/find_qt.lua | 2 | ||||
| -rw-r--r-- | xmake/platforms/wasm/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/qt/load.lua | 39 |
3 files changed, 33 insertions, 10 deletions
diff --git a/xmake/modules/detect/sdks/find_qt.lua b/xmake/modules/detect/sdks/find_qt.lua index f94f3556e..3700df53d 100644 --- a/xmake/modules/detect/sdks/find_qt.lua +++ b/xmake/modules/detect/sdks/find_qt.lua @@ -66,7 +66,7 @@ function _find_sdkdir(sdkdir, sdkver) end table.insert(subdirs, path.join(sdkver or "*", "android", "bin")) elseif is_plat("wasm") then - table.insert(subdirs, path.join(sdkver or "*", "wasm_32", "bin")) + table.insert(subdirs, path.join(sdkver or "*", "wasm_*", "bin")) else table.insert(subdirs, path.join(sdkver or "*", "*", "bin")) end diff --git a/xmake/platforms/wasm/xmake.lua b/xmake/platforms/wasm/xmake.lua index 8e794b9e7..e9c3bc1f8 100644 --- a/xmake/platforms/wasm/xmake.lua +++ b/xmake/platforms/wasm/xmake.lua @@ -28,7 +28,7 @@ platform("wasm") set_hosts("macosx", "linux", "windows", "bsd") -- set archs - set_archs("wasm32") + set_archs("wasm32", "wasm64") -- set formats set_formats("static", "lib$(name).a") diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua index 9d51dccbf..450ad2c18 100644 --- a/xmake/rules/qt/load.lua +++ b/xmake/rules/qt/load.lua @@ -254,7 +254,8 @@ function main(target, opt) -- do frameworks for qt local frameworksset = hashset.new() - for _, framework in ipairs(_get_frameworks_from_target(target)) do + local qt_frameworks = _get_frameworks_from_target(target) + for _, framework in ipairs(qt_frameworks) do -- translate qt frameworks if framework:startswith("Qt") then @@ -397,14 +398,36 @@ function main(target, opt) target:add("rpathdirs", qt.libdir) target:add("linkdirs", qt.libdir) -- add prebuilt object files in qt sdk. - -- these file is located at lib/objects-Release/xxxmodule_resources_x/.rcc/xxxmodule.cpp.o - for _, filepath in ipairs(os.files(path.join(qt.libdir, "objects-*", "*_resources_*", ".rcc", "*.o"))) do - table.insert(target:objectfiles(), filepath) + -- these files are located at lib/objects-Release/xxxmodule_resources_x/.rcc/xxxmodule.cpp.o + for _, framework in ipairs(qt_frameworks) do + local prefix = framework + if framework:startswith("Qt") then + prefix = framework:sub(3) + end + for _, filepath in ipairs(os.files(path.join(qt.libdir, "objects-*", prefix .. "_resources_*", ".rcc", "*.o"))) do + table.insert(target:objectfiles(), filepath) + end + end + target:add("ldflags", "-s FETCH=1", "-s ERROR_ON_UNDEFINED_SYMBOLS=1", "-s ALLOW_MEMORY_GROWTH=1", "--bind") + target:add("shflags", "-s FETCH=1", "-s ERROR_ON_UNDEFINED_SYMBOLS=1", "-s ALLOW_MEMORY_GROWTH=1", "--bind") + if qt_sdkver:ge("6.0") then + -- @see https://github.com/xmake-io/xmake/issues/4137 + target:add("ldflags", "-s MAX_WEBGL_VERSION=2", "-s WASM_BIGINT=1", "-s DISABLE_EXCEPTION_CATCHING=1") + target:add("ldflags", "-sASYNCIFY_IMPORTS=qt_asyncify_suspend_js,qt_asyncify_resume_js") + target:add("ldflags", "-s EXPORTED_RUNTIME_METHODS=UTF16ToString,stringToUTF16,JSEvents,specialHTMLTargets") + target:add("ldflags", "-s MODULARIZE=1", "-s EXPORT_NAME=createQtAppInstance") + target:add("shflags", "-s MAX_WEBGL_VERSION=2", "-s WASM_BIGINT=1", "-s DISABLE_EXCEPTION_CATCHING=1") + target:add("shflags", "-sASYNCIFY_IMPORTS=qt_asyncify_suspend_js,qt_asyncify_resume_js") + target:add("shflags", "-s EXPORTED_RUNTIME_METHODS=UTF16ToString,stringToUTF16,JSEvents,specialHTMLTargets") + target:add("shflags", "-s MODULARIZE=1", "-s EXPORT_NAME=createQtAppInstance") + target:set("extension", ".js") + + else + target:add("ldflags", "-s WASM=1", "-s FULL_ES2=1", "-s FULL_ES3=1", "-s USE_WEBGL2=1") + target:add("ldflags", "-s EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]") + target:add("shflags", "-s WASM=1", "-s FULL_ES2=1", "-s FULL_ES3=1", "-s USE_WEBGL2=1") + target:add("shflags", "-s EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]") end - target:add("ldflags", "-s WASM=1", "-s FETCH=1", "-s FULL_ES2=1", "-s FULL_ES3=1", "-s USE_WEBGL2=1", "--bind") - target:add("ldflags", "-s ERROR_ON_UNDEFINED_SYMBOLS=1", "-s EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]", "-s ALLOW_MEMORY_GROWTH=1") - target:add("shflags", "-s WASM=1", "-s FETCH=1", "-s FULL_ES2=1", "-s FULL_ES3=1", "-s USE_WEBGL2=1", "--bind") - target:add("shflags", "-s ERROR_ON_UNDEFINED_SYMBOLS=1", "-s EXTRA_EXPORTED_RUNTIME_METHODS=[\"UTF16ToString\",\"stringToUTF16\"]", "-s ALLOW_MEMORY_GROWTH=1") end -- is gui application? |
