aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/xmake.lua
blob: a3d7aa12423b04f1c8c626bf146488fd2bb8d805 (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
-- Copyright Epic Games, Inc. All Rights Reserved.

target("zenserver")
    set_kind("binary")
    add_deps("zencore",
             "zenhttp",
             "zennet",
             "zenstore",
             "zenutil",
             "zenvfs")
    add_headerfiles("**.h")
    add_rules("utils.bin2c", {extensions = {".zip"}})
    add_files("**.cpp")
    add_files("frontend/*.zip")
    add_files("zenserver.cpp", {unity_ignored  = true })
    add_includedirs(".")
    set_symbols("debug")

    if is_mode("release") then
        set_optimize("fastest")
    end

    if is_plat("windows") then
        add_ldflags("/subsystem:console,5.02")
        add_ldflags("/MANIFEST:EMBED")
        add_ldflags("/LTCG")
        add_files("zenserver.rc")
        add_cxxflags("/bigobj")
        add_links("delayimp", "projectedfslib")
        add_ldflags("/delayload:ProjectedFSLib.dll")

        add_links("dbghelp", "winhttp", "version")    -- for Sentry
    else
        remove_files("windows/**")
    end

    if is_plat("macosx") then
        add_ldflags("-framework CoreFoundation")
        add_ldflags("-framework CoreGraphics")
        add_ldflags("-framework CoreText")
        add_ldflags("-framework Foundation")
        add_ldflags("-framework Security")
        add_ldflags("-framework SystemConfiguration")
        add_syslinks("bsm")
    end

    add_options("compute")
    add_options("exec")
    
    add_packages(
        "vcpkg::asio",
        "vcpkg::cxxopts",
        "vcpkg::http-parser",
        "vcpkg::json11",
        "vcpkg::lua",
        "vcpkg::mimalloc",
        "vcpkg::sol2"
    )

    if has_config("zensentry") then
        add_packages("vcpkg::sentry-native")
    end

    if is_plat("linux") then
        -- As sentry_native uses symbols from breakpad_client, the latter must
        -- be specified after the former with GCC-like toolchains. xmake however
        -- is unaware of this and simply globs files from vcpkg's output. The
        -- line below forces breakpad_client to be to the right of sentry_native
        add_syslinks("breakpad_client")
    end

    -- to work around some unfortunate Ctrl-C behaviour on Linux/Mac due to 
    -- our use of setsid() at startup we pass in `--no-detach` to zenserver
    -- ensure that it recieves signals when the user requests termination
    on_run(function(target)
        -- the following is roughly cribbed from xmake/actions/run/xmake.lua
        -- it would be nicer if we had the option of amending the arguments
        -- via before_run for instance, but I can't figure out a way to do that
        import("core.base.option")

        -- get the run directory of target
        local rundir = target:rundir()

        -- get the absolute target file path
        local targetfile = path.absolute(target:targetfile())

        -- get run arguments
        local args = table.wrap(option.get("arguments") or target:get("runargs"))

        table.insert(args, "--detach=false")

        -- debugging?
        if option.get("debug") then
            debugger.run(targetfile, args, {curdir = rundir})
        else
            os.execv(targetfile, args, {curdir = rundir, detach = option.get("detach")})
        end
    end)