1 // Written in the D programming language.
4 * Information about the target operating system, environment, and CPU.
6 * Copyright: Copyright The D Language Foundation 2000 - 2011
7 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
8 * Authors: $(HTTP digitalmars.com, Walter Bright) and
9 $(HTTP jmdavisprog.com, Jonathan M Davis)
10 * Source: $(PHOBOSSRC std/system.d)
20 This is for cases where you need a value representing the OS at
21 runtime. If you're doing something which should compile differently
22 on different OSes, then please use `version (Windows)`,
23 `version (linux)`, etc.
26 $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
30 win32
= 1, /// Microsoft 32 bit Windows systems
31 win64
, /// Microsoft 64 bit Windows systems
32 linux
, /// All Linux Systems, except for Android
40 dragonFlyBSD
, /// DragonFlyBSD
43 otherPosix
, /// Other Posix Systems
47 /// The OS that the program was compiled for.
48 version (Win32
) OS os
= OS
.win32
;
49 else version (Win64
) OS os
= OS
.win64
;
50 else version (Android
) OS os
= OS
.android
;
51 else version (linux
) OS os
= OS
.linux
;
52 else version (OSX
) OS os
= OS
.osx
;
53 else version (iOS
) OS os
= OS
.iOS
;
54 else version (tvOS
) OS os
= OS
.tvOS
;
55 else version (watchOS
) OS os
= OS
.watchOS
;
56 else version (FreeBSD
) OS os
= OS
.freeBSD
;
57 else version (NetBSD
) OS os
= OS
.netBSD
;
58 else version (OpenBSD
) OS os
= OS
.openBSD
;
59 else version (DragonFlyBSD
) OS os
= OS
.dragonFlyBSD
;
60 else version (Posix
) OS os
= OS
.otherPosix
;
61 else OS os
= OS
.unknown
;
64 Byte order endianness.
67 This is intended for cases where you need to deal with endianness at
68 runtime. If you're doing something which should compile differently
69 depending on whether you're compiling on a big endian or little
70 endian machine, then please use `version (BigEndian)` and
71 `version (LittleEndian)`.
74 $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
78 bigEndian
, /// Big endian byte order
79 littleEndian
/// Little endian byte order
82 /// The endianness that the program was compiled for.
83 version (LittleEndian
) Endian endian
= Endian
.littleEndian
;
84 else Endian endian
= Endian
.bigEndian
;
86 Instruction Set Architecture.
89 This is intended for cases where you need a value representing the
90 instruction set architecture at runtime. If you're doing something
91 which should compile differently depending on instruction set
92 architecture, then please use `version (X86_64)`, `version (ARM)`,
96 $(DDSUBLINK spec/version,PredefinedVersions, Predefined Versions)
100 x86
, /// Intel and AMD 32-bit processors
101 x86_64
, /// Intel and AMD 64-bit processors
102 arm
, /// The ARM architecture (32-bit) (AArch32 et al)
103 aarch64
, /// The Advanced RISC Machine architecture (64-bit)
104 asmJS
, /// The asm.js intermediate programming language
105 avr
, /// 8-bit Atmel AVR Microcontrollers
106 epiphany
, /// The Epiphany architecture
107 ppc
, /// The PowerPC architecture, 32-bit
108 ppc64
, /// The PowerPC architecture, 64-bit
109 ia64
, /// The Itanium architecture (64-bit)
110 mips32
, /// The MIPS architecture, 32-bit
111 mips64
, /// The MIPS architecture, 64-bit
112 msp430
, /// The MSP430 architecture
113 nvptx
, /// The Nvidia Parallel Thread Execution (PTX) architecture, 32-bit
114 nvptx64
, /// The Nvidia Parallel Thread Execution (PTX) architecture, 64-bit
115 riscv32
, /// The RISC-V architecture, 32-bit
116 riscv64
, /// The RISC-V architecture, 64-bit
117 sparc
, /// The SPARC architecture, 32-bit
118 sparc64
, /// The SPARC architecture, 64-bit
119 s390
, /// The System/390 architecture, 32-bit
120 systemZ
, /// The System Z architecture, 64-bit
121 hppa
, /// The HP PA-RISC architecture, 32-bit
122 hppa64
, /// The HP PA-RISC architecture, 64-bit
123 sh
, /// The SuperH architecture, 32-bit
124 webAssembly
, /// The WebAssembly virtual ISA (instruction set architecture), 32-bit
125 alpha
, /// The Alpha architecture
129 /// The instruction set architecture that the program was compiled for.
130 version (X86
) ISA instructionSetArchitecture
= ISA
.x86
;
131 else version (X86_64
) ISA instructionSetArchitecture
= ISA
.x86_64
;
132 else version (ARM
) ISA instructionSetArchitecture
= ISA
.arm
;
133 else version (AArch64
) ISA instructionSetArchitecture
= ISA
.aarch64
;
134 else version (AsmJS
) ISA instructionSetArchitecture
= ISA
.asmJS
;
135 else version (AVR
) ISA instructionSetArchitecture
= ISA
.avr
;
136 else version (Epiphany
) ISA instructionSetArchitecture
= ISA
.epiphany
;
137 else version (PPC
) ISA instructionSetArchitecture
= ISA
.ppc
;
138 else version (PPC64
) ISA instructionSetArchitecture
= ISA
.ppc64
;
139 else version (IA64
) ISA instructionSetArchitecture
= ISA
.ia64
;
140 else version (MIPS32
) ISA instructionSetArchitecture
= ISA
.mips32
;
141 else version (MIPS64
) ISA instructionSetArchitecture
= ISA
.mips64
;
142 else version (MSP430
) ISA instructionSetArchitecture
= ISA
.msp430
;
143 else version (NVPTX
) ISA instructionSetArchitecture
= ISA
.nvptx
;
144 else version (NVPTX64
) ISA instructionSetArchitecture
= ISA
.nvptx64
;
145 else version (RISCV32
) ISA instructionSetArchitecture
= ISA
.riscv32
;
146 else version (RISCV64
) ISA instructionSetArchitecture
= ISA
.riscv64
;
147 else version (SPARC
) ISA instructionSetArchitecture
= ISA
.sparc
;
148 else version (SPARC64
) ISA instructionSetArchitecture
= ISA
.sparc64
;
149 else version (S390
) ISA instructionSetArchitecture
= ISA
.s390
;
150 else version (SystemZ
) ISA instructionSetArchitecture
= ISA
.systemZ
;
151 else version (HPPA
) ISA instructionSetArchitecture
= ISA
.hppa
;
152 else version (HPPA64
) ISA instructionSetArchitecture
= ISA
.hppa64
;
153 else version (SH
) ISA instructionSetArchitecture
= ISA
.sh
;
154 else version (WebAssembly
) ISA instructionSetArchitecture
= ISA
.webAssembly
;
155 else version (Alpha
) ISA instructionSetArchitecture
= ISA
.alpha
;
156 else ISA instructionSetArchitecture
= ISA
.unknown
;