aboutsummaryrefslogtreecommitdiff
path: root/xmake.lua
blob: 88b6b8bae798bbc925c81f675b64432d3ec08d4c (plain) (blame)
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
add_requires(
    "vcpkg::asio",
    "vcpkg::cpr",
    "vcpkg::curl",
    "vcpkg::cxxopts",
    "vcpkg::doctest",
    "vcpkg::fmt",
    "vcpkg::gsl-lite",
    "vcpkg::http-parser",
    "vcpkg::json11",
    "vcpkg::lua",
    "vcpkg::lz4",
    "vcpkg::mimalloc",
    "vcpkg::openssl",
    "vcpkg::robin-map",
    "vcpkg::sentry-native",
    "vcpkg::sol2",
    "vcpkg::spdlog",
    "vcpkg::xxhash",
    "vcpkg::zlib",
    "vcpkg::zstd"
)

add_rules("mode.debug", "mode.release")

if is_mode("release") then
    set_optimize("smallest")
    if is_plat("windows") then
        add_ldflags("/LTCG")
    end
end

if is_mode("debug") then
    add_defines("DEBUG")
end

if is_mode("debug") then
    add_defines("ZEN_WITH_TESTS=1")
else
    add_defines("ZEN_WITH_TESTS=0")
end

if is_os("windows") then
    add_defines(
        "_CRT_SECURE_NO_WARNINGS",
        "_UNICODE",
        "UNICODE",
        "_CONSOLE",
        "NOMINMAX",             -- stop Windows SDK defining 'min' and 'max'
        "NOGDI",                -- otherwise Windows.h defines 'GetObject'
        "WIN32_LEAN_AND_MEAN",  -- cut down Windows.h
        "_WIN32_WINNT=0x0A00"
    )
    -- add_ldflags("/MAP")
end

if is_os("linux") then
    add_cxxflags("-Wno-unused-value")
    add_cxxflags("-Wno-strict-aliasing")
    add_cxxflags("-Wno-implicit-fallthrough")
    add_cxxflags("-Wno-missing-field-initializers")
end

function add_define_by_config(define, config_name)
    local value = has_config(config_name) and 1 or 0
    add_defines(define.."="..value)
    print(define.."="..value)
end

option("zensentry")
    set_default(true)
    set_showmenu(true)
    set_description("Enables Sentry support in Zen")
option_end()
add_define_by_config("USE_SENTRY", "zensentry")

option("zenmimalloc")
    set_default(true)
    set_showmenu(true)
    set_description("Use MiMalloc as Zen's allocator")
option_end()
add_define_by_config("ZEN_USE_MIMALLOC", "zenmimalloc")

if is_os("windows") then
    option("vfs")
        set_showmenu(true)
        set_description("Enable VFS functionality")
        add_defines("ZEN_WITH_VFS")
    option_end()

    option("httpsys")
        set_default(true)
        set_showmenu(true)
        set_description("Enable http.sys server")
        add_defines("ZEN_WITH_HTTPSYS")
    option_end()
end

option("compute")
    set_default(is_os("windows"))
    set_showmenu(true)
    set_description("Enable compute services endpoint")
    add_defines("ZEN_WITH_COMPUTE_SERVICES")
option_end()

set_warnings("allextra", "error")
set_languages("cxx20")

-- always generate debug information
set_symbols("debug")

includes("zencore", "zencore-test")
includes("zenhttp")
includes("zenstore", "zenstore-test")
includes("zenutil")
includes("zenserver", "zenserver-test")
includes("zen")