summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xmake/modules/utils/os/winver.lua62
-rw-r--r--xmake/rules/wdk/load.lua81
2 files changed, 102 insertions, 41 deletions
diff --git a/xmake/modules/utils/os/winver.lua b/xmake/modules/utils/os/winver.lua
index 8e8b93253..1579b4563 100644
--- a/xmake/modules/utils/os/winver.lua
+++ b/xmake/modules/utils/os/winver.lua
@@ -22,6 +22,68 @@
-- @file winver.lua
--
+-- get windows version value from name
+--
+-- reference: https://msdn.microsoft.com/en-us/library/windows/desktop/aa383745(v=vs.85).aspx
+--
+function value(name)
+
+ -- init values
+ _g.values = _g.values or
+ {
+ nt4 = "0x0400"
+ , win2k = "0x0500"
+ , winxp = "0x0501"
+ , ws03 = "0x0502"
+ , win6 = "0x0600"
+ , vista = "0x0600"
+ , ws08 = "0x0600"
+ , longhorn = "0x0600"
+ , win7 = "0x0601"
+ , win8 = "0x0602"
+ , winblue = "0x0603"
+ , win81 = "0x0603"
+ , win10 = "0x0A00"
+ }
+
+ -- ignore the subname with '_xxx'
+ name = name:split('_')[1]
+
+ -- get value
+ return _g.values[name]
+end
+
+-- get ntddi value from name
+function value_ntddi(name)
+
+ -- init subvalues
+ _g.subvalues = _g.subvalues or
+ {
+ sp1 = "0100"
+ , sp2 = "0200"
+ , sp3 = "0300"
+ , sp4 = "0400"
+ , th2 = "0001"
+ , rs1 = "0002"
+ , rs2 = "0003"
+ , rs3 = "0004"
+ }
+
+ -- get subvalue
+ local subvalue = nil
+ local subname = name:split('_')[2]
+ if subname then
+ subvalue = _g.subvalues[subname]
+ end
+
+ -- get value
+ local val = value(name)
+ if val then
+ val = val .. (subvalue or "0000")
+ end
+ return val
+end
+
-- get windows system version
--
-- $ xmake l utils.os.winver
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index f1690ea90..6a597aeed 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -24,46 +24,51 @@
-- imports
import("core.project.config")
+import("utils.os.winver", {alias = "os_winver"})
--- get windows version defined value
-function _winver_defval(winver)
+-- get windows version value
+function _winver(winver)
+ return os_winver.value(winver or "") or "0x0A00"
+end
- -- make defined values
- local defvals =
- {
- ["10"] = "0x0A00"
- , ["8.1"] = "0x0603"
- , ["8"] = "0x0602"
- , ["7"] = "0x0601"
- }
- return defvals[winver or ""] or "0x0A00"
+-- 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 _subsystem_verval(winver)
+function _winver_subsystem(winver)
+
+ -- ignore the subname with '_xxx'
+ winver = (winver or ""):split('_')[1]
-- make defined values
local defvals =
{
- ["10"] = "10.00"
- , ["8.1"] = "6.03"
- , ["8"] = "6.02"
- , ["7"] = "6.01"
+ win10 = "10.00"
+ , win81 = "6.03"
+ , winblue = "6.03"
+ , win8 = "6.02"
+ , win7 = "6.01"
}
- return defvals[winver or ""] or "10.00"
+ return defvals[winver] or "10.00"
end
-- get version of the library sub-directory
-function _libdir_verval(winver)
+function _winver_libdir(winver)
+
+ -- ignore the subname with '_xxx'
+ winver = (winver or ""):split('_')[1]
-- make defined values
local vervals =
{
- ["8.1"] = "winv6.3"
- , ["8"] = "win8"
- , ["7"] = "win7"
+ win81 = "winv6.3"
+ , winblue = "winv6.3"
+ , win8 = "win8"
+ , win7 = "win7"
}
- return vervals[winver or ""]
+ return vervals[winver]
end
-- load for umdf driver
@@ -80,7 +85,6 @@ function umdf_driver(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
local umdfver = wdk.umdfver:split('%.')
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
@@ -91,7 +95,7 @@ function umdf_driver(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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"))
@@ -106,7 +110,7 @@ function umdf_driver(target)
target:add("shflags", "-NODEFAULTLIB:kernel32.lib", "-NODEFAULTLIB:user32.lib", "-NODEFAULTLIB:libucrt.lib", {force = true})
-- add subsystem
- target:add("shflags", "-subsystem:windows," .. _subsystem_verval(winver), {force = true})
+ target:add("shflags", "-subsystem:windows," .. _winver_subsystem(winver), {force = true})
-- set default driver entry if does not exist
local entry = false
@@ -136,7 +140,6 @@ function umdf_binary(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
else
@@ -144,7 +147,7 @@ function umdf_binary(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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"))
@@ -176,7 +179,6 @@ function kmdf_driver(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
local kmdfver = wdk.kmdfver:split('%.')
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
@@ -186,7 +188,7 @@ function kmdf_driver(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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"))
@@ -194,7 +196,7 @@ function kmdf_driver(target)
target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-- add link directories
- local libdirver = _libdir_verval(winver)
+ local libdirver = _winver_libdir(winver)
if libdirver then
target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
end
@@ -209,7 +211,7 @@ function kmdf_driver(target)
target:add("ldflags", "-kernel", "-driver", {force = true})
-- add subsystem
- target:add("ldflags", "-subsystem:native," .. _subsystem_verval(winver), {force = true})
+ target:add("ldflags", "-subsystem:native," .. _winver_subsystem(winver), {force = true})
-- set default driver entry if does not exist
local entry = false
@@ -240,7 +242,6 @@ function kmdf_binary(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
local kmdfver = wdk.kmdfver:split('%.')
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
@@ -249,14 +250,14 @@ function kmdf_binary(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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 = _libdir_verval(winver)
+ local libdirver = _winver_libdir(winver)
if libdirver then
target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
end
@@ -285,7 +286,6 @@ function wdm_driver(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
local kmdfver = wdk.kmdfver:split('%.')
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
@@ -295,7 +295,7 @@ function wdm_driver(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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"))
@@ -303,7 +303,7 @@ function wdm_driver(target)
target:add("includedirs", path.join(wdk.includedir, "wdf", "kmdf", wdk.kmdfver))
-- add link directories
- local libdirver = _libdir_verval(winver)
+ local libdirver = _winver_libdir(winver)
if libdirver then
target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
end
@@ -318,7 +318,7 @@ function wdm_driver(target)
target:add("ldflags", "-kernel", "-driver", {force = true})
-- add subsystem
- target:add("ldflags", "-subsystem:native," .. _subsystem_verval(winver), {force = true})
+ target:add("ldflags", "-subsystem:native," .. _winver_subsystem(winver), {force = true})
-- set default driver entry if does not exist
local entry = false
@@ -348,7 +348,6 @@ function wdm_binary(target)
-- add defines
local winver = target:values("wdk.env.winver")
- local verdef = _winver_defval(winver)
local kmdfver = wdk.kmdfver:split('%.')
if arch == "x64" then
target:add("defines", "_WIN64", "_AMD64_", "AMD64")
@@ -357,14 +356,14 @@ function wdm_binary(target)
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=" .. verdef, "WINVER=" .. verdef, "NTDDI_VERSION=" .. verdef .. "0000")
+ 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 = _libdir_verval(winver)
+ local libdirver = _winver_libdir(winver)
if libdirver then
target:add("linkdirs", path.join(wdk.libdir, libdirver, "km", arch))
end