aboutsummaryrefslogtreecommitdiff
path: root/bundle.lua
blob: 0802ba2c8e5f41e0042b1118c2997120ded5095e (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
118
119
120
121
122
-- Copyright Epic Games, Inc. All Rights Reserved.

--------------------------------------------------------------------------------
local function _exec(cmd, ...)
    print("--", cmd, ...)
    local ret = os.execv(cmd, {...})
    print()
    return ret
end

--------------------------------------------------------------------------------
local function _build(arch, debug, config_args)
    variant = debug and "debug" or "release"
    local ret = _exec(
        "xmake",
        "config",
        "--clean",
        "--mode="..variant,
        "--arch="..arch,
        config_args)
    if ret > 0 then
        raise("Failed to configure xmake")
    end

    ret = _exec("xmake", "clean", "zenserver")
    if ret > 0 then
        raise("Clean failed")
    end

    ret = _exec("xmake", "build", "zenserver")
    if ret > 0 then
        raise("Build failed")
    end
end

--------------------------------------------------------------------------------
local function _zip(zip_path, ...)
    os.rm(zip_path)

    import("detect.tools.find_7z")
    local cmd = find_7z()
    if cmd then
        -- A ./ prefix makes 7z ignore the directory structure
        input_paths = {}
        for _, input_path in ipairs({...}) do
            input_path = path.relative(input_path, ".")
            if input_path:sub(2,2) ~= ":" then
                input_path = "./"..input_path
            end
            table.insert(input_paths, input_path)
        end

        local ret = _exec("7z", "a", zip_path, table.unpack(input_paths))
        if ret > 0 then
            raise("Received error from 7z")
        end
        return
    end
    print("7z not found")

    import("detect.tools.find_zip")
    cmd = find_zip()
    if cmd then
        local ret = _exec("zip", "--junk-paths", zip_path, ...)
        if ret > 0 then
            raise("Received error from zip")
        end
        return
    end
    print("zip not found")

    raise("Unable to find a suitable zip tool")
end

--------------------------------------------------------------------------------
local function _find_vcpkg_binary(triple, port, binary)
    import("detect.sdks.find_vcpkgdir")
    local root_dir = find_vcpkgdir()
    if root_dir == nil or root_dir == "" then
        raise("Unable to find vcpkg root directory")
    end

    bin_path = root_dir.."/installed/"..triple.."/tools/"..port.."/"..binary
    return bin_path
end

--------------------------------------------------------------------------------
local function main_windows()
    import("core.base.option")

    zip_path = "build/zenserver-win64.zip"
    config_args = nil
    if option.get("withtrace") then
        zip_path = "build/zenserver-trace-win64.zip"
        config_args = "--zentrace=yes"
    end

    local crashpad_handler_path = _find_vcpkg_binary(
        "x64-windows-static",
        "sentry-native",
        "crashpad_handler.exe")

    _build("x64", false, config_args)

    _zip(
        zip_path,
        "build/windows/x64/release/zenserver.exe",
        "build/windows/x64/release/zenserver.pdb",
        crashpad_handler_path)
end


end

--------------------------------------------------------------------------------
function main()
    if is_host("windows") then
        return main_windows()
    end

    raise("'xmake bundle' not currently supported on this platform")
end