summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-04-28 22:56:45 +0800
committerruki <[email protected]>2018-04-28 22:56:45 +0800
commite2146da9cfcad7d53ab330252ebc74e4093b41fa (patch)
treea1a2e1525bb485f112421894b1c476d758179904
parentcc90fd75c503493fdced6c7acce517e6874f44b8 (diff)
find umdf and kmdf version
-rw-r--r--xmake/modules/detect/sdks/find_wdk.lua48
-rw-r--r--xmake/rules/wdk/load.lua30
2 files changed, 64 insertions, 14 deletions
diff --git a/xmake/modules/detect/sdks/find_wdk.lua b/xmake/modules/detect/sdks/find_wdk.lua
index 401346367..dae209737 100644
--- a/xmake/modules/detect/sdks/find_wdk.lua
+++ b/xmake/modules/detect/sdks/find_wdk.lua
@@ -43,6 +43,46 @@ function _find_sdkdir(sdkdir)
return sdkdir
end
+-- find umdf version
+function _find_umdfver(libdir, includedir)
+
+ -- find versions
+ local versions = {}
+ for _, p in ipairs(os.files(path.join(includedir, "wdf", "umdf", "**", "wdf.h"))) do
+ table.insert(versions, path.filename(path.directory(p)))
+ end
+
+ -- find version
+ local arch = config.arch()
+ if arch then
+ for _, ver in ipairs(versions) do
+ if os.isfile(path.join(libdir, "wdf", "umdf", arch, ver, "WdfDriverStubUm.lib")) then
+ return ver
+ end
+ end
+ end
+end
+
+-- find kmdf version
+function _find_kmdfver(libdir, includedir)
+
+ -- find versions
+ local versions = {}
+ for _, p in ipairs(os.files(path.join(includedir, "wdf", "kmdf", "**", "wdf.h"))) do
+ table.insert(versions, path.filename(path.directory(p)))
+ end
+
+ -- find version
+ local arch = config.arch()
+ if arch then
+ for _, ver in ipairs(versions) do
+ if os.isfile(path.join(libdir, "wdf", "kmdf", arch, ver, "wdfdriverentry.lib")) then
+ return ver
+ end
+ end
+ end
+end
+
-- find WDK toolchains
function _find_wdk(sdkdir, sdkver)
@@ -78,8 +118,14 @@ function _find_wdk(sdkdir, sdkver)
-- get the include directory
local includedir = path.join(sdkdir, "Include")
+ -- get umdf version
+ local umdfver = _find_umdfver(libdir, includedir)
+
+ -- get kmdf version
+ local kmdfver = _find_kmdfver(libdir, includedir)
+
-- get toolchains
- return {sdkdir = sdkdir, bindir = bindir, libdir = libdir, includedir = includedir, sdkver = sdkver}
+ return {sdkdir = sdkdir, bindir = bindir, libdir = libdir, includedir = includedir, sdkver = sdkver, umdfver = umdfver, kmdfver = kmdfver}
end
-- find WDK toolchains
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index 0a1bee1d2..d91d70605 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -31,28 +31,32 @@ function _load_for_umdf(target, wdk, arch, kind)
-- add defines
target:add("defines", "WIN32_LEAN_AND_MEAN=1", "_WIN32_WINNT=0x0A00", "WINVER=0x0A00", "WINNT=1", "NTDDI_VERSION=0x0A000004", "_WINDLL")
- target:add("defines", "UMDF_VERSION_MINOR=15", "UMDF_VERSION_MAJOR=2", "UMDF_USING_NTSTATUS")
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
end
-- add include directories
- target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "um"))
- local includedir = find_path("wdf.h", path.join(wdk.includedir, "wdf", "umdf", "**"))
- if includedir then
- target:add("includedirs", includedir)
- end
-
- -- add link directories
target:add("linkdirs", path.join(wdk.libdir, wdk.sdkver, "um", arch))
- for _, dir in ipairs(os.dirs(path.join(wdk.libdir, "wdf", "umdf", arch, "*"))) do
- target:add("linkdirs", dir)
- break
- end
+ target:add("includedirs", path.join(wdk.includedir, wdk.sdkver, "um"))
- -- add links
+ -- add link and include directories for umdf driver
if kind == "shared" then
+
+ -- check umdf version
+ assert(wdk.umdfver, "umdf version not found!")
+
+ -- add include directories
+ target:add("includedirs", path.join(wdk.includedir, "wdf", "umdf", wdk.umdfver))
+
+ -- add link directories
+ target:add("linkdirs", path.join(wdk.libdir, "wdf", "umdf", arch, wdk.umdfver))
+
+ -- add links
target:add("links", "WdfDriverStubUm")
+
+ -- add defines
+ local umdfver = wdk.umdfver:split('%.')
+ target:add("defines", "UMDF_VERSION_MAJOR=" .. umdfver[1], "UMDF_VERSION_MINOR=" .. umdfver[2], "UMDF_USING_NTSTATUS")
end
target:add("links", "ntdll", "OneCoreUAP", "mincore", "ucrt")
target:add("ldflags", "-NODEFAULTLIB:kernel32.lib", "-NODEFAULTLIB:user32.lib", "-NODEFAULTLIB:libucrt.lib", {force = true})