-- 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