diff options
| author | ruki <[email protected]> | 2021-08-31 23:01:38 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2021-08-31 12:49:15 +0800 |
| commit | 219f20a76c2fa40b83ffff7a5fb8967079ef8c7a (patch) | |
| tree | f4288545ad72b1a5353596b19aa63b6d7de49e7a | |
| parent | 1b8e4e472b6a7a1d1aeaf65a4a1e7193bcfdc499 (diff) | |
improve vala rules and add more vala tests
| -rw-r--r-- | tests/projects/vala/sharedlib/src/main.vala | 6 | ||||
| -rw-r--r-- | tests/projects/vala/sharedlib/src/mymath.vala | 9 | ||||
| -rw-r--r-- | tests/projects/vala/sharedlib/xmake.lua | 18 | ||||
| -rw-r--r-- | tests/projects/vala/staticlib/src/main.vala | 6 | ||||
| -rw-r--r-- | tests/projects/vala/staticlib/src/mymath.vala | 9 | ||||
| -rw-r--r-- | tests/projects/vala/staticlib/xmake.lua | 18 | ||||
| -rw-r--r-- | xmake/rules/vala/xmake.lua | 83 |
7 files changed, 148 insertions, 1 deletions
diff --git a/tests/projects/vala/sharedlib/src/main.vala b/tests/projects/vala/sharedlib/src/main.vala new file mode 100644 index 000000000..da9fd895e --- /dev/null +++ b/tests/projects/vala/sharedlib/src/main.vala @@ -0,0 +1,6 @@ +using MyMath; + +public void main() { + stdout.printf("\n\t2 + 3 is %d", sum(2, 3)); + stdout.printf("\n\t8 squared is %d\n", square(8)); +} diff --git a/tests/projects/vala/sharedlib/src/mymath.vala b/tests/projects/vala/sharedlib/src/mymath.vala new file mode 100644 index 000000000..4f4e761c5 --- /dev/null +++ b/tests/projects/vala/sharedlib/src/mymath.vala @@ -0,0 +1,9 @@ +namespace MyMath { + public int sum(int a, int b) { + return(a + b); + } + + public int square(int a) { + return(a * a); + } +} diff --git a/tests/projects/vala/sharedlib/xmake.lua b/tests/projects/vala/sharedlib/xmake.lua new file mode 100644 index 000000000..10c90c88b --- /dev/null +++ b/tests/projects/vala/sharedlib/xmake.lua @@ -0,0 +1,18 @@ +add_rules("mode.release", "mode.debug") + +add_requires("glib") + +target("mymath") + set_kind("shared") + add_rules("vala") + add_files("src/mymath.vala") + add_values("vala.header", "mymath.h") + add_values("vala.vapi", "mymath-1.0.vapi") + add_packages("glib") + +target("test") + set_kind("binary") + add_deps("mymath") + add_rules("vala") + add_files("src/main.vala") + add_packages("glib") diff --git a/tests/projects/vala/staticlib/src/main.vala b/tests/projects/vala/staticlib/src/main.vala new file mode 100644 index 000000000..da9fd895e --- /dev/null +++ b/tests/projects/vala/staticlib/src/main.vala @@ -0,0 +1,6 @@ +using MyMath; + +public void main() { + stdout.printf("\n\t2 + 3 is %d", sum(2, 3)); + stdout.printf("\n\t8 squared is %d\n", square(8)); +} diff --git a/tests/projects/vala/staticlib/src/mymath.vala b/tests/projects/vala/staticlib/src/mymath.vala new file mode 100644 index 000000000..4f4e761c5 --- /dev/null +++ b/tests/projects/vala/staticlib/src/mymath.vala @@ -0,0 +1,9 @@ +namespace MyMath { + public int sum(int a, int b) { + return(a + b); + } + + public int square(int a) { + return(a * a); + } +} diff --git a/tests/projects/vala/staticlib/xmake.lua b/tests/projects/vala/staticlib/xmake.lua new file mode 100644 index 000000000..d37f1b974 --- /dev/null +++ b/tests/projects/vala/staticlib/xmake.lua @@ -0,0 +1,18 @@ +add_rules("mode.release", "mode.debug") + +add_requires("glib") + +target("mymath") + set_kind("static") + add_rules("vala") + add_files("src/mymath.vala") + add_values("vala.header", "mymath.h") + add_values("vala.vapi", "mymath-1.0.vapi") + add_packages("glib") + +target("test") + set_kind("binary") + add_deps("mymath") + add_rules("vala") + add_files("src/main.vala") + add_packages("glib") diff --git a/xmake/rules/vala/xmake.lua b/xmake/rules/vala/xmake.lua index a2ce76937..a0d5775d8 100644 --- a/xmake/rules/vala/xmake.lua +++ b/xmake/rules/vala/xmake.lua @@ -18,7 +18,7 @@ -- @file xmake.lua -- -rule("vala") +rule("vala.build") set_extensions(".vala") on_load(function (target) -- only vala source files? we need patch c source kind for linker @@ -26,6 +26,21 @@ rule("vala") if #sourcekinds == 0 then table.insert(sourcekinds, "cc") end + + -- we disable to build across targets in parallel, because the source files may depend on other target modules + target:set("policy", "build.across_targets_in_parallel", false) + + -- get vapi file + local vapifile = target:data("vala.vapifile") + if not vapifile then + local vapiname = target:values("vala.vapi") + if vapiname then + vapifile = path.join(target:targetdir(), vapiname) + else + vapifile = path.join(target:targetdir(), target:name() .. ".vapi") + end + target:data_set("vala.vapifile", vapifile) + end end) before_buildcmd_file(function (target, batchcmds, sourcefile_vala, opt) @@ -52,6 +67,21 @@ rule("vala") table.insert(argv, package) end end + if target:is_binary() then + for _, dep in ipairs(target:orderdeps()) do + if dep:is_shared() or dep:is_static() then + local vapifile = dep:data("vala.vapifile") + if vapifile then + table.join2(argv, vapifile) + end + end + end + else + local vapifile = target:data("vala.vapifile") + if vapifile then + table.insert(argv, "--vapi=" .. vapifile) + end + end table.insert(argv, sourcefile_vala) batchcmds:vrunv(valac.program, argv) batchcmds:compile(sourcefile_c, objectfile) @@ -62,3 +92,54 @@ rule("vala") batchcmds:set_depcache(target:dependfile(objectfile)) end) + after_install(function (target) + if target:is_shared() or target:is_static() then + local vapifile = target:data("vala.vapifile") + if vapifile then + local installdir = target:installdir() + if installdir then + local sharedir = path.join(installdir, "share") + os.mkdir(sharedir) + os.vcp(vapifile, sharedir) + end + end + end + end) + + after_uninstall(function (target) + if target:is_shared() or target:is_static() then + local vapifile = target:data("vala.vapifile") + if vapifile then + local installdir = target:installdir() + if installdir then + os.rm(path.join(installdir, "share", path.filename(vapifile))) + end + end + end + end) + +rule("vala") + + -- add build rules + add_deps("vala.build") + + -- set compiler runtime, e.g. vs runtime + add_deps("utils.compiler.runtime") + + -- inherit links and linkdirs of all dependent targets by default + add_deps("utils.inherit.links") + + -- support `add_files("src/*.o")` and `add_files("src/*.a")` to merge object and archive files to target + add_deps("utils.merge.object", "utils.merge.archive") + + -- we attempt to extract symbols to the independent file and + -- strip self-target binary if `set_symbols("debug")` and `set_strip("all")` are enabled + add_deps("utils.symbols.extract") + + -- check targets + add_deps("utils.check.targets") + + -- check licenses + add_deps("utils.check.licenses") + + |
