#
#
#            Nim's Runtime Library
#        (c) Copyright 2015 Andreas Rumpf
#
#    See the file "copying.txt", included in this
#    distribution, for details about the copyright.
#

## Platform detection for NimScript. This module is included by the system module!
## Do not import it directly!

# CPU architectures have alias names mapped in tools/niminst/makefile.nimf

type
  CpuPlatform* {.pure.} = enum ## the CPU this program will run on.
    none,                      ## unknown CPU
    i386,                      ## 32 bit x86 compatible CPU
    m68k,                      ## M68k based processor
    alpha,                     ## Alpha processor
    powerpc,                   ## 32 bit PowerPC
    powerpc64,                 ## 64 bit PowerPC
    powerpc64el,               ## Little Endian 64 bit PowerPC
    sparc,                     ## Sparc based processor
    sparc64,                   ## 64-bit Sparc based processor
    hppa,                      ## HP PA-RISC
    ia64,                      ## Intel Itanium
    amd64,                     ## x86_64 (AMD64); 64 bit x86 compatible CPU
    mips,                      ## Mips based processor
    mipsel,                    ## Little Endian Mips based processor
    mips64,                    ## 64-bit MIPS processor
    mips64el,                  ## Little Endian 64-bit MIPS processor
    arm,                       ## ARM based processor
    arm64,                     ## ARM64 based processor
    vm,                        ## Some Virtual machine: Nim's VM or JavaScript
    avr,                       ## AVR based processor
    msp430,                    ## TI MSP430 microcontroller
    riscv32,                   ## RISC-V 32-bit processor
    riscv64,                   ## RISC-V 64-bit processor
    wasm32,                    ## WASM, 32-bit
    e2k,                       ## MCST Elbrus 2000
    loongarch64,               ## LoongArch 64-bit processor
    s390x                      ## IBM Z

  OsPlatform* {.pure.} = enum ## the OS this program will run on.
    none, dos, windows, os2, linux, morphos, skyos, solaris,
    irix, netbsd, freebsd, openbsd, aix, palmos, qnx, amiga,
    atari, netware, macos, macosx, haiku, android, js, standalone, nintendoswitch

const
  targetOS* = when defined(windows): OsPlatform.windows
              elif defined(dos): OsPlatform.dos
              elif defined(os2): OsPlatform.os2
              elif defined(linux): OsPlatform.linux
              elif defined(morphos): OsPlatform.morphos
              elif defined(skyos): OsPlatform.skyos
              elif defined(solaris): OsPlatform.solaris
              elif defined(irix): OsPlatform.irix
              elif defined(netbsd): OsPlatform.netbsd
              elif defined(freebsd): OsPlatform.freebsd
              elif defined(openbsd): OsPlatform.openbsd
              elif defined(aix): OsPlatform.aix
              elif defined(palmos): OsPlatform.palmos
              elif defined(qnx): OsPlatform.qnx
              elif defined(amiga): OsPlatform.amiga
              elif defined(atari): OsPlatform.atari
              elif defined(netware): OsPlatform.netware
              elif defined(macosx): OsPlatform.macosx
              elif defined(macos): OsPlatform.macos
              elif defined(haiku): OsPlatform.haiku
              elif defined(android): OsPlatform.android
              elif defined(js): OsPlatform.js
              elif defined(standalone): OsPlatform.standalone
              elif defined(nintendoswitch): OsPlatform.nintendoswitch
              else: OsPlatform.none
    ## the OS this program will run on.

  targetCPU* = when defined(i386): CpuPlatform.i386
               elif defined(m68k): CpuPlatform.m68k
               elif defined(alpha): CpuPlatform.alpha
               elif defined(powerpc): CpuPlatform.powerpc
               elif defined(powerpc64): CpuPlatform.powerpc64
               elif defined(powerpc64el): CpuPlatform.powerpc64el
               elif defined(sparc): CpuPlatform.sparc
               elif defined(sparc64): CpuPlatform.sparc64
               elif defined(hppa): CpuPlatform.hppa
               elif defined(ia64): CpuPlatform.ia64
               elif defined(amd64): CpuPlatform.amd64
               elif defined(mips): CpuPlatform.mips
               elif defined(mipsel): CpuPlatform.mipsel
               elif defined(mips64): CpuPlatform.mips64
               elif defined(mips64el): CpuPlatform.mips64el
               elif defined(arm): CpuPlatform.arm
               elif defined(arm64): CpuPlatform.arm64
               elif defined(vm): CpuPlatform.vm
               elif defined(avr): CpuPlatform.avr
               elif defined(msp430): CpuPlatform.msp430
               elif defined(riscv32): CpuPlatform.riscv32
               elif defined(riscv64): CpuPlatform.riscv64
               elif defined(wasm32): CpuPlatform.wasm32
               elif defined(e2k): CpuPlatform.e2k
               elif defined(loongarch64): CpuPlatform.loongarch64
               elif defined(s390x): CpuPlatform.s390x
               else: CpuPlatform.none
    ## the CPU this program will run on.
