diff options
| author | Arthur LAURENT <[email protected]> | 2025-05-11 16:14:15 +0200 |
|---|---|---|
| committer | Arthur LAURENT <[email protected]> | 2025-05-11 16:14:15 +0200 |
| commit | 362e731a904975eefbc337ef0a8cc3562d1ae6e8 (patch) | |
| tree | 7dea4c947302141ac109ffadfc7aecca3922bb95 | |
| parent | 221ca3c95b37338b16446349e326c3adc935ea25 (diff) | |
(rules) move platform.windows.subsystem rule to its right directory and add it to platform.windows
| -rw-r--r-- | xmake/rules/platform/windows/subsystem/xmake.lua | 51 | ||||
| -rw-r--r-- | xmake/rules/platform/xmake.lua | 9 | ||||
| -rw-r--r-- | xmake/rules/qt/xmake.lua | 4 | ||||
| -rw-r--r-- | xmake/rules/wdk/xmake.lua | 2 | ||||
| -rw-r--r-- | xmake/rules/windows/xmake.lua | 27 | ||||
| -rw-r--r-- | xmake/rules/winsdk/mfc/xmake.lua | 8 | ||||
| -rw-r--r-- | xmake/rules/winsdk/xmake.lua | 3 |
7 files changed, 63 insertions, 41 deletions
diff --git a/xmake/rules/platform/windows/subsystem/xmake.lua b/xmake/rules/platform/windows/subsystem/xmake.lua new file mode 100644 index 000000000..a1cc9138c --- /dev/null +++ b/xmake/rules/platform/windows/subsystem/xmake.lua @@ -0,0 +1,51 @@ +--!A cross-platform build utility based on Lua +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- +-- Copyright (C) 2015-present, TBOOX Open Source Group. +-- +-- @author ruki, Arthapz +-- @file xmake.lua +-- + +-- define rule: subsystem +-- set any of "boot_application" "console" "efi_application" "efi_boot_service_driver" "efi_rom" "efi_runtime_driver" "native" "posix" "windows" +-- with target:set_values("windows.subsystem", <your value>) and the rule will pass the proper flag to the linker +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:values("windows.subsystem") + if subsystem then + local valid = false + for _, s in ipairs(subsystems) do + if subsystem:upper():startwiths(s) then + valid = true + break + end + end + assert(valid, "Invalid subsystem " .. subsystem) + + if target:has_tool("ld", "clang") then + target:add("ldflags", "-Wl,-subsystem:" .. subsystem, { force = true }) + elseif target:has_tool("ld", "link", "lld-link") then + target:add("ldflags", "/SUBSYSTEM:" .. upper(subsystem), { force = true }) + elseif target:has_tool("ld", "gcc", "g++") then + target:add("ldflags", "-Wl,-m" .. subsystem, { force = true }) + elseif target:has_tool("ld", "ld") then + target:add("ldflags", "-m" .. subsystem, { force = true }) + end + end + end) diff --git a/xmake/rules/platform/xmake.lua b/xmake/rules/platform/xmake.lua index 0cf18af90..ee2afaaa2 100644 --- a/xmake/rules/platform/xmake.lua +++ b/xmake/rules/platform/xmake.lua @@ -19,12 +19,13 @@ -- rule("platform.wasm") - add_deps("platform.wasm.preloadfiles") - add_deps("platform.wasm.installfiles") + add_deps("platform.wasm.preloadfiles", + "platform.wasm.installfiles") rule("platform.windows") - add_deps("platform.windows.def") - add_deps("platform.windows.idl") + add_deps("platform.windows.def", + "platform.windows.idl", + "platform.windows.subsystem") if is_host("windows") then add_deps("platform.windows.manifest") end diff --git a/xmake/rules/qt/xmake.lua b/xmake/rules/qt/xmake.lua index 1ef516793..1efa129b6 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", "platform.windows.subsystem") + add_deps("qt.qrc", "qt.ui", "qt.moc", "qt.ts") -- 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", "platform.windows.subsystem") + add_deps("qt.ui", "qt.moc", "qt._wasm_app", "qt.qrc", "qt.ts") -- 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/xmake.lua b/xmake/rules/wdk/xmake.lua index e2861ad5b..c71ae13bf 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", "platform.windows.subsystem") + add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.tracewpp", "wdk.sign", "wdk.package.cab") -- after load after_load(function (target) diff --git a/xmake/rules/windows/xmake.lua b/xmake/rules/windows/xmake.lua deleted file mode 100644 index 6b39ff69b..000000000 --- a/xmake/rules/windows/xmake.lua +++ /dev/null @@ -1,27 +0,0 @@ -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:values("windows.subsystem") - local valid = false - local upper = string.upper - for _, s in ipairs(subsystems) do - if (subsystem:upper():startwiths(s)) then - valid = true - break - end - end - assert(valid, "Invalid subsystem " .. subsystem) - - if target:has_tool("ld", "clang") then - target:add("ldflags", "-Wl,-subsystem:" .. subsystem, { force = true }) - elseif target:has_tool("ld", "link", "lld-link") then - target:add("ldflags", "/SUBSYSTEM:" .. upper(subsystem), { force = true }) - elseif target:has_tool("ld", "gcc", "g++") then - target:add("ldflags", "-Wl,-m" .. subsystem, { force = true }) - elseif target:has_tool("ld", "ld") then - target:add("ldflags", "-m" .. subsystem, { force = true }) - end - end) diff --git a/xmake/rules/winsdk/mfc/xmake.lua b/xmake/rules/winsdk/mfc/xmake.lua index d0a7c4c24..bb93252d5 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 and subsystem rule - add_deps("win.sdk.mfc.env", "platform.windows.subsystem") + -- add mfc base rule + add_deps("win.sdk.mfc.env") -- 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 and subsystem rule - add_deps("win.sdk.mfc.env", "platform.windows.subsystem") + -- add mfc base rule + add_deps("win.sdk.mfc.env") -- after load after_load(function (target) diff --git a/xmake/rules/winsdk/xmake.lua b/xmake/rules/winsdk/xmake.lua index 3e21df3a4..04814653c 100644 --- a/xmake/rules/winsdk/xmake.lua +++ b/xmake/rules/winsdk/xmake.lua @@ -29,9 +29,6 @@ rule("win.sdk.application") target:set("kind", "binary") end) - -- set subsystem: windows - add_deps("platform.windows.subsystem") - after_load(function (target) -- set windows subsystem if not target:values("windows.subsystem") then |
