// Written in the D programming language.//// NOTE: This must be kept in sync with phobos/sys/system.d /** * Information about the target operating system, environment, and CPU. * * Copyright: Copyright The D Language Foundation 2000 - 2011 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). * Authors: $(HTTP digitalmars.com, Walter Bright) and $(HTTP jmdavisprog.com, Jonathan M Davis) * Source: $(PHOBOSSRC std/system.d) */module std.system; immutable{ /++ Operating system. Note: This is for cases where you need a value representing the OS at runtime. If you're doing something which should compile differently on different OSes, then please use `version (Windows)`, `version (linux)`, etc. See_Also: $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) +/ enum OS { win32 = 1, /// Microsoft 32 bit Windows systems win64, /// Microsoft 64 bit Windows systems linux, /// All Linux Systems, except for Android osx, /// Mac OS X iOS, /// iOS tvOS, /// tvOS watchOS, /// watchOS freeBSD, /// FreeBSD netBSD, /// NetBSD openBSD, /// OpenBSD dragonFlyBSD, /// DragonFlyBSD solaris, /// Solaris haiku, /// HaikuOS android, /// Android otherPosix, /// Other Posix Systems unknown, /// Unknown } /// The OS that the program was compiled for. version (Win32) OS os = OS.win32; else version (Win64) OS os = OS.win64; else version (Android) OS os = OS.android; else version (linux) OS os = OS.linux; else version (OSX) OS os = OS.osx; else version (iOS) OS os = OS.iOS; else version (tvOS) OS os = OS.tvOS; else version (watchOS) OS os = OS.watchOS; else version (FreeBSD) OS os = OS.freeBSD; else version (NetBSD) OS os = OS.netBSD; else version (OpenBSD) OS os = OS.openBSD; else version (DragonFlyBSD) OS os = OS.dragonFlyBSD; else version (Solaris) OS os = OS.solaris; else version (Haiku) OS os = OS.haiku; else version (Posix) OS os = OS.otherPosix; else OS os = OS.unknown; /++ Byte order endianness. Note: This is intended for cases where you need to deal with endianness at runtime. If you're doing something which should compile differently depending on whether you're compiling on a big endian or little endian machine, then please use `version (BigEndian)` and `version (LittleEndian)`. See_Also: $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) +/ enum Endian { bigEndian, /// Big endian byte order littleEndian /// Little endian byte order } /// The endianness that the program was compiled for. version (LittleEndian) Endian endian = Endian.littleEndian; else Endian endian = Endian.bigEndian; /++ Instruction Set Architecture. Note: This is intended for cases where you need a value representing the instruction set architecture at runtime. If you're doing something which should compile differently depending on instruction set architecture, then please use `version (X86_64)`, `version (ARM)`, etc. See_Also: $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions) +/ enum ISA { x86, /// Intel and AMD 32-bit processors x86_64, /// Intel and AMD 64-bit processors arm, /// The ARM architecture (32-bit) (AArch32 et al) aarch64, /// The Advanced RISC Machine architecture (64-bit) asmJS, /// The asm.js intermediate programming language avr, /// 8-bit Atmel AVR Microcontrollers epiphany, /// The Epiphany architecture ppc, /// The PowerPC architecture, 32-bit ppc64, /// The PowerPC architecture, 64-bit ia64, /// The Itanium architecture (64-bit) mips32, /// The MIPS architecture, 32-bit mips64, /// The MIPS architecture, 64-bit msp430, /// The MSP430 architecture nvptx, /// The Nvidia Parallel Thread Execution (PTX) architecture, 32-bit nvptx64, /// The Nvidia Parallel Thread Execution (PTX) architecture, 64-bit riscv32, /// The RISC-V architecture, 32-bit riscv64, /// The RISC-V architecture, 64-bit sparc, /// The SPARC architecture, 32-bit sparc64, /// The SPARC architecture, 64-bit s390, /// The System/390 architecture, 32-bit systemZ, /// The System Z architecture, 64-bit hppa, /// The HP PA-RISC architecture, 32-bit hppa64, /// The HP PA-RISC architecture, 64-bit sh, /// The SuperH architecture, 32-bit webAssembly, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit alpha, /// The Alpha architecture loongArch32, /// The LoongAtch architecture, 32-bit loongArch64, /// The LoongArch architecture, 64-bit xtensa, /// The Xtensa architecture, 32-bit unknown, /// Unknown } /// The instruction set architecture that the program was compiled for. version (X86) ISA instructionSetArchitecture = ISA.x86; else version (X86_64) ISA instructionSetArchitecture = ISA.x86_64; else version (ARM) ISA instructionSetArchitecture = ISA.arm; else version (AArch64) ISA instructionSetArchitecture = ISA.aarch64; else version (AsmJS) ISA instructionSetArchitecture = ISA.asmJS; else version (AVR) ISA instructionSetArchitecture = ISA.avr; else version (Epiphany) ISA instructionSetArchitecture = ISA.epiphany; else version (PPC) ISA instructionSetArchitecture = ISA.ppc; else version (PPC64) ISA instructionSetArchitecture = ISA.ppc64; else version (IA64) ISA instructionSetArchitecture = ISA.ia64; else version (MIPS32) ISA instructionSetArchitecture = ISA.mips32; else version (MIPS64) ISA instructionSetArchitecture = ISA.mips64; else version (MSP430) ISA instructionSetArchitecture = ISA.msp430; else version (NVPTX) ISA instructionSetArchitecture = ISA.nvptx; else version (NVPTX64) ISA instructionSetArchitecture = ISA.nvptx64; else version (RISCV32) ISA instructionSetArchitecture = ISA.riscv32; else version (RISCV64) ISA instructionSetArchitecture = ISA.riscv64; else version (SPARC) ISA instructionSetArchitecture = ISA.sparc; else version (SPARC64) ISA instructionSetArchitecture = ISA.sparc64; else version (S390) ISA instructionSetArchitecture = ISA.s390; else version (SystemZ) ISA instructionSetArchitecture = ISA.systemZ; else version (HPPA) ISA instructionSetArchitecture = ISA.hppa; else version (HPPA64) ISA instructionSetArchitecture = ISA.hppa64; else version (SH) ISA instructionSetArchitecture = ISA.sh; else version (WebAssembly) ISA instructionSetArchitecture = ISA.webAssembly; else version (Alpha) ISA instructionSetArchitecture = ISA.alpha; else version (LoongArch32) ISA instructionSetArchitecture = ISA.loongArch32; else version (loongArch64) ISA instructionSetArchitecture = ISA.loongArch64; else version (Xtensa) ISA instructionSetArchitecture = ISA.xtensa; else ISA instructionSetArchitecture = ISA.unknown;}
// Written in the D programming language.
//
// NOTE: This must be kept in sync with phobos/sys/system.d
/**
* Information about the target operating system, environment, and CPU.
*
* Copyright: Copyright The D Language Foundation 2000 - 2011
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: $(HTTP digitalmars.com, Walter Bright) and
$(HTTP jmdavisprog.com, Jonathan M Davis)
* Source: $(PHOBOSSRC std/system.d)
*/
module std.system;
immutable
{
/++
Operating system.
Note:
This is for cases where you need a value representing the OS at
runtime. If you're doing something which should compile differently
on different OSes, then please use `version (Windows)`,
`version (linux)`, etc.
See_Also:
$(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
+/
enum OS
{
win32 = 1, /// Microsoft 32 bit Windows systems
win64, /// Microsoft 64 bit Windows systems
linux, /// All Linux Systems, except for Android
osx, /// Mac OS X
iOS, /// iOS
tvOS, /// tvOS
watchOS, /// watchOS
freeBSD, /// FreeBSD
netBSD, /// NetBSD
openBSD, /// OpenBSD
dragonFlyBSD, /// DragonFlyBSD
solaris, /// Solaris
haiku, /// HaikuOS
android, /// Android
otherPosix, /// Other Posix Systems
unknown, /// Unknown
}
/// The OS that the program was compiled for.
version (Win32) OS os = OS.win32;
else version (Win64) OS os = OS.win64;
else version (Android) OS os = OS.android;
else version (linux) OS os = OS.linux;
else version (OSX) OS os = OS.osx;
else version (iOS) OS os = OS.iOS;
else version (tvOS) OS os = OS.tvOS;
else version (watchOS) OS os = OS.watchOS;
else version (FreeBSD) OS os = OS.freeBSD;
else version (NetBSD) OS os = OS.netBSD;
else version (OpenBSD) OS os = OS.openBSD;
else version (DragonFlyBSD) OS os = OS.dragonFlyBSD;
else version (Solaris) OS os = OS.solaris;
else version (Haiku) OS os = OS.haiku;
else version (Posix) OS os = OS.otherPosix;
else OS os = OS.unknown;
/++
Byte order endianness.
Note:
This is intended for cases where you need to deal with endianness at
runtime. If you're doing something which should compile differently
depending on whether you're compiling on a big endian or little
endian machine, then please use `version (BigEndian)` and
`version (LittleEndian)`.
See_Also:
$(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
+/
enum Endian
{
bigEndian, /// Big endian byte order
littleEndian /// Little endian byte order
}
/// The endianness that the program was compiled for.
version (LittleEndian) Endian endian = Endian.littleEndian;
else Endian endian = Endian.bigEndian;
/++
Instruction Set Architecture.
Note:
This is intended for cases where you need a value representing the
instruction set architecture at runtime. If you're doing something
which should compile differently depending on instruction set
architecture, then please use `version (X86_64)`, `version (ARM)`,
etc.
See_Also:
$(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
+/
enum ISA
{
x86, /// Intel and AMD 32-bit processors
x86_64, /// Intel and AMD 64-bit processors
arm, /// The ARM architecture (32-bit) (AArch32 et al)
aarch64, /// The Advanced RISC Machine architecture (64-bit)
asmJS, /// The asm.js intermediate programming language
avr, /// 8-bit Atmel AVR Microcontrollers
epiphany, /// The Epiphany architecture
ppc, /// The PowerPC architecture, 32-bit
ppc64, /// The PowerPC architecture, 64-bit
ia64, /// The Itanium architecture (64-bit)
mips32, /// The MIPS architecture, 32-bit
mips64, /// The MIPS architecture, 64-bit
msp430, /// The MSP430 architecture
nvptx, /// The Nvidia Parallel Thread Execution (PTX) architecture, 32-bit
nvptx64, /// The Nvidia Parallel Thread Execution (PTX) architecture, 64-bit
riscv32, /// The RISC-V architecture, 32-bit
riscv64, /// The RISC-V architecture, 64-bit
sparc, /// The SPARC architecture, 32-bit
sparc64, /// The SPARC architecture, 64-bit
s390, /// The System/390 architecture, 32-bit
systemZ, /// The System Z architecture, 64-bit
hppa, /// The HP PA-RISC architecture, 32-bit
hppa64, /// The HP PA-RISC architecture, 64-bit
sh, /// The SuperH architecture, 32-bit
webAssembly, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit
alpha, /// The Alpha architecture
loongArch32, /// The LoongAtch architecture, 32-bit
loongArch64, /// The LoongArch architecture, 64-bit
xtensa, /// The Xtensa architecture, 32-bit
unknown, /// Unknown
}
/// The instruction set architecture that the program was compiled for.
version (X86) ISA instructionSetArchitecture = ISA.x86;
else version (X86_64) ISA instructionSetArchitecture = ISA.x86_64;
else version (ARM) ISA instructionSetArchitecture = ISA.arm;
else version (AArch64) ISA instructionSetArchitecture = ISA.aarch64;
else version (AsmJS) ISA instructionSetArchitecture = ISA.asmJS;
else version (AVR) ISA instructionSetArchitecture = ISA.avr;
else version (Epiphany) ISA instructionSetArchitecture = ISA.epiphany;
else version (PPC) ISA instructionSetArchitecture = ISA.ppc;
else version (PPC64) ISA instructionSetArchitecture = ISA.ppc64;
else version (IA64) ISA instructionSetArchitecture = ISA.ia64;
else version (MIPS32) ISA instructionSetArchitecture = ISA.mips32;
else version (MIPS64) ISA instructionSetArchitecture = ISA.mips64;
else version (MSP430) ISA instructionSetArchitecture = ISA.msp430;
else version (NVPTX) ISA instructionSetArchitecture = ISA.nvptx;
else version (NVPTX64) ISA instructionSetArchitecture = ISA.nvptx64;
else version (RISCV32) ISA instructionSetArchitecture = ISA.riscv32;
else version (RISCV64) ISA instructionSetArchitecture = ISA.riscv64;
else version (SPARC) ISA instructionSetArchitecture = ISA.sparc;
else version (SPARC64) ISA instructionSetArchitecture = ISA.sparc64;
else version (S390) ISA instructionSetArchitecture = ISA.s390;
else version (SystemZ) ISA instructionSetArchitecture = ISA.systemZ;
else version (HPPA) ISA instructionSetArchitecture = ISA.hppa;
else version (HPPA64) ISA instructionSetArchitecture = ISA.hppa64;
else version (SH) ISA instructionSetArchitecture = ISA.sh;
else version (WebAssembly) ISA instructionSetArchitecture = ISA.webAssembly;
else version (Alpha) ISA instructionSetArchitecture = ISA.alpha;
else version (LoongArch32) ISA instructionSetArchitecture = ISA.loongArch32;
else version (loongArch64) ISA instructionSetArchitecture = ISA.loongArch64;
else version (Xtensa) ISA instructionSetArchitecture = ISA.xtensa;
else ISA instructionSetArchitecture = ISA.unknown;
}