diff options
| author | Arthur LAURENT <[email protected]> | 2025-05-10 16:36:20 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2025-05-10 16:36:20 +0200 |
| commit | 221ca3c95b37338b16446349e326c3adc935ea25 (patch) | |
| tree | b82e12d0d4522eb958bdabed8142fd611a671510 | |
| parent | df0df783b8a9398ead31d38214f5d6cba9a818d5 (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.lua | 31 | ||||
| -rw-r--r-- | xmake/rules/qt/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/rules/wdk/load.lua | 15 | ||||
| -rw-r--r-- | xmake/rules/wdk/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/windows/xmake.lua | 29 | ||||
| -rw-r--r-- | xmake/rules/winsdk/mfc/mfc.lua | 4 | ||||
| -rw-r--r-- | xmake/rules/winsdk/mfc/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/rules/winsdk/xmake.lua | 6 |
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") |
