diff options
| author | ruki <[email protected]> | 2022-09-27 00:42:29 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2022-09-27 00:42:29 +0800 |
| commit | 411e455ba256d4f67289a267f62a74930212c8f9 (patch) | |
| tree | 37f7de08a517453c1370fa5541d880690598fa1b | |
| parent | 76bced915dfb870a34528270a02236a3f5f6ff4e (diff) | |
add set_base to rules
| -rw-r--r-- | tests/apis/rules_override_cxx/src/main.xx | 6 | ||||
| -rw-r--r-- | tests/apis/rules_override_cxx/xmake.lua | 26 | ||||
| -rw-r--r-- | tests/apis/rules_override_order/src/main.cc | 6 | ||||
| -rw-r--r-- | tests/apis/rules_override_order/xmake.lua | 15 | ||||
| -rw-r--r-- | tests/projects/c++/unity_build/src/test.cpp | 8 | ||||
| -rw-r--r-- | xmake/core/project/project.lua | 4 | ||||
| -rw-r--r-- | xmake/core/project/rule.lua | 22 |
7 files changed, 85 insertions, 2 deletions
diff --git a/tests/apis/rules_override_cxx/src/main.xx b/tests/apis/rules_override_cxx/src/main.xx new file mode 100644 index 000000000..d612d8782 --- /dev/null +++ b/tests/apis/rules_override_cxx/src/main.xx @@ -0,0 +1,6 @@ +#include <stdio.h> + +int main(int argc, char** argv) +{ + return 0; +} diff --git a/tests/apis/rules_override_cxx/xmake.lua b/tests/apis/rules_override_cxx/xmake.lua new file mode 100644 index 000000000..0dc2261ca --- /dev/null +++ b/tests/apis/rules_override_cxx/xmake.lua @@ -0,0 +1,26 @@ +rule("xx.build") + set_base("c++.build") + set_extensions(".xx") + on_load(function (target) + local sourcebatch = target:sourcebatches()["xx.build"] + sourcebatch.sourcekind = "cxx" + sourcebatch.objectfiles = {} + sourcebatch.dependfiles = {} + for _, sourcefile in ipairs(sourcebatch.sourcefiles) do + local objectfile = target:objectfile(sourcefile) + local dependfile = target:dependfile(objectfile) + table.insert(sourcebatch.objectfiles, objectfile) + table.insert(sourcebatch.dependfiles, dependfile) + end + target:add("cxxflags", "-x c++") + end) + +rule("xx") + set_base("c++") + add_deps("xx.build") + +target("test") + set_kind("binary") + add_rules("xx") + add_files("src/*.xx") + diff --git a/tests/apis/rules_override_order/src/main.cc b/tests/apis/rules_override_order/src/main.cc new file mode 100644 index 000000000..d612d8782 --- /dev/null +++ b/tests/apis/rules_override_order/src/main.cc @@ -0,0 +1,6 @@ +#include <stdio.h> + +int main(int argc, char** argv) +{ + return 0; +} diff --git a/tests/apis/rules_override_order/xmake.lua b/tests/apis/rules_override_order/xmake.lua new file mode 100644 index 000000000..61b42a943 --- /dev/null +++ b/tests/apis/rules_override_order/xmake.lua @@ -0,0 +1,15 @@ +rule("cppfront") + set_extensions(".cpp2") + on_build_files(function (target, batchjobs, sourcebatch, opt) + print("on_build_files") + end, {batch = true, distcc = true}) + +rule("xx") + set_base("c++") + add_deps("cppfront", {order = true}) + +target("test") + set_kind("binary") + add_rules("xx") + add_files("src/*.cc") + diff --git a/tests/projects/c++/unity_build/src/test.cpp b/tests/projects/c++/unity_build/src/test.cpp new file mode 100644 index 000000000..27d41ee50 --- /dev/null +++ b/tests/projects/c++/unity_build/src/test.cpp @@ -0,0 +1,8 @@ +#include "header.h" + +int main(int argc, char** argv) +{ + std::string s("xmake"); + printf("hello %s!\n", s.c_str()); + return 0; +} diff --git a/xmake/core/project/project.lua b/xmake/core/project/project.lua index f48a45205..3c4c39232 100644 --- a/xmake/core/project/project.lua +++ b/xmake/core/project/project.lua @@ -326,6 +326,10 @@ function project._load_rules() for _, instance in pairs(instances) do instance._DEPS = instance._DEPS or {} instance._ORDERDEPS = instance._ORDERDEPS or {} + local base = instance:get("base") + if base then + instance._BASE = instances[base] + end project._load_deps(instance, instances, instance._DEPS, instance._ORDERDEPS, {instance:name()}) end return rules diff --git a/xmake/core/project/rule.lua b/xmake/core/project/rule.lua index 599294a45..841203c9d 100644 --- a/xmake/core/project/rule.lua +++ b/xmake/core/project/rule.lua @@ -150,6 +150,7 @@ function rule.apis() "rule.set_extensions" , "rule.set_sourcekinds" , "rule.set_kind" + , "rule.set_base" -- rule.add_xxx , "rule.add_deps" , "rule.add_imports" @@ -214,14 +215,31 @@ function rule.new(name, info) return instance end +-- get the base rule +function rule:base() + return self._BASE +end + -- get the rule info function rule:get(name) - return self._INFO:get(name) + local value = self._INFO:get(name) + if value == nil and self:base() then + value = self:base():get(name) + end + if value ~= nil then + return value + end end -- get the extra configuration function rule:extraconf(name, item, key) - return self._INFO:extraconf(name, item, key) + local value = self._INFO:extraconf(name, item, key) + if value == nil and self:base() then + value = self:base():extraconf(name) + end + if value ~= nil then + return value + end end -- get the rule name |
