summaryrefslogtreecommitdiff
path: root/xmake/core/project/target.lua
diff options
context:
space:
mode:
Diffstat (limited to 'xmake/core/project/target.lua')
-rw-r--r--xmake/core/project/target.lua29
1 files changed, 23 insertions, 6 deletions
diff --git a/xmake/core/project/target.lua b/xmake/core/project/target.lua
index 3eed0cdad..ac9b63a0c 100644
--- a/xmake/core/project/target.lua
+++ b/xmake/core/project/target.lua
@@ -1116,11 +1116,15 @@ function _instance:filerules(sourcefile)
if not key2rules then
key2rules = {}
for _, r in pairs(table.wrap(self:rules())) do
- for _, sourcekind in ipairs(table.wrap(r:get("sourcekinds"))) do
+ -- we can also get sourcekinds from add_rules("xxx", {sourcekinds = "cxx"})
+ local rule_sourcekinds = self:extraconf("rules", r:name(), "sourcekinds") or r:get("sourcekinds")
+ for _, sourcekind in ipairs(table.wrap(rule_sourcekinds)) do
key2rules[sourcekind] = key2rules[sourcekind] or {}
table.insert(key2rules[sourcekind], r)
end
- for _, extension in ipairs(table.wrap(r:get("extensions"))) do
+ -- we can also get extensions from add_rules("xxx", {extensions = ".cpp"})
+ local rule_extensions = self:extraconf("rules", r:name(), "extensions") or r:get("extensions")
+ for _, extension in ipairs(table.wrap(rule_extensions)) do
extension = extension:lower()
key2rules[extension] = key2rules[extension] or {}
table.insert(key2rules[extension], r)
@@ -1130,13 +1134,26 @@ function _instance:filerules(sourcefile)
end
-- get target rules from the given sourcekind or extension
+ local rules_override = {}
local filename = path.filename(sourcefile):lower()
for _, r in ipairs(table.wrap(key2rules[path.extension(filename, 2)] or
- key2rules[path.extension(filename)] or
- key2rules[self:sourcekind_of(filename)])) do
- table.insert(rules, r)
+ key2rules[path.extension(filename)])) do
+ if self:extraconf("rules", r:name(), "override") then
+ table.insert(rules_override, r)
+ else
+ table.insert(rules, r)
+ end
+ end
+ for _, r in ipairs(table.wrap(key2rules[self:sourcekind_of(filename)])) do
+ if self:extraconf("rules", r:name(), "override") then
+ table.insert(rules_override, r)
+ else
+ table.insert(rules, r)
+ end
end
- return rules
+
+ -- we will use overrided rules first, e.g. add_rules("xxx", {override = true})
+ return #rules_override > 0 and rules_override or rules
end
-- get the config info of the given source file