summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur LAURENT <[email protected]>2025-05-10 16:36:20 +0200
committerArthur LAURENT <[email protected]>2025-05-10 16:36:20 +0200
commit221ca3c95b37338b16446349e326c3adc935ea25 (patch)
treeb82e12d0d4522eb958bdabed8142fd611a671510
parentdf0df783b8a9398ead31d38214f5d6cba9a818d5 (diff)
(rules) use values/values_set instead of data and rename windows.subsystem rule to platform.windows.subsystem
-rw-r--r--xmake/rules/qt/load.lua31
-rw-r--r--xmake/rules/qt/xmake.lua4
-rw-r--r--xmake/rules/wdk/load.lua15
-rw-r--r--xmake/rules/wdk/xmake.lua2
-rw-r--r--xmake/rules/windows/xmake.lua29
-rw-r--r--xmake/rules/winsdk/mfc/mfc.lua4
-rw-r--r--xmake/rules/winsdk/mfc/xmake.lua8
-rw-r--r--xmake/rules/winsdk/xmake.lua6
8 files changed, 39 insertions, 60 deletions
diff --git a/xmake/rules/qt/load.lua b/xmake/rules/qt/load.lua
index 9fc2919c2..7ec3c02aa 100644
--- a/xmake/rules/qt/load.lua
+++ b/xmake/rules/qt/load.lua
@@ -518,30 +518,15 @@ function main(target, opt)
-- is gui application?
if opt.gui then
- -- add windows subsystem for windows and mingw platforms
- if target:is_plat("windows") then
- target:add("defines", "_WINDOWS")
- 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
- -- maybe user will set subsystem to console
- if not subsystem then
- 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
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "windows")
+ if target:has_tool("ld", "link", "lld-link") then
+ target:add("ldflags", "-entry:mainCRTStartup", {force = true})
end
- elseif target:is_plat("mingw") then
- target:add("ldflags", "-mwindows", {force = true})
+ end
+ else
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "console")
end
end
diff --git a/xmake/rules/qt/xmake.lua b/xmake/rules/qt/xmake.lua
index 1efa129b6..1ef516793 100644
--- a/xmake/rules/qt/xmake.lua
+++ b/xmake/rules/qt/xmake.lua
@@ -67,7 +67,7 @@ rule("qt.shared")
-- define rule: qt console
rule("qt.console")
- add_deps("qt.qrc", "qt.ui", "qt.moc", "qt.ts")
+ add_deps("qt.qrc", "qt.ui", "qt.moc", "qt.ts", "platform.windows.subsystem")
-- we must set kind before target.on_load(), may we will use target in on_load()
on_load(function (target)
@@ -83,7 +83,7 @@ rule("qt.console")
-- define rule: qt widgetapp
rule("qt.widgetapp")
- add_deps("qt.ui", "qt.moc", "qt._wasm_app", "qt.qrc", "qt.ts")
+ add_deps("qt.ui", "qt.moc", "qt._wasm_app", "qt.qrc", "qt.ts", "platform.windows.subsystem")
-- we must set kind before target.on_load(), may we will use target in on_load()
on_load(function (target)
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index 8ffdab1e0..5700a5627 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -34,8 +34,9 @@ function driver_umdf(target)
-- add subsystem
local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- target:data_set("win.subsystem", "windows," .. os_winver.subsystem(winver))
- target:add("rules", "win.subsystem")
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "windows," .. os_winver.subsystem(winver))
+ end
-- set default driver entry if does not exist
local entry = false
@@ -75,8 +76,9 @@ function driver_kmdf(target)
target:add("ldflags", "-nodefaultlib", {force = true})
-- add subsystem
- target:data_set("win.subsystem", "native," .. os_winver.subsystem(winver))
- target:add("rules", "win.subsystem")
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "native," .. os_winver.subsystem(winver))
+ end
-- set default driver entry if does not exist
local entry = false
@@ -119,8 +121,9 @@ function driver_wdm(target)
target:add("ldflags", "-nodefaultlib", {force = true})
-- add subsystem
- target:data_set("win.subsystem", "native," .. os_winver.subsystem(winver))
- target:add("rules", "win.subsystem")
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "native," .. os_winver.subsystem(winver))
+ end
-- set default driver entry if does not exist
local entry = false
diff --git a/xmake/rules/wdk/xmake.lua b/xmake/rules/wdk/xmake.lua
index c71ae13bf..e2861ad5b 100644
--- a/xmake/rules/wdk/xmake.lua
+++ b/xmake/rules/wdk/xmake.lua
@@ -22,7 +22,7 @@
rule("wdk.driver")
-- add rules
- add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.tracewpp", "wdk.sign", "wdk.package.cab")
+ add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.tracewpp", "wdk.sign", "wdk.package.cab", "platform.windows.subsystem")
-- after load
after_load(function (target)
diff --git a/xmake/rules/windows/xmake.lua b/xmake/rules/windows/xmake.lua
index f02927a88..6b39ff69b 100644
--- a/xmake/rules/windows/xmake.lua
+++ b/xmake/rules/windows/xmake.lua
@@ -1,42 +1,27 @@
-rule("win.subsystem.console")
- add_deps("win.subsystem")
- on_load(function(target)
- target:data_set("win.subsystem", "console")
- end)
-
-rule("win.subsystem.windows")
- add_deps("win.subsystem")
- on_load(function(target)
- target:data_set("win.subsystem", "windows")
- end)
-
-rule("win.subsystem")
+rule("platform.windows.subsystem")
on_config("mingw", "windows", function(target)
local subsystems = {
"BOOT_APPLICATION", "CONSOLE", "EFI_APPLICATION", "EFI_BOOT_SERVICE_DRIVER", "EFI_ROM", "EFI_RUNTIME_DRIVER", "NATIVE", "POSIX", "WINDOWS"
}
- local subsystem = target:data("win.subsystem")
+ local subsystem = target:values("windows.subsystem")
local valid = false
- local startswith = string.startswith
local upper = string.upper
for _, s in ipairs(subsystems) do
- if startswith(upper(subsystem), s) then
+ if (subsystem:upper():startwiths(s)) then
valid = true
break
end
end
assert(valid, "Invalid subsystem " .. subsystem)
- local linker = target:tool("ld")
- linker = path.filename(linker)
- if startswith(linker, "clang") then
+ if target:has_tool("ld", "clang") then
target:add("ldflags", "-Wl,-subsystem:" .. subsystem, { force = true })
- elseif startswith(linker, "link") or startswith(linker, "lld-link") then
+ elseif target:has_tool("ld", "link", "lld-link") then
target:add("ldflags", "/SUBSYSTEM:" .. upper(subsystem), { force = true })
- elseif startswith(linker, "gcc") or startswith(linker, "g++") then
+ elseif target:has_tool("ld", "gcc", "g++") then
target:add("ldflags", "-Wl,-m" .. subsystem, { force = true })
- elseif startswith(linker, "ld") then
+ elseif target:has_tool("ld", "ld") then
target:add("ldflags", "-m" .. subsystem, { force = true })
end
end)
diff --git a/xmake/rules/winsdk/mfc/mfc.lua b/xmake/rules/winsdk/mfc/mfc.lua
index ebf9375f5..a5d57d713 100644
--- a/xmake/rules/winsdk/mfc/mfc.lua
+++ b/xmake/rules/winsdk/mfc/mfc.lua
@@ -87,7 +87,9 @@ function application(target, mfc_kind)
_remove_flags(target)
-- set windows subsystem
- target:add("rules", "win.subsystem.windows")
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "windows")
+ end
-- forces a link to complete even with unresolved symbols
if mfc_kind == "static" then
diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua
index bb93252d5..d0a7c4c24 100644
--- a/xmake/rules/winsdk/mfc/xmake.lua
+++ b/xmake/rules/winsdk/mfc/xmake.lua
@@ -43,8 +43,8 @@ rule("win.sdk.mfc.static")
-- define rule: the application with shared mfc libraries
rule("win.sdk.mfc.shared_app")
- -- add mfc base rule
- add_deps("win.sdk.mfc.env")
+ -- add mfc base and subsystem rule
+ add_deps("win.sdk.mfc.env", "platform.windows.subsystem")
-- after load
after_load(function (target)
@@ -54,8 +54,8 @@ rule("win.sdk.mfc.shared_app")
-- define rule: the application with static mfc libraries
rule("win.sdk.mfc.static_app")
- -- add mfc base rule
- add_deps("win.sdk.mfc.env")
+ -- add mfc base and subsystem rule
+ add_deps("win.sdk.mfc.env", "platform.windows.subsystem")
-- after load
after_load(function (target)
diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua
index 0f42cf27a..3e21df3a4 100644
--- a/xmake/rules/winsdk/xmake.lua
+++ b/xmake/rules/winsdk/xmake.lua
@@ -30,9 +30,13 @@ rule("win.sdk.application")
end)
-- set subsystem: windows
- add_deps("win.subsystem.windows")
+ add_deps("platform.windows.subsystem")
after_load(function (target)
+ -- set windows subsystem
+ if not target:values("windows.subsystem") then
+ target:values_set("windows.subsystem", "windows")
+ end
-- add links
target:add("syslinks", "kernel32", "user32", "gdi32", "winspool", "comdlg32", "advapi32")