summaryrefslogtreecommitdiff
path: root/xmake/rules
diff options
context:
space:
mode:
authorruki <[email protected]>2018-05-17 22:53:14 +0800
committerruki <[email protected]>2018-05-17 11:19:28 +0800
commit344d26e6176003b72e8af45ff9202b2f7d11d3dc (patch)
tree904de04707b7b8e144046d7f9416e6e4cebba6e9 /xmake/rules
parent9a143be04c04ab253fc31776ab740f1ccd42e04d (diff)
add wdk.wdm rules
Diffstat (limited to 'xmake/rules')
-rw-r--r--xmake/rules/wdk/inf/xmake.lua2
-rw-r--r--xmake/rules/wdk/load.lua89
-rw-r--r--xmake/rules/wdk/tracewpp/xmake.lua2
-rw-r--r--xmake/rules/wdk/xmake.lua23
4 files changed, 114 insertions, 2 deletions
diff --git a/xmake/rules/wdk/inf/xmake.lua b/xmake/rules/wdk/inf/xmake.lua
index 83d46db8e..7c3e37790 100644
--- a/xmake/rules/wdk/inf/xmake.lua
+++ b/xmake/rules/wdk/inf/xmake.lua
@@ -72,7 +72,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")) 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
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 3e8b54a9c..6af486a12 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -197,3 +197,92 @@ function kmdf_binary(target)
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")
+
+ -- set kind
+ target:set("kind", "binary")
+
+ -- set filename: xxx.sys
+ target:set("filename", target:basename() .. ".sys")
+
+ -- add defines
+ local arch = config.arch()
+ 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", "WIN32_LEAN_AND_MEAN=1", "_WIN32_WINNT=0x0A00", "WINVER=0x0A00", "WINNT=1", "NTDDI_VERSION=0x0A000004", "_WINDLL")
+ target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
+
+ -- 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
+ 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")
+
+ -- compile as kernel driver
+ target:add("cxflags", "-kernel", {force = true})
+ target:add("ldflags", "-kernel", "-driver", {force = true})
+
+ -- set subsystem: native, TODO 10.00
+ target:add("ldflags", "-subsystem:native,10.00", {force = true})
+
+ -- set default driver entry if does not exist
+ local entry = false
+ for _, ldflag in ipairs(target:get("ldflags")) do
+ ldflag = ldflag:lower()
+ if ldflag:find("[/%-]entry:") then
+ entry = true
+ break
+ end
+ end
+ if not entry then
+ target:add("ldflags", "-entry:GsDriverEntry" .. (is_arch("x86") and "@8" or ""), {force = true})
+ end
+end
+
+-- load for wdm binary
+function wdm_binary(target)
+
+ -- get wdk
+ local wdk = target:data("wdk")
+
+ -- set kind
+ target:set("kind", "binary")
+
+ -- add defines
+ local arch = config.arch()
+ 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", "WIN32_LEAN_AND_MEAN=1", "_WIN32_WINNT=0x0A00", "WINVER=0x0A00", "WINNT=1", "NTDDI_VERSION=0x0A000004", "_WINDLL")
+ target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2])
+
+ -- 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
+ 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 382669584..1d86d3751 100644
--- a/xmake/rules/wdk/tracewpp/xmake.lua
+++ b/xmake/rules/wdk/tracewpp/xmake.lua
@@ -72,7 +72,7 @@ rule("wdk.tracewpp")
-- init args
local args = {}
- if target:rule("wdk.kmdf.driver") then
+ if target:rule("wdk.kmdf.driver") or target:rule("wdk.wdm.driver") 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 2415e17e7..95e9b2a78 100644
--- a/xmake/rules/wdk/xmake.lua
+++ b/xmake/rules/wdk/xmake.lua
@@ -82,3 +82,26 @@ rule("wdk.kmdf.binary")
target:data_add("wdk.cleanfiles", os.files(path.join(target:targetdir(), "*.dll")))
end)
+
+-- define rule: wdm driver
+rule("wdk.wdm.driver")
+
+ -- add rules
+ add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
+
+ -- on load
+ on_load(function (target)
+ import("load").wdm_driver(target)
+ end)
+
+-- define rule: wdm binary
+rule("wdk.wdm.binary")
+
+ -- add rules
+ add_deps("wdk.inf", "wdk.man", "wdk.mc", "wdk.mof")
+
+ -- on load
+ on_load(function (target)
+ import("load").wdm_binary(target)
+ end)
+