aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted/target.zig
blob: 375b48f10deb77f6c2d72c5f2351fe869e0e8b2a (plain)
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
const builtin = @import("builtin");
const c = @import("c.zig");

pub const CrossTarget = struct {
    arch: builtin.Arch,
    os: builtin.Os,
    environ: builtin.Environ,
};

pub const Target = union(enum) {
    Native,
    Cross: CrossTarget,

    pub fn oFileExt(self: &const Target) []const u8 {
        const environ = switch (*self) {
            Target.Native => builtin.environ,
            Target.Cross => |t| t.environ,
        };
        return switch (environ) {
            builtin.Environ.msvc => ".obj",
            else => ".o",
        };
    }

    pub fn exeFileExt(self: &const Target) []const u8 {
        return switch (self.getOs()) {
            builtin.Os.windows => ".exe",
            else => "",
        };
    }

    pub fn getOs(self: &const Target) builtin.Os {
        return switch (*self) {
            Target.Native => builtin.os,
            Target.Cross => |t| t.os,
        };
    }

    pub fn isDarwin(self: &const Target) bool {
        return switch (self.getOs()) {
            builtin.Os.ios, builtin.Os.macosx => true,
            else => false,
        };
    }

    pub fn isWindows(self: &const Target) bool {
        return switch (self.getOs()) {
            builtin.Os.windows => true,
            else => false,
        };
    }
};

pub fn initializeAll() void {
    c.LLVMInitializeAllTargets();
    c.LLVMInitializeAllTargetInfos();
    c.LLVMInitializeAllTargetMCs();
    c.LLVMInitializeAllAsmPrinters();
    c.LLVMInitializeAllAsmParsers();
}