package core:sys/info

Warning: This was generated for -target:windows_amd64 and might not represet every target this package supports.

⌘K
Ctrl+K
or
/

    Overview

    Copyright 2022 Jeroen van Rijn <nom@duclavier.com>. Made available under Odin's BSD-3 license.

    Package core:sys/info gathers system information on: Windows, Linux, macOS, FreeBSD & OpenBSD.

    Simply import the package and you'll have access to the OS version, RAM amount and CPU information.

    On Windows, GPUs will also be enumerated using the registry.

    CPU feature flags can be tested against cpu_features, where applicable, e.g. if .aes in si.aes { ... }

    Example Windows output:

    Odin:  dev-2022-09
    OS:    Windows 10 Professional (version: 20H2), build: 19042.1466
    OS:    OS_Version{
    	platform = "Windows",
    	major = 10,
    	minor = 0,
    	patch = 0,
    	build = [
    		19042,
    		1466,
    	],
    	version = "20H2",
    	as_string = "Windows 10 Professional (version: 20H2), build: 19042.1466",
    }
    CPU:   AMD Ryzen 7 1800X Eight-Core Processor
    RAM:   65469 MiB
    GPU #0:
    	Vendor: Advanced Micro Devices, Inc.
    	Model:  Radeon RX Vega
    	VRAM:   8176 MiB
    
    

    Example macOS output:

    ODIN: dev-2022-09
    OS:   OS_Version{
    		platform = "MacOS",
    		major = 21,
    		minor = 5,
    		patch = 0,
    		build = [
    				0,
    				0,
    		],
    		version = "21F79",
    		as_string = "macOS Monterey 12.4 (build 21F79, kernel 21.5.0)",
    }
    CPU:  Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
    RAM:  8192 MiB
    
    Example:
    import "core:fmt"
    import si "core:sys/info"
    
    main :: proc() {
    	fmt.printf("Odin:  %v\n",     ODIN_VERSION)
    	fmt.printf("OS:    %v\n",     si.os_version.as_string)
    	fmt.printf("OS:    %#v\n",    si.os_version)
    	fmt.printf("CPU:   %v\n",     si.cpu_name)
    	fmt.printf("RAM:   %v MiB\n", si.ram.total_ram / 1024 / 1024)
    
    	fmt.println()
    	for gpu, i in si.gpus {
    		fmt.printf("GPU #%v:\n", i)
    		fmt.printf("\tVendor: %v\n",     gpu.vendor_name)
    		fmt.printf("\tModel:  %v\n",     gpu.model_name)
    		fmt.printf("\tVRAM:   %v MiB\n", gpu.total_ram / 1024 / 1024)
    	}
    }
    

    Index

    Constants (0)

    This section is empty.

    Procedures (3)
    Procedure Groups (0)

    This section is empty.

    Types

    CPU_Feature ¶

    CPU_Feature :: enum u64 {
    	aes,       // AES hardware implementation (AES NI)
    	adx,       // Multi-precision add-carry instruction extensions
    	avx,       // Advanced vector extension
    	avx2,      // Advanced vector extension 2
    	bmi1,      // Bit manipulation instruction set 1
    	bmi2,      // Bit manipulation instruction set 2
    	erms,      // Enhanced REP for MOVSB and STOSB
    	fma,       // Fused-multiply-add instructions
    	os_xsave,  // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
    	pclmulqdq, // PCLMULQDQ instruction - most often used for AES-GCM
    	popcnt,    // Hamming weight instruction POPCNT.
    	rdrand,    // RDRAND instruction (on-chip random number generator)
    	rdseed,    // RDSEED instruction (on-chip random number generator)
    	sse2,      // Streaming SIMD extension 2 (always available on amd64)
    	sse3,      // Streaming SIMD extension 3
    	ssse3,     // Supplemental streaming SIMD extension 3
    	sse41,     // Streaming SIMD extension 4 and 4.1
    	sse42,     // Streaming SIMD extension 4 and 4.2
    }

    CPU_Features ¶

    CPU_Features :: distinct bit_set[CPU_Feature; u64]

    GPU ¶

    GPU :: struct {
    	vendor_name: string,
    	model_name:  string,
    	total_ram:   int,
    }

    OS_Version ¶

    OS_Version :: struct {
    	platform:  OS_Version_Platform,
    	major:     int,
    	minor:     int,
    	patch:     int,
    	build:     [2]int,
    	version:   string,
    	as_string: string,
    }

    OS_Version_Platform ¶

    OS_Version_Platform :: enum int {
    	Unknown, 
    	Windows, 
    	Linux, 
    	MacOS, 
    	iOS, 
    	FreeBSD, 
    	OpenBSD, 
    	NetBSD, 
    }

    RAM ¶

    RAM :: struct {
    	total_ram:  int,
    	free_ram:   int,
    	total_swap: int,
    	free_swap:  int,
    }

    Constants

    This section is empty.

    Variables

    cpu_features ¶

    cpu_features: runtime.Maybe($T=CPU_Features)

    cpu_name ¶

    cpu_name: runtime.Maybe($T=string)

    Procedures

    cpuid ¶

    cpuid :: intrinsics.x86_cpuid
     

    cpuid :: proc(ax, cx: u32) -> (eax, ebc, ecx, edx: u32) ---

    init_ram ¶

    init_ram :: proc() {…}

    xgetbv ¶

    xgetbv :: intrinsics.x86_xgetbv
     

    xgetbv :: proc(cx: u32) -> (eax, edx: u32) ---

    Procedure Groups

    This section is empty.

    Source Files

    Generation Information

    Generated with odin version dev-2024-04 (vendor "odin") Windows_amd64 @ 2024-04-26 21:08:58.692687400 +0000 UTC