mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-02 11:12:31 +00:00
Add `ODIN_PLATFORM_SUBTARGET_IOS` builtin constant which evaluated to `true` when the platform is `Darwin` and the subtarget it either `iPhone` or `iPhoneSimulator`
355 lines
11 KiB
Odin
355 lines
11 KiB
Odin
// This is purely for documentation
|
|
package builtin
|
|
|
|
import "base:runtime"
|
|
|
|
nil :: nil
|
|
false :: 0!=0
|
|
true :: 0==0
|
|
|
|
// The following constants are added in `checker.cpp`'s `init_universal` procedure.
|
|
|
|
/*
|
|
An `enum` value indicating the target's CPU architecture.
|
|
Possible values are: `.amd64`, `.i386`, `.arm32`, `.arm64`, `.wasm32`, `.wasm64p32`, and `.riscv64`.
|
|
*/
|
|
ODIN_ARCH :: ODIN_ARCH
|
|
|
|
/*
|
|
A `string` indicating the target's CPU architecture.
|
|
Possible values are: "amd64", "i386", "arm32", "arm64", "wasm32", "wasm64p32", "riscv64".
|
|
*/
|
|
ODIN_ARCH_STRING :: ODIN_ARCH_STRING
|
|
|
|
/*
|
|
An `enum` value indicating the type of compiled output, chosen using `-build-mode`.
|
|
Possible values are: `.Executable`, `.Dynamic`, `.Static`, `.Object`, `.Assembly`, and `.LLVM_IR`.
|
|
*/
|
|
ODIN_BUILD_MODE :: ODIN_BUILD_MODE
|
|
|
|
/*
|
|
A `string` containing the name of the folder that contains the entry point,
|
|
e.g. for `%ODIN_ROOT%/examples/demo`, this would contain `demo`.
|
|
*/
|
|
ODIN_BUILD_PROJECT_NAME :: ODIN_BUILD_PROJECT_NAME
|
|
|
|
/*
|
|
An `i64` containing the time at which the executable was compiled, in nanoseconds.
|
|
This is compatible with the `time.Time` type, i.e. `time.Time{_nsec=ODIN_COMPILE_TIMESTAMP}`
|
|
*/
|
|
ODIN_COMPILE_TIMESTAMP :: ODIN_COMPILE_TIMESTAMP
|
|
|
|
/*
|
|
`true` if the `-debug` command line switch is passed, which enables debug info generation.
|
|
*/
|
|
ODIN_DEBUG :: ODIN_DEBUG
|
|
|
|
/*
|
|
`true` if the `-default-to-nil-allocator` command line switch is passed,
|
|
which sets the initial `context.allocator` to an allocator that does nothing.
|
|
*/
|
|
ODIN_DEFAULT_TO_NIL_ALLOCATOR :: ODIN_DEFAULT_TO_NIL_ALLOCATOR
|
|
|
|
/*
|
|
`true` if the `-default-to-panic-allocator` command line switch is passed,
|
|
which sets the initial `context.allocator` to an allocator that panics if allocated from.
|
|
*/
|
|
ODIN_DEFAULT_TO_PANIC_ALLOCATOR :: ODIN_DEFAULT_TO_PANIC_ALLOCATOR
|
|
|
|
/*
|
|
`true` if the `-disable-assert` command line switch is passed,
|
|
which removes all calls to `assert` from the program.
|
|
*/
|
|
ODIN_DISABLE_ASSERT :: ODIN_DISABLE_ASSERT
|
|
|
|
/*
|
|
An `enum` value indicating the endianness of the target.
|
|
Possible values are: `.Little` and `.Big`.
|
|
*/
|
|
ODIN_ENDIAN :: ODIN_ENDIAN
|
|
|
|
/*
|
|
An `string` indicating the endianness of the target.
|
|
Possible values are: "little" and "big".
|
|
*/
|
|
ODIN_ENDIAN_STRING :: ODIN_ENDIAN_STRING
|
|
|
|
/*
|
|
An `enum` value set using the `-error-pos-style` switch, indicating the source location style used for compile errors and warnings.
|
|
Possible values are: `.Default` (Odin-style) and `.Unix`.
|
|
*/
|
|
ODIN_ERROR_POS_STYLE :: ODIN_ERROR_POS_STYLE
|
|
|
|
/*
|
|
`true` if the `-foreign-error-procedures` command line switch is passed,
|
|
which inhibits generation of runtime error procedures, so that they can be in a separate compilation unit.
|
|
*/
|
|
ODIN_FOREIGN_ERROR_PROCEDURES :: ODIN_FOREIGN_ERROR_PROCEDURES
|
|
|
|
/*
|
|
A `string` describing the microarchitecture used for code generation.
|
|
If not set using the `-microarch` command line switch, the compiler will pick a default.
|
|
Possible values include, but are not limited to: "sandybridge", "x86-64-v2".
|
|
*/
|
|
ODIN_MICROARCH_STRING :: ODIN_MICROARCH_STRING
|
|
|
|
/*
|
|
An `int` value representing the minimum OS version given to the linker, calculated as `major * 10_000 + minor * 100 + revision`.
|
|
If not set using the `-minimum-os-version` command line switch, it defaults to `0`, except on Darwin, where it's `11_00_00`.
|
|
*/
|
|
ODIN_MINIMUM_OS_VERSION :: ODIN_MINIMUM_OS_VERSION
|
|
|
|
/*
|
|
`true` if the `-no-bounds-check` command line switch is passed, which disables bounds checking at runtime.
|
|
*/
|
|
ODIN_NO_BOUNDS_CHECK :: ODIN_NO_BOUNDS_CHECK
|
|
|
|
/*
|
|
`true` if the `-no-crt` command line switch is passed, which inhibits linking with the C Runtime Library, a.k.a. LibC.
|
|
*/
|
|
ODIN_NO_CRT :: ODIN_NO_CRT
|
|
|
|
/*
|
|
`true` if the `-no-entry-point` command line switch is passed, which makes the declaration of a `main` procedure optional.
|
|
*/
|
|
ODIN_NO_ENTRY_POINT :: ODIN_NO_ENTRY_POINT
|
|
|
|
/*
|
|
`true` if the `-no-rtti` command line switch is passed, which inhibits generation of full Runtime Type Information.
|
|
*/
|
|
ODIN_NO_RTTI :: ODIN_NO_RTTI
|
|
|
|
/*
|
|
`true` if the `-no-type-assert` command line switch is passed, which disables type assertion checking program wide.
|
|
*/
|
|
ODIN_NO_TYPE_ASSERT :: ODIN_NO_TYPE_ASSERT
|
|
|
|
/*
|
|
An `enum` value indicating the optimization level selected using the `-o` command line switch.
|
|
Possible values are: `.None`, `.Minimal`, `.Size`, `.Speed`, and `.Aggressive`.
|
|
|
|
If `ODIN_OPTIMIZATION_MODE` is anything other than `.None` or `.Minimal`, the compiler will also perform a unity build,
|
|
and `ODIN_USE_SEPARATE_MODULES` will be set to `false` as a result.
|
|
*/
|
|
ODIN_OPTIMIZATION_MODE :: ODIN_OPTIMIZATION_MODE
|
|
|
|
/*
|
|
An `enum` value indicating what the target operating system is.
|
|
*/
|
|
ODIN_OS :: ODIN_OS
|
|
|
|
/*
|
|
A `string` indicating what the target operating system is.
|
|
*/
|
|
ODIN_OS_STRING :: ODIN_OS_STRING
|
|
|
|
/*
|
|
An `enum` value indicating the platform subtarget, chosen using the `-subtarget` switch.
|
|
Possible values are: `.Default` `.iPhone`, .iPhoneSimulator, and `.Android`.
|
|
*/
|
|
ODIN_PLATFORM_SUBTARGET :: ODIN_PLATFORM_SUBTARGET
|
|
|
|
/*
|
|
A `string` representing the path of the folder containing the Odin compiler,
|
|
relative to which we expect to find the `base` and `core` package collections.
|
|
*/
|
|
ODIN_ROOT :: ODIN_ROOT
|
|
|
|
/*
|
|
A `bit_set` indicating the sanitizer flags set using the `-sanitize` command line switch.
|
|
Supported flags are `.Address`, `.Memory`, and `.Thread`.
|
|
*/
|
|
ODIN_SANITIZER_FLAGS :: ODIN_SANITIZER_FLAGS
|
|
|
|
/*
|
|
`true` if the code is being compiled via an invocation of `odin test`.
|
|
*/
|
|
ODIN_TEST :: ODIN_TEST
|
|
|
|
/*
|
|
`true` if built using the experimental Tilde backend.
|
|
*/
|
|
ODIN_TILDE :: ODIN_TILDE
|
|
|
|
/*
|
|
`true` by default, meaning each each package is built into its own object file, and then linked together.
|
|
`false` if the `-use-single-module` command line switch to force a unity build is provided.
|
|
|
|
If `ODIN_OPTIMIZATION_MODE` is anything other than `.None` or `.Minimal`, the compiler will also perform a unity build,
|
|
and this constant will also be set to `false`.
|
|
*/
|
|
ODIN_USE_SEPARATE_MODULES :: ODIN_USE_SEPARATE_MODULES
|
|
|
|
/*
|
|
`true` if Valgrind integration is supported on the target.
|
|
*/
|
|
ODIN_VALGRIND_SUPPORT :: ODIN_VALGRIND_SUPPORT
|
|
|
|
/*
|
|
A `string` which identifies the compiler being used. The official compiler sets this to `"odin"`.
|
|
*/
|
|
ODIN_VENDOR :: ODIN_VENDOR
|
|
|
|
/*
|
|
A `string` containing the version of the Odin compiler, typically in the format `dev-YYYY-MM`.
|
|
*/
|
|
ODIN_VERSION :: ODIN_VERSION
|
|
|
|
/*
|
|
A `string` containing the Git hash part of the Odin version.
|
|
Empty if `.git` could not be detected at the time the compiler was built.
|
|
*/
|
|
ODIN_VERSION_HASH :: ODIN_VERSION_HASH
|
|
|
|
/*
|
|
An `enum` set by the `-subsystem` flag, specifying which Windows subsystem the PE file was created for.
|
|
Possible values are:
|
|
`.Unknown` - Default and only value on non-Windows platforms
|
|
`.Console` - Default on Windows
|
|
`.Windows` - Can be used by graphical applications so Windows doesn't open an empty console
|
|
|
|
There are some other possible values for e.g. EFI applications, but only Console and Windows are supported.
|
|
|
|
See also: https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header64
|
|
*/
|
|
ODIN_WINDOWS_SUBSYSTEM :: ODIN_WINDOWS_SUBSYSTEM
|
|
|
|
/*
|
|
An `string` set by the `-subsystem` flag, specifying which Windows subsystem the PE file was created for.
|
|
Possible values are:
|
|
"UNKNOWN" - Default and only value on non-Windows platforms
|
|
"CONSOLE" - Default on Windows
|
|
"WINDOWS" - Can be used by graphical applications so Windows doesn't open an empty console
|
|
|
|
There are some other possible values for e.g. EFI applications, but only Console and Windows are supported.
|
|
|
|
See also: https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header64
|
|
*/
|
|
ODIN_WINDOWS_SUBSYSTEM_STRING :: ODIN_WINDOWS_SUBSYSTEM_STRING
|
|
|
|
/*
|
|
`true` if LLVM supports the f16 type.
|
|
*/
|
|
__ODIN_LLVM_F16_SUPPORTED :: __ODIN_LLVM_F16_SUPPORTED
|
|
|
|
|
|
|
|
byte :: u8 // alias
|
|
|
|
bool :: bool
|
|
b8 :: b8
|
|
b16 :: b16
|
|
b32 :: b32
|
|
b64 :: b64
|
|
|
|
i8 :: i8
|
|
u8 :: u8
|
|
i16 :: i16
|
|
u16 :: u16
|
|
i32 :: i32
|
|
u32 :: u32
|
|
i64 :: i64
|
|
u64 :: u64
|
|
|
|
i128 :: i128
|
|
u128 :: u128
|
|
|
|
rune :: rune
|
|
|
|
f16 :: f16
|
|
f32 :: f32
|
|
f64 :: f64
|
|
|
|
complex32 :: complex32
|
|
complex64 :: complex64
|
|
complex128 :: complex128
|
|
|
|
quaternion64 :: quaternion64
|
|
quaternion128 :: quaternion128
|
|
quaternion256 :: quaternion256
|
|
|
|
int :: int
|
|
uint :: uint
|
|
uintptr :: uintptr
|
|
|
|
rawptr :: rawptr
|
|
string :: string
|
|
cstring :: cstring
|
|
any :: any
|
|
|
|
typeid :: typeid
|
|
|
|
// Endian Specific Types
|
|
i16le :: i16le
|
|
u16le :: u16le
|
|
i32le :: i32le
|
|
u32le :: u32le
|
|
i64le :: i64le
|
|
u64le :: u64le
|
|
i128le :: i128le
|
|
u128le :: u128le
|
|
|
|
i16be :: i16be
|
|
u16be :: u16be
|
|
i32be :: i32be
|
|
u32be :: u32be
|
|
i64be :: i64be
|
|
u64be :: u64be
|
|
i128be :: i128be
|
|
u128be :: u128be
|
|
|
|
|
|
f16le :: f16le
|
|
f32le :: f32le
|
|
f64le :: f64le
|
|
|
|
f16be :: f16be
|
|
f32be :: f32be
|
|
f64be :: f64be
|
|
|
|
|
|
|
|
// Procedures
|
|
len :: proc(array: Array_Type) -> int ---
|
|
cap :: proc(array: Array_Type) -> int ---
|
|
|
|
size_of :: proc($T: typeid) -> int ---
|
|
align_of :: proc($T: typeid) -> int ---
|
|
|
|
// e.g. offset_of(t.f), where t is an instance of the type T
|
|
offset_of_selector :: proc(selector: $T) -> uintptr ---
|
|
// e.g. offset_of(T, f), where T can be the type instead of a variable
|
|
offset_of_member :: proc($T: typeid, member: $M) -> uintptr ---
|
|
offset_of :: proc{offset_of_selector, offset_of_member}
|
|
// e.g. offset_of(T, "f"), where T can be the type instead of a variable
|
|
offset_of_by_string :: proc($T: typeid, member: string) -> uintptr ---
|
|
|
|
type_of :: proc(x: expr) -> type ---
|
|
type_info_of :: proc($T: typeid) -> ^runtime.Type_Info ---
|
|
typeid_of :: proc($T: typeid) -> typeid ---
|
|
|
|
swizzle :: proc(x: [N]T, indices: ..int) -> [len(indices)]T ---
|
|
|
|
complex :: proc(real, imag: Float) -> Complex_Type ---
|
|
quaternion :: proc(imag, jmag, kmag, real: Float) -> Quaternion_Type --- // fields must be named
|
|
real :: proc(value: Complex_Or_Quaternion) -> Float ---
|
|
imag :: proc(value: Complex_Or_Quaternion) -> Float ---
|
|
jmag :: proc(value: Quaternion) -> Float ---
|
|
kmag :: proc(value: Quaternion) -> Float ---
|
|
conj :: proc(value: Complex_Or_Quaternion) -> Complex_Or_Quaternion ---
|
|
|
|
expand_values :: proc(value: Struct_Or_Array) -> (A, B, C, ...) ---
|
|
compress_values :: proc(values: ...) -> Struct_Or_Array_Like_Type ---
|
|
|
|
min :: proc(values: ..T) -> T ---
|
|
max :: proc(values: ..T) -> T ---
|
|
abs :: proc(value: T) -> T ---
|
|
clamp :: proc(value, minimum, maximum: T) -> T ---
|
|
|
|
soa_zip :: proc(slices: ...) -> #soa[]Struct ---
|
|
soa_unzip :: proc(value: $S/#soa[]$E) -> (slices: ...) ---
|
|
|
|
unreachable :: proc() -> ! ---
|
|
|
|
// Where T is a string, slice, dynamic array, or pointer to an array type
|
|
raw_data :: proc(t: $T) -> rawptr |