diff options
| -rw-r--r-- | xmake/modules/detect/sdks/find_wdk.lua | 48 | ||||
| -rw-r--r-- | xmake/rules/wdk/load.lua | 30 |
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}) |
