Repository navigation
Expand file tree
/
Copy pathxmake.lua
More file actions
88 lines (77 loc) · 2.81 KB
/
Copy pathxmake.lua
File metadata and controls
88 lines (77 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
-- Project metadata
set_project("kv-engine")
set_version("0.2.0")
-- Force standard C11 without compiler extensions
set_languages("c11")
-- Keep build artifacts in a predictable location: build/<mode>/<target>
set_targetdir("$(builddir)/$(mode)")
-- Build modes (the valgrind mode keeps debug symbols for memcheck)
add_rules("mode.debug", "mode.release", "mode.valgrind")
-- Warnings for every project target
set_warnings("all", "extra")
if is_plat("windows") then
add_cxflags("/WX")
else
add_cxflags("-Wpedantic", "-Werror")
end
-- Third-party dependencies
-- cofyc/argparse is not in xmake-repo, so define it inline.
package("argparse")
set_homepage("https://github.com/cofyc/argparse")
set_description("A simple argument parser library for C.")
set_license("MIT")
add_urls("https://github.com/cofyc/argparse/archive/$(version).tar.gz")
add_versions("4e30aba50340af7f2d3932492c4bffdef7669db8",
"c648913e763b8617ee269634fef3023640c05b81645056a68d301ec5ff1d4e1f")
on_install(function (package)
io.writefile("xmake.lua", [[
add_rules("mode.debug", "mode.release")
target("argparse")
set_kind("static")
set_languages("c11")
add_files("argparse.c")
add_headerfiles("argparse.h")
]])
import("package.tools.xmake").install(package)
end)
on_test(function (package)
assert(package:has_cfuncs("argparse_init", {includes = "argparse.h"}))
end)
package_end()
add_requires("xxhash v0.8.2", {system = false, configs = {cmake = false}})
add_requires("argparse", {system = false})
-- Library
target("kv_engine_lib")
set_kind("static")
add_files("lib/src/*.c")
add_includedirs("lib/include", {public = true})
add_packages("xxhash")
-- Application executable
target("kv-engine")
set_kind("binary")
add_deps("kv_engine_lib")
add_files("app/src/*.c")
add_packages("argparse")
-- Keep asserts active in release builds (release mode defines NDEBUG, which
-- would otherwise compile out every assert() in the tests).
rule("kv-engine.keep-asserts")
after_config(function (target)
if is_plat("windows") then
target:add("cxflags", "/UNDEBUG")
else
target:add("cxflags", "-UNDEBUG")
end
end)
-- Unit test / example executables.
function kv_engine_add_test(name, source)
target(name)
set_kind("binary")
add_files(source)
add_deps("kv_engine_lib")
add_rules("kv-engine.keep-asserts")
add_tests(name)
end
kv_engine_add_test("test_hashmap", "lib/unit_tests/test_hashmap.c")
kv_engine_add_test("test_hashmap_iterator", "lib/unit_tests/test_hashmap_iterator.c")
kv_engine_add_test("test_db", "lib/unit_tests/test_db.c")
kv_engine_add_test("example_person", "lib/examples/person.c")