first ever upload
This commit is contained in:
3
src/spider/runtime/native/distro.hpp
Normal file
3
src/spider/runtime/native/distro.hpp
Normal file
@@ -0,0 +1,3 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
95
src/spider/runtime/native/machine.hpp
Normal file
95
src/spider/runtime/native/machine.hpp
Normal file
@@ -0,0 +1,95 @@
|
||||
#pragma once
|
||||
|
||||
/*
|
||||
* This file contains macros related to machine dependent
|
||||
* things like alignment and type juggling
|
||||
*/
|
||||
|
||||
// === ENDIANESS === //
|
||||
// Used by GCC/Clang/WASM/ESP32/RP2040 and most compilers
|
||||
#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
|
||||
#define SPIDER_LITTLE_ENDIAN (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||
#define SPIDER_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
|
||||
|
||||
// Fallbacks (For older/constrained compilers)
|
||||
#else
|
||||
#if defined(__AVR_ATmega328P__) || defined(__AVR__) // Arduino Uno/ATmega
|
||||
#define SPIDER_LITTLE_ENDIAN 1
|
||||
#define SPIDER_BIG_ENDIAN 0
|
||||
#elif defined(__wasm__) || defined(__wasm32__) // WebAssembly
|
||||
#define SPIDER_LITTLE_ENDIAN 1
|
||||
#define SPIDER_BIG_ENDIAN 0
|
||||
#elif defined(__arm__) || defined(__thumb__) // RP2040, STM32, etc.
|
||||
#if defined(__ARMEB__)
|
||||
#define SPIDER_LITTLE_ENDIAN 0
|
||||
#define SPIDER_BIG_ENDIAN 1
|
||||
#else
|
||||
#define SPIDER_LITTLE_ENDIAN 1
|
||||
#define SPIDER_BIG_ENDIAN 0
|
||||
#endif
|
||||
#elif defined(__xtensa__) || defined(__ESP32__) // ESP32
|
||||
#define SPIDER_LITTLE_ENDIAN 1
|
||||
#define SPIDER_BIG_ENDIAN 0
|
||||
// Likely will never use this clause
|
||||
#elif defined(_WIN32) || defined(_M_IX86) || defined(_M_X64)
|
||||
#define SPIDER_LITTLE_ENDIAN 1
|
||||
#define SPIDER_BIG_ENDIAN 0
|
||||
#else
|
||||
#error "Unsupported or unknown architecture endianness!"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Safety checks
|
||||
#if !defined(SPIDER_LITTLE_ENDIAN) || !defined(SPIDER_BIG_ENDIAN)
|
||||
#error "Missed at least one little/big endian macros"
|
||||
#endif
|
||||
#if SPIDER_LITTLE_ENDIAN == 1 && SPIDER_BIG_ENDIAN == 1
|
||||
#warning "Mixed endian machine detected, unsupported! Be cautious adventurer!"
|
||||
#endif
|
||||
|
||||
// === PACKING === //
|
||||
// TODO: move somewhere else
|
||||
#if defined(__clang__)
|
||||
#define SPIDER_COMPILER_CLANG 1
|
||||
#define SPIDER_COMPILER_GCC_LIKE 1
|
||||
#elif defined(__GNUC__)
|
||||
#define SPIDER_COMPILER_GCC 1
|
||||
#define SPIDER_COMPILER_GCC_LIKE 1
|
||||
#elif defined(_MSC_VER)
|
||||
#define SPIDER_COMPILER_MSVC 1
|
||||
#else
|
||||
#define SPIDER_COMPILER_UNKNOWN 1
|
||||
#endif
|
||||
|
||||
// TODO: Ditto of whatever I already have
|
||||
#if defined(__EMSCRIPTEN__) || defined(__wasm__)
|
||||
#define SPIDER_PLATFORM_WASM 1
|
||||
#elif defined(__AVR_ATmega328P__) || defined(__AVR__)
|
||||
#define SPIDER_PLATFORM_AVR 1 // ATmega328
|
||||
#elif defined(ARDUINO_ARCH_RP2040) || defined(PICO_BOARD)
|
||||
#define SPIDER_PLATFORM_RP2040 1
|
||||
#elif defined(ESP32) || defined(ARDUINO_ARCH_ESP32)
|
||||
#define SPIDER_PLATFORM_ESP32 1
|
||||
#elif defined(STM32) || defined(ARDUINO_ARCH_STM32)
|
||||
#define SPIDER_PLATFORM_STM32 1
|
||||
#endif
|
||||
|
||||
// Macros...
|
||||
#if defined(SPIDER_COMPILER_GCC_LIKE)
|
||||
#define SPIDER_ATTRIBUTE_PACKED __attribute__((packed))
|
||||
#define SPIDER_PACKED_STRUCT(decl) decl SPIDER_ATTRIBUTE_PACKED
|
||||
|
||||
#elif defined(SPIDER_COMPILER_MSVC)
|
||||
#define SPIDER_BEGIN_PACKED __pragma(pack(push, 1))
|
||||
#define SPIDER_END_PACKED __pragma(pack(pop))
|
||||
#define SPIDER_PACKED_STRUCT(decl) SPIDER_BEGIN_PACKED decl SPIDER_END_PACKED
|
||||
|
||||
#else
|
||||
#define SPIDER_ATTRIBUTE_PACKED
|
||||
#define SPIDER_BEGIN_PACKED
|
||||
#define SPIDER_END_PACKED
|
||||
#define SPIDER_PACKED_STRUCT(decl) decl
|
||||
#warning "MODEM: Compiler packing not supported. Memory layout may be unstable!"
|
||||
#endif
|
||||
|
||||
namespace spider {}
|
||||
Reference in New Issue
Block a user