summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-05-09 17:04:13 +0200
committerArthur LAURENT <[email protected]>2025-05-09 17:04:13 +0200
commit0b5e5a641897f1de3e6c1ff429f19a2baa31ce8f (patch)
tree899fcca87ce7ce0972b9240e2b09c9af5364bf35
parent7d1f8a065d1eb5c886016ab5af201e086c9c5f67 (diff)
(rules) update rules that set subsystem manually to use new subsystem rule
-rw-r--r--xmake/rules/qt/load.lua9
-rw-r--r--xmake/rules/wdk/load.lua9
-rw-r--r--xmake/rules/winsdk/mfc/mfc.lua2
-rw-r--r--xmake/rules/winsdk/xmake.lua22
4 files changed, 17 insertions, 25 deletions
diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua
index 0c7b68d71..9fc2919c2 100644
--- a/xmake/rules/qt/load.lua
+++ b/xmake/rules/qt/load.lua
@@ -518,7 +518,7 @@ function main(target, opt)
-- is gui application?
if opt.gui then
- -- add -subsystem:windows for windows platform
+ -- add windows subsystem for windows and mingw platforms
if target:is_plat("windows") then
target:add("defines", "_WINDOWS")
local subsystem = false
@@ -533,7 +533,12 @@ function main(target, opt)
end
-- maybe user will set subsystem to console
if not subsystem then
- target:add("ldflags", "-subsystem:windows", "-entry:mainCRTStartup", {force = true})
+ target:add("rules", "win.subsystem.windows")
+ local linker = target:tool("ld")
+ linker = path.filename(linker)
+ if linker:startswith("link") or linker:startswith("lld-link") then
+ target:add("ldflags", "-entry:mainCRTStartup", {force = true})
+ end
end
elseif target:is_plat("mingw") then
target:add("ldflags", "-mwindows", {force = true})
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index 62cf99467..8ffdab1e0 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -34,7 +34,8 @@ function driver_umdf(target)
-- add subsystem
local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- target:add("shflags", "-subsystem:windows," .. os_winver.subsystem(winver), {force = true})
+ target:data_set("win.subsystem", "windows," .. os_winver.subsystem(winver))
+ target:add("rules", "win.subsystem")
-- set default driver entry if does not exist
local entry = false
@@ -74,7 +75,8 @@ function driver_kmdf(target)
target:add("ldflags", "-nodefaultlib", {force = true})
-- add subsystem
- target:add("ldflags", "-subsystem:native," .. os_winver.subsystem(winver), {force = true})
+ target:data_set("win.subsystem", "native," .. os_winver.subsystem(winver))
+ target:add("rules", "win.subsystem")
-- set default driver entry if does not exist
local entry = false
@@ -117,7 +119,8 @@ function driver_wdm(target)
target:add("ldflags", "-nodefaultlib", {force = true})
-- add subsystem
- target:add("ldflags", "-subsystem:native," .. os_winver.subsystem(winver), {force = true})
+ target:data_set("win.subsystem", "native," .. os_winver.subsystem(winver))
+ target:add("rules", "win.subsystem")
-- set default driver entry if does not exist
local entry = false
diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua
index 69b4f9eff..ebf9375f5 100644
--- a/xmake/rules/winsdk/mfc/mfc.lua
+++ b/xmake/rules/winsdk/mfc/mfc.lua
@@ -87,7 +87,7 @@ function application(target, mfc_kind)
_remove_flags(target)
-- set windows subsystem
- target:add("ldflags", "-subsystem:windows", {force = true})
+ target:add("rules", "win.subsystem.windows")
-- forces a link to complete even with unresolved symbols
if mfc_kind == "static" then
diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua
index 6461c4eca..0f42cf27a 100644
--- a/xmake/rules/winsdk/xmake.lua
+++ b/xmake/rules/winsdk/xmake.lua
@@ -29,26 +29,10 @@ rule("win.sdk.application")
target:set("kind", "binary")
end)
- after_load(function (target)
+ -- set subsystem: windows
+ add_deps("win.subsystem.windows")
- -- set subsystem: windows
- if target:is_plat("mingw") then
- target:add("ldflags", "-mwindows", {force = true})
- else
- local subsystem = false
- for _, ldflag in ipairs(target:get("ldflags")) do
- if type(ldflag) == "string" then
- ldflag = ldflag:lower()
- if ldflag:find("[/%-]subsystem:") then
- subsystem = true
- break
- end
- end
- end
- if not subsystem then
- target:add("ldflags", "-subsystem:windows", {force = true, tools = {"link"}})
- end
- end
+ after_load(function (target)
-- add links
target:add("syslinks", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "advapi32")