birth/src/host.zig
2023-07-14 09:56:05 -06:00

86 lines
2.4 KiB
Zig

const lib = @import("lib");
comptime {
if (lib.os == .freestanding) @compileError("Host file included in non-host target");
}
const std = @import("std");
pub const ChildProcess = std.ChildProcess;
pub const posix = std.os;
pub const sync = std.os.sync;
pub const fs = std.fs;
pub const cwd = fs.cwd;
pub const Dir = fs.Dir;
pub const basename = fs.path.basename;
pub const dirname = fs.path.dirname;
pub const realpathAlloc = fs.realpathAlloc;
pub const os = std.os;
const io = std.io;
pub const getStdOut = std.io.getStdOut;
const heap = std.heap;
pub const ArenaAllocator = heap.ArenaAllocator;
pub const page_allocator = heap.page_allocator;
pub const ArrayList = std.ArrayList;
pub const ArrayListAligned = std.ArrayListAligned;
pub const time = std.time;
pub const http = std.http;
pub const Uri = std.Uri;
// Build imports
pub const build = std.build;
pub fn allocateZeroMemory(bytes: u64) ![]align(0x1000) u8 {
switch (lib.os) {
.windows => {
const windows = std.os.windows;
return @as([*]align(0x1000) u8, @ptrCast(@alignCast(try windows.VirtualAlloc(null, bytes, windows.MEM_RESERVE | windows.MEM_COMMIT, windows.PAGE_READWRITE))))[0..bytes];
},
// Assume all systems are POSIX
else => {
const mmap = std.os.mmap;
const PROT = std.os.PROT;
const MAP = std.os.MAP;
return try mmap(null, bytes, PROT.READ | PROT.WRITE, MAP.PRIVATE | MAP.ANONYMOUS, -1, 0);
},
.freestanding => @compileError("Not implemented yet"),
}
}
pub const ExecutionError = error{failed};
pub fn spawnProcess(arguments: []const []const u8, allocator: lib.ZigAllocator) !void {
var process = ChildProcess.init(arguments, allocator);
// std.log.err("Spawning process:", .{});
// for (arguments) |arg| {
// std.log.err("Arg: {s}", .{arg});
// }
process.stdout_behavior = .Ignore;
const execution_result = try process.spawnAndWait();
switch (execution_result) {
.Exited => |exit_code| {
switch (exit_code) {
0 => {},
else => return ExecutionError.failed,
}
},
.Signal => |signal_code| {
_ = signal_code;
unreachable;
},
.Stopped, .Unknown => unreachable,
}
}
pub const panic = std.debug.panic;
pub const allocateArguments = std.process.argsAlloc;