summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-09-08 10:14:22 +0800
committerGitHub <[email protected]>2023-09-08 10:14:22 +0800
commit0c6cb1962f9e836eebdac1a7072dd77cd0841ba6 (patch)
treef97bd80b77df26d17ee8d43bd97d7b041313eb33
parent94d538bc662124b6f4f5f06b2954bd6e2c633a6a (diff)
parent5a4a6f05e2d59249eae9094b59c5cac6a9f145d8 (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.lua2
-rw-r--r--xmake/platforms/wasm/xmake.lua2
-rw-r--r--xmake/rules/qt/load.lua39
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?