diff options
| author | ruki <[email protected]> | 2018-05-05 00:42:02 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-05-04 22:12:14 +0800 |
| commit | 3567313cb859aa88e71ef9aa84e484f09fbccce8 (patch) | |
| tree | 315ceac7102e8b09cd654f813fd58afc14afb603 | |
| parent | 95af67cc06c76559599b79cfd057b1253bfdc95c (diff) | |
add values api to target
| -rw-r--r-- | tests/projects/wdk/kmdf/ioctl/xmake.lua | 3 | ||||
| -rw-r--r-- | xmake/core/base/interpreter.lua | 83 | ||||
| -rw-r--r-- | xmake/core/project/target.lua | 22 | ||||
| -rw-r--r-- | xmake/rules/wdk/load.lua | 3 | ||||
| -rw-r--r-- | xmake/rules/wdk/xmake.lua | 8 |
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) |
