diff --git a/zig/system.zig b/zig/system.zig new file mode 100644 index 0000000..2067c26 --- /dev/null +++ b/zig/system.zig @@ -0,0 +1,162 @@ +const std = @import("std"); + +pub fn add_defines(b: *std.Build, compile_step: *std.build.Step.Compile) { + const target = b.standardTargetOptions(.{}); + const t = target.result; + + // define size of pointer + var is64Bits = true; + var is32Bits = false; + + switch (t.cpu.arch) { + .x86 => { + is32Bits = true; + is64Bits = false; + }, + + .x86_64 => { + is32Bits = false; + is64Bits = true; + } + } + + if (is64Bits) { + compile_step.defineCMacro("WHOA_ARCH_64", "1"); + } + + if (is32Bits) { + compile_step.defineCMacro("WHOA_ARCH_32", "1"); + } + + // define operating system + var isDarwin = false; + var isLinux = false; + var isWindows = false; + + switch (t.os.tag) { + .windows => { + isWindows = true; + }, + + .macos => { + isDarwin = true; + }, + + .linux => { + isLinux = true; + } + } + + if (isWindows) { + compile_step.defineCMacro("WHOA_SYSTEM_WIN", "1"); + } + + if (isDarwin) { + compile_step.defineCMacro("WHOA_SYSTEM_MAC", "1"); + } + + if (isLinux) { + compile_step.defineCMacro("WHOA_SYSTEM_LINUX", "1"); + } + + // define operating system version + + const WHOA_WIN_UNK = "9999"; + const WHOA_WIN_XP = "510"; + const WHOA_WIN_VISTA = "600"; + const WHOA_WIN_7 = "610"; + const WHOA_WIN_8 = "620"; + const WHOA_WIN_8_1 = "630"; + const WHOA_WIN_10 = "1000"; + const WHOA_MAC_UNK = "9999"; + const WHOA_MAC_10_8 = "1008"; + const WHOA_MAC_10_9 = "1009"; + const WHOA_MAC_10_10 = "1010"; + const WHOA_MAC_10_11 = "1011"; + const WHOA_MAC_10_12 = "1012"; + const WHOA_MAC_10_13 = "1013"; + const WHOA_MAC_10_14 = "1014"; + const WHOA_MAC_10_15 = "1015"; + const WHOA_MAC_11_0 = "1100"; + const WHOA_LINUX_UNK = "9999"; + + var system_version = "9999"; + + if (isWindows) { + switch (t.os.semver.min.major) { + 5 => { + system_version = WHOA_WIN_XP; + }, + + 6 => { + system_version = WHOA_WIN_VISTA; + }, + + 7 => { + system_version = WHOA_WIN_7; + }, + + 8 => { + system_version = WHOA_WIN_8; + + if (t.os.semver.min.minor == 1) { + system_version = WHOA_WIN_8_1; + } + }, + + 10 => { + system_version = WHOA_WIN_10; + } + } + } else if (isDarwin) { + system_version = WHOA_MAC_UNK; + + switch (t.os.semver.min.major) { + 10 => { + system_version = WHOA_MAC_10_8; + + switch (t.os.semver.min.minor) { + 8 => { + system_version = WHOA_MAC_10_8; + }, + + 9 => { + system_version = WHOA_MAC_10_9; + }, + + 10 => { + system_version = WHOA_MAC_10_10; + }, + + 11 => { + system_version = WHOA_MAC_10_11; + }, + + 12 => { + system_version = WHOA_MAC_10_12; + }, + + 13 => { + system_version = WHOA_MAC_10_13; + }, + + 14 => { + system_version = WHOA_MAC_10_14; + }, + + 15 => { + system_version = WHOA_MAC_10_15; + } + } + }, + + 11 => { + system_version = WHOA_MAC_11_0; + } + } + } else if (isLinux) { + system_version = WHOA_LINUX_UNK; + } + + compile_step.defineCMacro("WHOA_SYSTEM_VERSION", system_version); +}