summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-06-05 00:51:03 +0800
committerruki <[email protected]>2018-06-04 23:06:19 +0800
commit1e235065e5bef8704458c0f2eb6b9ca40231c13b (patch)
treebb43789b8a7687e46ddfbd557b19e19b440820f0
parent4c84a126bbaa577bd8a023257c42ca2892f26338 (diff)
improve wdk rules
-rw-r--r--tests/projects/wdk/kmdf/ioctl/xmake.lua4
-rw-r--r--tests/projects/wdk/kmdf/serial/xmake.lua2
-rw-r--r--tests/projects/wdk/umdf/echo/xmake.lua4
-rw-r--r--tests/projects/wdk/umdf/skeleton/xmake.lua2
-rw-r--r--tests/projects/wdk/wdm/msdsm/xmake.lua2
-rw-r--r--tests/projects/wdk/wdm/perfcounters/xmake.lua2
-rw-r--r--xmake/rules/wdk/env/load.lua167
-rw-r--r--xmake/rules/wdk/env/xmake.lua32
-rw-r--r--xmake/rules/wdk/inf/xmake.lua2
-rw-r--r--xmake/rules/wdk/load.lua242
-rw-r--r--xmake/rules/wdk/tracewpp/xmake.lua2
-rw-r--r--xmake/rules/wdk/xmake.lua93
12 files changed, 264 insertions, 290 deletions
diff --git a/tests/projects/wdk/kmdf/ioctl/xmake.lua b/tests/projects/wdk/kmdf/ioctl/xmake.lua
index 6c7c6f7a7..c630367b5 100644
--- a/tests/projects/wdk/kmdf/ioctl/xmake.lua
+++ b/tests/projects/wdk/kmdf/ioctl/xmake.lua
@@ -9,7 +9,7 @@ add_includedirs(".")
target("nonpnp")
-- add rules
- add_rules("wdk.kmdf.driver")
+ add_rules("wdk.env.kmdf", "wdk.driver")
-- add flags for rule: wdk.tracewpp
add_values("wdk.tracewpp.flags", "-func:TraceEvents(LEVEL,FLAGS,MSG,...)", "-func:Hexdump((LEVEL,FLAGS,MSG,...))")
@@ -22,7 +22,7 @@ target("nonpnp")
target("app")
-- add rules
- add_rules("wdk.kmdf.binary")
+ add_rules("wdk.env.kmdf", "wdk.binary")
-- add files
add_files("exe/*.c")
diff --git a/tests/projects/wdk/kmdf/serial/xmake.lua b/tests/projects/wdk/kmdf/serial/xmake.lua
index f3b55d5d9..0a6143838 100644
--- a/tests/projects/wdk/kmdf/serial/xmake.lua
+++ b/tests/projects/wdk/kmdf/serial/xmake.lua
@@ -6,7 +6,7 @@ add_rules("mode.debug", "mode.release")
target("wdfserial")
-- add rules
- add_rules("wdk.kmdf.driver")
+ add_rules("wdk.env.kmdf", "wdk.driver")
-- add flags for rule: wdk.tracewpp
add_values("wdk.tracewpp.flags", "-func:SerialDbgPrintEx(LEVEL,FLAGS,MSG,...)")
diff --git a/tests/projects/wdk/umdf/echo/xmake.lua b/tests/projects/wdk/umdf/echo/xmake.lua
index 414c2f074..582e9ee46 100644
--- a/tests/projects/wdk/umdf/echo/xmake.lua
+++ b/tests/projects/wdk/umdf/echo/xmake.lua
@@ -9,7 +9,7 @@ add_defines("_UNICODE", "UNICODE")
target("echo")
-- add rules
- add_rules("wdk.umdf.driver")
+ add_rules("wdk.env.umdf", "wdk.driver")
-- set test sign
-- set_values("wdk.sign.mode", "test")
@@ -29,7 +29,7 @@ target("echo")
target("app")
-- add rules
- add_rules("wdk.umdf.binary")
+ add_rules("wdk.env.umdf", "wdk.binary")
-- add files
add_files("exe/*.cpp")
diff --git a/tests/projects/wdk/umdf/skeleton/xmake.lua b/tests/projects/wdk/umdf/skeleton/xmake.lua
index 75e5ec7e1..0cd653885 100644
--- a/tests/projects/wdk/umdf/skeleton/xmake.lua
+++ b/tests/projects/wdk/umdf/skeleton/xmake.lua
@@ -9,7 +9,7 @@ add_defines("_UNICODE", "UNICODE")
target("UMDFSkeleton")
-- add rules
- add_rules("wdk.umdf.driver")
+ add_rules("wdk.env.umdf", "wdk.driver")
-- add flags fro tracewpp
add_values("wdk.tracewpp.flags", "-scan:internal.h")
diff --git a/tests/projects/wdk/wdm/msdsm/xmake.lua b/tests/projects/wdk/wdm/msdsm/xmake.lua
index ea8886d83..069f69767 100644
--- a/tests/projects/wdk/wdm/msdsm/xmake.lua
+++ b/tests/projects/wdk/wdm/msdsm/xmake.lua
@@ -6,7 +6,7 @@ add_rules("mode.debug", "mode.release")
target("sampledsm")
-- add rules
- add_rules("wdk.wdm.driver")
+ add_rules("wdk.env.wdm", "wdk.driver")
-- add flags for rule: wdk.tracewpp
add_values("wdk.tracewpp.flags", "-func:TracePrint((LEVEL,FLAGS,MSG,...))")
diff --git a/tests/projects/wdk/wdm/perfcounters/xmake.lua b/tests/projects/wdk/wdm/perfcounters/xmake.lua
index fb0bc3d54..21a36ee4c 100644
--- a/tests/projects/wdk/wdm/perfcounters/xmake.lua
+++ b/tests/projects/wdk/wdm/perfcounters/xmake.lua
@@ -6,7 +6,7 @@ add_rules("mode.debug", "mode.release")
target("kcs")
-- add rules
- add_rules("wdk.wdm.driver")
+ add_rules("wdk.env.wdm", "wdk.driver")
-- add flags for rule: wdk.man
add_values("wdk.man.prefix", "Kcs")
diff --git a/xmake/rules/wdk/env/load.lua b/xmake/rules/wdk/env/load.lua
new file mode 100644
index 000000000..d36d5aa49
--- /dev/null
+++ b/xmake/rules/wdk/env/load.lua
@@ -0,0 +1,167 @@
+--!A cross-platform build utility based on Lua
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements. See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership. The ASF licenses this file
+-- to you 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 - 2018, TBOOX Open Source Group.
+--
+-- @author ruki
+-- @file load.lua
+--
+
+-- imports
+import("core.project.config")
+import("utils.os.winver", {alias = "os_winver"})
+
+-- get windows version value
+function _winver(winver)
+ return os_winver.value(winver or "") or "0x0A00"
+end
+
+-- get windows ntddi version value
+function _winver_ntddi(winver)
+ return os_winver.value_ntddi(winver or "") or "0x0A000000"
+end
+
+-- get version of the library sub-directory
+function _winver_libdir(winver)
+
+ -- ignore the subname with '_xxx'
+ winver = (winver or ""):split('_')[1]
+
+ -- make defined values
+ local vervals =
+ {
+ win81 = "winv6.3"
+ , winblue = "winv6.3"
+ , win8 = "win8"
+ , win7 = "win7"
+ }
+ return vervals[winver]
+end
+
+-- load for umdf environment
+function umdf(target)
+
+ -- get wdk
+ local wdk = target:data("wdk")
+
+ -- get arch
+ local arch = config.arch()
+
+ -- add defines
+ local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
+ local umdfver = wdk.umdfver:split('%.')
+ if arch == "x64" then
+ target:add("defines", "_WIN64", "_AMD64_", "AMD64")
+ else
+ target:add("defines", "_X86_=1", "i386=1")
+ target:add("defines", "DEPRECATE_DDK_FUNCTIONS=1", "MSC_NOOPT", "_ATL_NO_WIN_SUPPORT")
+ target:add("defines", "STD_CALL")
+ target:add("cxflags", "-Gz", {force = true})
+ end
+ target:add("defines", "UMDF_VERSION_MAJOR=" .. umdfver[1], "UMDF_VERSION_MINOR=" .. umdfver[2], "UMDF_USING_NTSTATUS")
+ target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
+ target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
+
+ -- add include directories
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "um"))
+ target:add("includedirs", path.join(wdk.includedir, "wdf", "umdf", wdk.umdfver))
+
+ -- add link directories
+ target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "um", arch))
+ target:add("linkdirs", path.join(wdk.libdir, "wdf", "umdf", arch, wdk.umdfver))
+end
+
+-- load for kmdf environment
+function kmdf(target)
+
+ -- get wdk
+ local wdk = target:data("wdk")
+
+ -- get arch
+ local arch = config.arch()
+
+ -- add defines
+ local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
+ local kmdfver = wdk.kmdfver:split('%.')
+ if arch == "x64" then
+ target:add("defines", "_WIN64", "_AMD64_", "AMD64")
+ else
+ target:add("defines", "_X86_=1", "i386=1")
+ target:add("defines", "DEPRECATE_DDK_FUNCTIONS=1", "MSC_NOOPT", "_ATL_NO_WIN_SUPPORT")
+ target:add("defines", "STD_CALL")
+ target:add("cxflags", "-Gz", {force = true})
+ end
+ target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
+ target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
+ target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
+
+ -- add include directories
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
+ if target:rule("wdk.driver") then
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km", "crt"))
+ end
+ target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
+
+ -- add link directories
+ local libdirver = _winver_libdir(winver)
+ if libdirver then
+ target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
+ end
+ target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
+ target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
+end
+
+-- load for wdm environment
+function wdm(target)
+
+ -- get wdk
+ local wdk = target:data("wdk")
+
+ -- get arch
+ local arch = config.arch()
+
+ -- add defines
+ local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
+ local kmdfver = wdk.kmdfver:split('%.')
+ if arch == "x64" then
+ target:add("defines", "_WIN64", "_AMD64_", "AMD64")
+ else
+ target:add("defines", "_X86_=1", "i386=1")
+ target:add("defines", "DEPRECATE_DDK_FUNCTIONS=1", "MSC_NOOPT", "_ATL_NO_WIN_SUPPORT")
+ target:add("defines", "STD_CALL")
+ target:add("cxflags", "-Gz", {force = true})
+ end
+ target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
+ target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
+ target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
+
+ -- add include directories
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
+ if target:rule("wdk.driver") then
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km", "crt"))
+ end
+ target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
+
+ -- add link directories
+ local libdirver = _winver_libdir(winver)
+ if libdirver then
+ target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
+ end
+ target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
+ target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
+end
diff --git a/xmake/rules/wdk/env/xmake.lua b/xmake/rules/wdk/env/xmake.lua
index 9e192cd41..c2b2642e1 100644
--- a/xmake/rules/wdk/env/xmake.lua
+++ b/xmake/rules/wdk/env/xmake.lua
@@ -67,3 +67,35 @@ rule("wdk.env")
target:data_set("wdk.cleanfiles", nil)
end)
+-- define rule: umdf
+rule("wdk.env.umdf")
+
+ -- add rules
+ add_deps("wdk.env")
+
+ -- on load
+ on_load(function (target)
+ import("load").umdf(target)
+ end)
+
+-- define rule: kmdf
+rule("wdk.env.kmdf")
+
+ -- add rules
+ add_deps("wdk.env")
+
+ -- on load
+ on_load(function (target)
+ import("load").kmdf(target)
+ end)
+
+-- define rule: wdm
+rule("wdk.env.wdm")
+
+ -- add rules
+ add_deps("wdk.env")
+
+ -- on load
+ on_load(function (target)
+ import("load").wdm(target)
+ end)
diff --git a/xmake/rules/wdk/inf/xmake.lua b/xmake/rules/wdk/inf/xmake.lua
index 60debf220..a06a21ce7 100644
--- a/xmake/rules/wdk/inf/xmake.lua
+++ b/xmake/rules/wdk/inf/xmake.lua
@@ -75,7 +75,7 @@ rule("wdk.inf")
end
local wdk = target:data("wdk")
if wdk then
- if wdk.kmdfver and (target:rule("wdk.kmdf.driver") or target:rule("wdk.kmdf.binary") or target:rule("wdk.wdm.driver") or target:rule("wdk.wdm.binary")) then
+ if wdk.kmdfver and (target:rule("wdk.env.wdm") or target:rule("wdk.env.kmdf")) then
table.insert(args, "-k")
table.insert(args, wdk.kmdfver)
elseif wdk.umdfver then
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index aa72757cd..cd71a15f7 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -26,16 +26,6 @@
import("core.project.config")
import("utils.os.winver", {alias = "os_winver"})
--- get windows version value
-function _winver(winver)
- return os_winver.value(winver or "") or "0x0A00"
-end
-
--- get windows ntddi version value
-function _winver_ntddi(winver)
- return os_winver.value_ntddi(winver or "") or "0x0A000000"
-end
-
-- get subsystem version defined value
function _winver_subsystem(winver)
@@ -54,57 +44,12 @@ function _winver_subsystem(winver)
return defvals[winver] or "10.00"
end
--- get version of the library sub-directory
-function _winver_libdir(winver)
-
- -- ignore the subname with '_xxx'
- winver = (winver or ""):split('_')[1]
-
- -- make defined values
- local vervals =
- {
- win81 = "winv6.3"
- , winblue = "winv6.3"
- , win8 = "win8"
- , win7 = "win7"
- }
- return vervals[winver]
-end
-
-- load for umdf driver
-function umdf_driver(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
+function driver_umdf(target)
-- set kind
target:set("kind", "shared")
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- local umdfver = wdk.umdfver:split('%.')
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("cxflags", "-Gz", {force = true})
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- target:add("defines", "DEPRECATE_DDK_FUNCTIONS=1", "MSC_NOOPT", "_ATL_NO_WIN_SUPPORT", "_WINDLL")
- end
- target:add("defines", "UMDF_VERSION_MAJOR=" .. umdfver[1], "UMDF_VERSION_MINOR=" .. umdfver[2], "UMDF_USING_NTSTATUS")
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "um"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "umdf", wdk.umdfver))
-
- -- add link directories
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "um", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "umdf", arch, wdk.umdfver))
-
-- add links
target:add("links", "ntdll", "OneCoreUAP", "mincore", "ucrt")
target:add("shflags", "-NODEFAULTLIB:kernel32.lib", "-NODEFAULTLIB:user32.lib", "-NODEFAULTLIB:libucrt.lib", {force = true})
@@ -126,50 +71,8 @@ function umdf_driver(target)
end
end
--- load for umdf binary
-function umdf_binary(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
-
- -- set kind
- target:set("kind", "binary")
-
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- target:add("defines", "_ATL_NO_WIN_SUPPORT", "_CRT_USE_WINAPI_PARTITION_APP")
- end
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "um"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "umdf", wdk.umdfver))
-
- -- add link directories
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "um", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "umdf", arch, wdk.umdfver))
-
- -- add links
- target:add("links", "ntdll", "OneCoreUAP", "mincore", "ucrt")
- target:add("ldflags", "-NODEFAULTLIB:kernel32.lib", "-NODEFAULTLIB:user32.lib", "-NODEFAULTLIB:libucrt.lib", {force = true})
-end
-
-- load for kmdf driver
-function kmdf_driver(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
+function driver_kmdf(target)
-- set kind
target:set("kind", "binary")
@@ -177,32 +80,6 @@ function kmdf_driver(target)
-- set filename: xxx.sys
target:set("filename", target:basename() .. ".sys")
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- local kmdfver = wdk.kmdfver:split('%.')
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("cxflags", "-Gz", {force = true})
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- end
- target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km", "crt"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-
- -- add link directories
- local libdirver = _winver_libdir(winver)
- if libdirver then
- target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
- end
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
-
-- add links
target:add("links", "BufferOverflowFastFailK", "ntoskrnl", "hal", "wmilib", "WdfLdr", "ntstrsafe", "wdmsec")
@@ -228,55 +105,8 @@ function kmdf_driver(target)
end
end
--- load for kmdf binary
-function kmdf_binary(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
-
- -- set kind
- target:set("kind", "binary")
-
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- local kmdfver = wdk.kmdfver:split('%.')
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- end
- target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2])
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-
- -- add link directories
- local libdirver = _winver_libdir(winver)
- if libdirver then
- target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
- end
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
-
- -- add links
- target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32")
- target:add("links", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "setupapi")
-end
-
-- load for wdm driver
-function wdm_driver(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
+function driver_wdm(target)
-- set kind
target:set("kind", "binary")
@@ -284,32 +114,6 @@ function wdm_driver(target)
-- set filename: xxx.sys
target:set("filename", target:basename() .. ".sys")
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- local kmdfver = wdk.kmdfver:split('%.')
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("cxflags", "-Gz", {force = true})
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- end
- target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km", "crt"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-
- -- add link directories
- local libdirver = _winver_libdir(winver)
- if libdirver then
- target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
- end
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
-
-- add links
target:add("links", "BufferOverflowFastFailK", "ntoskrnl", "hal", "wmilib", "ntstrsafe")
@@ -334,43 +138,3 @@ function wdm_driver(target)
end
end
--- load for wdm binary
-function wdm_binary(target)
-
- -- get wdk
- local wdk = target:data("wdk")
-
- -- get arch
- local arch = config.arch()
-
- -- set kind
- target:set("kind", "binary")
-
- -- add defines
- local winver = target:values("wdk.env.winver") or config.get("wdk_winver")
- local kmdfver = wdk.kmdfver:split('%.')
- if arch == "x64" then
- target:add("defines", "_WIN64", "_AMD64_", "AMD64")
- else
- target:add("defines", "_X86_=1", "i386=1", "STD_CALL")
- end
- target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2])
- target:add("defines", "WIN32_LEAN_AND_MEAN=1", "WINNT=1", "_WINDLL")
- target:add("defines", "_WIN32_WINNT=" .. _winver(winver), "WINVER=" .. _winver(winver), "NTDDI_VERSION=" .. _winver_ntddi(winver))
-
- -- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "km"))
- target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-
- -- add link directories
- local libdirver = _winver_libdir(winver)
- if libdirver then
- target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
- end
- target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "km", arch))
- target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
-
- -- add links
- target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32")
- target:add("links", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "setupapi")
-end
diff --git a/xmake/rules/wdk/tracewpp/xmake.lua b/xmake/rules/wdk/tracewpp/xmake.lua
index 46cbcfae9..c732525bb 100644
--- a/xmake/rules/wdk/tracewpp/xmake.lua
+++ b/xmake/rules/wdk/tracewpp/xmake.lua
@@ -75,7 +75,7 @@ rule("wdk.tracewpp")
-- init args
local args = {}
- if target:rule("wdk.kmdf.driver") or target:rule("wdk.wdm.driver") then
+ if target:rule("wdk.driver") and (target:rule("wdk.env.kmdf") or target:rule("wdk.env.wdm")) then
table.insert(args, "-km")
table.insert(args, "-gen:{km-WdfDefault.tpl}*.tmh")
end
diff --git a/xmake/rules/wdk/xmake.lua b/xmake/rules/wdk/xmake.lua
index 4b39b9d47..4a9adbc0d 100644
--- a/xmake/rules/wdk/xmake.lua
+++ b/xmake/rules/wdk/xmake.lua
@@ -22,37 +22,25 @@
-- @file xmake.lua
--
--- define rule: umdf driver
-rule("wdk.umdf.driver")
+-- define rule: driver
+rule("wdk.driver")
-- add rules
add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.sign", "wdk.package.cab")
-- on load
on_load(function (target)
- import("load").umdf_driver(target)
- end)
-
--- define rule: umdf binary
-rule("wdk.umdf.binary")
-
- -- add rules
- add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
- -- on load
- on_load(function (target)
- import("load").umdf_binary(target)
- end)
-
--- define rule: kmdf driver
-rule("wdk.kmdf.driver")
-
- -- add rules
- add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.sign", "wdk.package.cab")
-
- -- on load
- on_load(function (target)
- import("load").kmdf_driver(target)
+ -- load environment
+ if target:rule("wdk.env.umdf") then
+ import("load").driver_umdf(target)
+ end
+ if target:rule("wdk.env.kmdf") then
+ import("load").driver_kmdf(target)
+ end
+ if target:rule("wdk.env.wdm") then
+ import("load").driver_wdm(target)
+ end
end)
-- after build
@@ -61,46 +49,69 @@ rule("wdk.kmdf.driver")
-- imports
import("core.project.config")
- -- get wdk
- local wdk = target:data("wdk")
+ -- copy redist files for kmdf
+ if target:rule("wdk.env.kmdf") then
+
+ -- get wdk
+ local wdk = target:data("wdk")
- -- copy wdf redist dll libraries (WdfCoInstaller01011.dll, ..) to the target directory
- os.cp(path.join(wdk.sdkdir, "Redist", "wdf", config.arch(), "*.dll"), target:targetdir())
+ -- copy wdf redist dll libraries (WdfCoInstaller01011.dll, ..) to the target directory
+ os.cp(path.join(wdk.sdkdir, "Redist", "wdf", config.arch(), "*.dll"), target:targetdir())
- -- add clean files
- target:data_add("wdk.cleanfiles", os.files(path.join(target:targetdir(), "*.dll")))
+ -- add clean files
+ target:data_add("wdk.cleanfiles", os.files(path.join(target:targetdir(), "*.dll")))
+ end
end)
--- define rule: kmdf binary
-rule("wdk.kmdf.binary")
+-- define rule: binary
+rule("wdk.binary")
-- add rules
add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
-- on load
on_load(function (target)
- import("load").kmdf_binary(target)
+
+ -- set kind
+ target:set("kind", "binary")
+
+ -- add links
+ target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32")
+ target:add("links", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "setupapi")
end)
--- define rule: wdm driver
-rule("wdk.wdm.driver")
+-- define rule: static
+rule("wdk.static")
-- add rules
- add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof", "wdk.sign", "wdk.package.cab")
+ add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
-- on load
on_load(function (target)
- import("load").wdm_driver(target)
+
+ -- set kind
+ target:set("kind", "static")
+
+ -- for kernel driver
+ if target:rule("wdk.env.kmdf") or target:rule("wdk.env.wdm") then
+ -- compile as kernel driver
+ target:add("cxflags", "-kernel", {force = true})
+ end
end)
--- define rule: wdm binary
-rule("wdk.wdm.binary")
+-- define rule: shared
+rule("wdk.shared")
-- add rules
add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
-- on load
on_load(function (target)
- import("load").wdm_binary(target)
+
+ -- set kind
+ target:set("kind", "shared")
+
+ -- add links
+ target:add("links", "kernel32", "user32", "gdi32", "winspool", "comdlg32")
+ target:add("links", "advapi32", "shell32", "ole32", "oleaut32", "uuid", "odbc32", "odbccp32", "setupapi")
end)
-