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
|