summaryrefslogtreecommitdiff
path: root/xmake/core
diff options
context:
space:
mode:
authorruki <[email protected]>2019-06-10 22:32:56 +0800
committerruki <[email protected]>2019-06-10 09:17:36 +0800
commitc5fed632a287c2aedd335ba4e41f4347d2fe1956 (patch)
treeb3a703d66cb85f58353565345640b6eab35505a7 /xmake/core
parente368bcfdb1e8326579a2ffb56e57ec6b316a29f0 (diff)
add builtin rule for language
Diffstat (limited to 'xmake/core')
-rw-r--r--xmake/core/language/language.lua7
-rw-r--r--xmake/core/project/deprecated/project.lua32
-rw-r--r--xmake/core/project/project.lua13
3 files changed, 17 insertions, 35 deletions
diff --git a/xmake/core/language/language.lua b/xmake/core/language/language.lua
index a7fdddcc0..ee57172fe 100644
--- a/xmake/core/language/language.lua
+++ b/xmake/core/language/language.lua
@@ -103,6 +103,11 @@ function _instance:extensions()
return extensions
end
+-- get the rules
+function _instance:rules()
+ return self._INFO:get("rules")
+end
+
-- get the source kinds
function _instance:sourcekinds()
return self._INFO:get("sourcekinds")
@@ -221,6 +226,8 @@ function language._interpreter()
{
-- language.set_xxx
"language.set_mixingkinds"
+ -- language.add_xxx
+ , "language.add_rules"
}
, script =
{
diff --git a/xmake/core/project/deprecated/project.lua b/xmake/core/project/deprecated/project.lua
index a7b285381..85d05ed8f 100644
--- a/xmake/core/project/deprecated/project.lua
+++ b/xmake/core/project/deprecated/project.lua
@@ -264,38 +264,6 @@ function deprecated_project._api_is_option(interp, ...)
return config.has(...)
end
--- patch target rules
-function deprecated_project._patch_target_rules(target)
-
- -- TODO patch rules for the deprecated cuda link mode
- -- we will remove this code in the future
- local files = target:get("files")
- if files and not target:rule("cuda.device_link") then
- for _, sourcefile in ipairs(table.wrap(files)) do
- if sourcefile:lower():endswith(".cu") then
- local rules = {binary = "cuda.console", shared = "cuda.shared", static = "cuda.static"}
- local rulename = rules[target:targetkind()]
- if rulename then
- local r = rule.rule(rulename)
- if r then
- target._RULES[rulename] = r
- for _, deprule in ipairs(r:orderdeps()) do
- local name = deprule:name()
- if not target._RULES[name] then
- target._RULES[name] = deprule
- table.insert(target._ORDERULES, deprule)
- end
- end
- table.insert(target._ORDERULES, r)
- deprecated.add("add_rules(\"" .. rulename .. "\")", "set_kind(\"" .. target:targetkind() .. "\") for cuda")
- end
- end
- break
- end
- end
- end
-end
-
-- register api
function deprecated_project.api_register(interp)
diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua
index ed9b87bb3..6e670ec3b 100644
--- a/xmake/core/project/project.lua
+++ b/xmake/core/project/project.lua
@@ -498,7 +498,7 @@ function project._load_targets()
t._ORDERDEPS = t._ORDERDEPS or {}
project._load_deps(t, targets, t._DEPS, t._ORDERDEPS)
- -- load rules
+ -- load rules from target and language
--
-- .e.g
--
@@ -509,7 +509,15 @@ function project._load_targets()
--
t._RULES = t._RULES or {}
t._ORDERULES = t._ORDERULES or {}
- for _, rulename in ipairs(table.wrap(t:get("rules"))) do
+ local rulenames = {}
+ table.join2(rulenames, t:get("rules"))
+ for _, sourcefile in ipairs(table.wrap(t:get("files"))) do
+ local lang = language.load_ex(path.extension(sourcefile))
+ if lang and lang:rules() then
+ table.join2(rulenames, lang:rules())
+ end
+ end
+ for _, rulename in ipairs(rulenames) do
local r = project.rule(rulename) or rule.rule(rulename)
if r then
t._RULES[rulename] = r
@@ -523,7 +531,6 @@ function project._load_targets()
table.insert(t._ORDERULES, r)
end
end
- deprecated_project._patch_target_rules(t)
-- laod packages
t._PACKAGES = t._PACKAGES or {}