diff options
| author | ruki <[email protected]> | 2018-09-02 22:12:32 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-09-02 22:12:32 +0800 |
| commit | 3b7cbb55f26f2beff05c0c803ee20d27712a15ba (patch) | |
| tree | d7dce23a9ddf04f0c33fd0293a1fb07a996028dc | |
| parent | d54f54c0e7f90d8eade621f102d18938cd153f5b (diff) | |
fix wdk rule bug
| -rw-r--r-- | CHANGELOG.md | 2 | ||||
| -rw-r--r-- | xmake/modules/os/winver.lua | 26 | ||||
| -rw-r--r-- | xmake/rules/wdk/load.lua | 51 |
3 files changed, 46 insertions, 33 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 4baa3b7c8..36fba53ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ * [#177](https://github.com/tboox/xmake/issues/177): Fix the dependent target link bug * Fix high cpu usage bug and Exit issues for `$ xmake f --menu` * [#197](https://github.com/tboox/xmake/issues/197): Fix Chinese path for generating vs201x project +* Fix wdk rules bug ## v2.2.1 @@ -500,6 +501,7 @@ * [#177](https://github.com/tboox/xmake/issues/177): 修复被依赖的动态库target,如果设置了basename后链接失败问题 * 修复`$ xmake f --menu`中Exit问题以及cpu过高问题 * [#197](https://github.com/tboox/xmake/issues/197): 修复生成的vs201x工程文件带有中文路径乱码问题 +* 修复WDK规则编译生成的驱动在Win7下运行蓝屏问题 ## v2.2.1 diff --git a/xmake/modules/os/winver.lua b/xmake/modules/os/winver.lua index 288f3a89f..e684ffa02 100644 --- a/xmake/modules/os/winver.lua +++ b/xmake/modules/os/winver.lua @@ -94,6 +94,32 @@ function target_version(name) return version(name) end +-- get subsystem version from name +function subsystem(name) + + -- ignore the subname with '_xxx' + name = (name or ""):split('_')[1] + + -- make defined values + local defvals = + { + nt4 = "4.00" + , win2k = "5.00" + , winxp = "5.01" + , ws03 = "5.02" + , win6 = "6.00" + , vista = "6.00" + , ws08 = "6.00" + , longhorn = "6.00" + , win7 = "6.01" + , win8 = "6.02" + , winblue = "6.03" + , win81 = "6.03" + , win10 = "10.00" + } + return defvals[name] or "10.00" +end + -- get windows system version -- -- $ xmake l os.winver diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua index 23a4c0740..d4cfaab7e 100644 --- a/xmake/rules/wdk/load.lua +++ b/xmake/rules/wdk/load.lua @@ -24,32 +24,7 @@ -- imports import("core.project.config") - --- get subsystem version defined value -function _winver_subsystem(winver) - - -- ignore the subname with '_xxx' - winver = (winver or ""):split('_')[1] - - -- make defined values - local defvals = - { - nt4 = "4.00" - , win2k = "5.00" - , winxp = "5.01" - , ws03 = "5.02" - , win6 = "6.00" - , vista = "6.00" - , ws08 = "6.00" - , longhorn = "6.00" - , win7 = "6.01" - , win8 = "6.02" - , winblue = "6.03" - , win81 = "6.03" - , win10 = "10.00" - } - return defvals[winver] or "10.00" -end +import("os.winver", {alias = "os_winver"}) -- load for umdf driver function driver_umdf(target) @@ -63,7 +38,7 @@ function driver_umdf(target) -- add subsystem local winver = target:values("wdk.env.winver") or config.get("wdk_winver") - target:add("shflags", "-subsystem:windows," .. _winver_subsystem(winver), {force = true}) + target:add("shflags", "-subsystem:windows," .. os_winver.subsystem(winver), {force = true}) -- set default driver entry if does not exist local entry = false @@ -89,15 +64,20 @@ function driver_kmdf(target) target:set("filename", target:basename() .. ".sys") -- add links - target:add("links", "BufferOverflowFastFailK", "ntoskrnl", "hal", "wmilib", "WdfLdr", "ntstrsafe", "wdmsec") + local winver = target:values("wdk.env.winver") or config.get("wdk_winver") + if os_winver.version(winver) >= os_winver.version("win8") then + target:add("links", "BufferOverflowFastFailK") + else + target:add("links", "BufferOverflowK") + end + target:add("links", "ntoskrnl", "hal", "wmilib", "WdfLdr", "ntstrsafe", "wdmsec") -- compile as kernel driver target:add("cxflags", "-kernel", {force = true}) target:add("ldflags", "-kernel", "-driver", {force = true}) -- add subsystem - local winver = target:values("wdk.env.winver") or config.get("wdk_winver") - target:add("ldflags", "-subsystem:native," .. _winver_subsystem(winver), {force = true}) + target:add("ldflags", "-subsystem:native," .. os_winver.subsystem(winver), {force = true}) -- set default driver entry if does not exist local entry = false @@ -124,15 +104,20 @@ function driver_wdm(target) target:set("filename", target:basename() .. ".sys") -- add links - target:add("links", "BufferOverflowFastFailK", "ntoskrnl", "hal", "wmilib", "ntstrsafe") + local winver = target:values("wdk.env.winver") or config.get("wdk_winver") + if os_winver.version(winver) >= os_winver.version("win8") then + target:add("links", "BufferOverflowFastFailK") + else + target:add("links", "BufferOverflowK") + end + target:add("links", "ntoskrnl", "hal", "wmilib", "ntstrsafe") -- compile as kernel driver target:add("cxflags", "-kernel", {force = true}) target:add("ldflags", "-kernel", "-driver", {force = true}) -- add subsystem - local winver = target:values("wdk.env.winver") or config.get("wdk_winver") - target:add("ldflags", "-subsystem:native," .. _winver_subsystem(winver), {force = true}) + target:add("ldflags", "-subsystem:native," .. os_winver.subsystem(winver), {force = true}) -- set default driver entry if does not exist local entry = false |
