summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-05-05 00:42:02 +0800
committerruki <[email protected]>2018-05-04 22:12:14 +0800
commit3567313cb859aa88e71ef9aa84e484f09fbccce8 (patch)
tree315ceac7102e8b09cd654f813fd58afc14afb603
parent95af67cc06c76559599b79cfd057b1253bfdc95c (diff)
add values api to target
-rw-r--r--tests/projects/wdk/kmdf/ioctl/xmake.lua3
-rw-r--r--xmake/core/base/interpreter.lua83
-rw-r--r--xmake/core/project/target.lua22
-rw-r--r--xmake/rules/wdk/load.lua3
-rw-r--r--xmake/rules/wdk/xmake.lua8
5 files changed, 105 insertions, 14 deletions
diff --git a/tests/projects/wdk/kmdf/ioctl/xmake.lua b/tests/projects/wdk/kmdf/ioctl/xmake.lua
index d803d99cb..6fbca5543 100644
--- a/tests/projects/wdk/kmdf/ioctl/xmake.lua
+++ b/tests/projects/wdk/kmdf/ioctl/xmake.lua
@@ -8,6 +8,9 @@ target("nonpnp")
-- add rules
add_rules("wdk.kmdf.driver")
+ -- add flags for rule: wdk.tracewpp
+ add_values("wdk.tracewpp.flags", "-func:TraceEvents(LEVEL,FLAGS,MSG,...)", "-func:Hexdump((LEVEL,FLAGS,MSG,...))")
+
-- add files
add_files("driver/*.c", {rule = "wdk.tracewpp"})
diff --git a/xmake/core/base/interpreter.lua b/xmake/core/base/interpreter.lua
index c04ad5d21..79c782842 100644
--- a/xmake/core/base/interpreter.lua
+++ b/xmake/core/base/interpreter.lua
@@ -989,9 +989,6 @@ end
--
function interpreter:api_register_set_values(scope_kind, ...)
- -- check
- assert(self)
-
-- define implementation
local implementation = function (self, scope, name, ...)
@@ -1024,9 +1021,6 @@ end
-- register api for add_values
function interpreter:api_register_add_values(scope_kind, ...)
- -- check
- assert(self)
-
-- define implementation
local implementation = function (self, scope, name, ...)
@@ -1056,6 +1050,82 @@ function interpreter:api_register_add_values(scope_kind, ...)
self:_api_register_xxx_values(scope_kind, "add", implementation, ...)
end
+-- register api for set_keyvalues
+--
+-- interp:api_register_set_keyvalues("scope_kind", "name1", "name2", ...)
+--
+-- api:
+-- set_$(name1)("key", "value1")
+-- set_$(name2)("key", "value1", "value2", ...)
+--
+function interpreter:api_register_set_keyvalues(scope_kind, ...)
+
+ -- define implementation
+ local implementation = function (self, scope, name, key, ...)
+
+ -- get extra config
+ local values = {...}
+ local extra_config = values[#values]
+ if table.is_dictionary(extra_config) then
+ table.remove(values)
+ else
+ extra_config = nil
+ end
+
+ -- save values
+ name = name .. "." .. key
+ scope[name] = values
+
+ -- save extra config
+ if extra_config then
+ scope["__extra_" .. name] = scope["__extra_" .. name] or {}
+ local extrascope = scope["__extra_" .. name]
+ for _, value in ipairs(values) do
+ extrascope[value] = extra_config
+ end
+ end
+ end
+
+ -- register implementation
+ self:_api_register_xxx_values(scope_kind, "set", implementation, ...)
+end
+
+-- register api for add_keyvalues
+--
+-- interp:api_register_add_keyvalues("scope_kind", "name1", "name2", ...)
+--
+function interpreter:api_register_add_keyvalues(scope_kind, ...)
+
+ -- define implementation
+ local implementation = function (self, scope, name, key, ...)
+
+ -- get extra config
+ local values = {...}
+ local extra_config = values[#values]
+ if table.is_dictionary(extra_config) then
+ table.remove(values)
+ else
+ extra_config = nil
+ end
+
+ -- save values
+ name = name .. "." .. key
+ scope[name] = table.join2(scope[name] or {}, values)
+
+ -- save extra config
+ if extra_config then
+ scope["__extra_" .. name] = scope["__extra_" .. name] or {}
+ local extrascope = scope["__extra_" .. name]
+ for _, value in ipairs(values) do
+ extrascope[value] = extra_config
+ end
+ end
+ end
+
+ -- register implementation
+ self:_api_register_xxx_values(scope_kind, "add", implementation, ...)
+end
+
-- register api for set_array
function interpreter:api_register_set_array(scope_kind, ...)
@@ -1086,7 +1156,6 @@ function interpreter:api_register_add_array(scope_kind, ...)
-- append array?
scope[name] = scope[name] or {}
table.insert(scope[name], {...})
-
end
-- register implementation
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 896845e2c..20e8fbdaa 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -68,6 +68,13 @@ function target.apis()
, "target.add_languages"
, "target.add_vectorexts"
}
+ , keyvalues =
+ {
+ -- target.set_xxx
+ "target.set_values"
+ -- target.add_xxx
+ , "target.add_values"
+ }
, pathes =
{
-- target.set_xxx
@@ -240,6 +247,21 @@ function target:data_add(name, data)
self._DATA[name] = table.unwrap(table.join(self._DATA[name] or {}, data))
end
+-- get values
+function target:values(name)
+ return self:get("values." .. name)
+end
+
+-- set values
+function target:values_set(name, ...)
+ self:set("values." .. name, ...)
+end
+
+-- add values
+function target:values_add(name, ...)
+ self:add("values." .. name, ...)
+end
+
-- dump this target
function target:dump()
table.dump(self._INFO)
diff --git a/xmake/rules/wdk/load.lua b/xmake/rules/wdk/load.lua
index 9d1f059e9..ae58a7121 100644
--- a/xmake/rules/wdk/load.lua
+++ b/xmake/rules/wdk/load.lua
@@ -87,9 +87,6 @@ function _load_for_kmdf(target, wdk, arch, kind)
-- add link directories
target:add("linkdirs", path.join(wdk.libdir, "wdf", "kmdf", arch, wdk.kmdfver))
- -- add links
- target:add("links", "WdfDriverStubUm")
-
-- add defines
local kmdfver = wdk.kmdfver:split('%.')
target:add("defines", "KMDF_VERSION_MAJOR=" .. kmdfver[1], "KMDF_VERSION_MINOR=" .. kmdfver[2], "KMDF_USING_NTSTATUS")
diff --git a/xmake/rules/wdk/xmake.lua b/xmake/rules/wdk/xmake.lua
index 047bfe573..a2a57de52 100644
--- a/xmake/rules/wdk/xmake.lua
+++ b/xmake/rules/wdk/xmake.lua
@@ -136,10 +136,10 @@ rule("wdk.tracewpp")
if target:rule("wdk.kmdf.driver") then
table.insert(args, "-km")
table.insert(args, "-gen:{km-WdfDefault.tpl}*.tmh")
-
- -- TODO
- table.insert(args, "-func:TraceEvents(LEVEL,FLAGS,MSG,...)")
- table.insert(args, "-func:Hexdump((LEVEL,FLAGS,MSG,...))")
+ end
+ local flags = target:values("wdk.tracewpp.flags")
+ if flags then
+ table.join2(args, flags)
end
table.insert(args, "-cfgdir:" .. configdir)
table.insert(args, "-odir:" .. outputdir)