added the distro detector
This commit is contained in:
@@ -1,3 +1,130 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
// ========================================================== //
|
||||||
|
// Compiling or Writing? //
|
||||||
|
// ========================================================== //
|
||||||
|
|
||||||
|
#ifdef SPIDER_WRITING
|
||||||
|
#error "[Spider Distro] Please do not set this macro."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef SPIDER_COMPILING
|
||||||
|
#define SPIDER_WRITING
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ========================================================== //
|
||||||
|
// Distro //
|
||||||
|
// ========================================================== //
|
||||||
|
|
||||||
|
#if !defined(SPIDER_DISTRO_DESKTOP) && !defined(SPIDER_DISTRO_MOBILE) && !defined(SPIDER_DISTRO_MICRO) && !defined(SPIDER_DISTRO_BROWSER)
|
||||||
|
// Autodetect distribution and OS
|
||||||
|
#if defined(__EMSCRIPTEN__) || defined(__wasm__)
|
||||||
|
#define SPIDER_DISTRO_BROWSER
|
||||||
|
#define SPIDER_OS_WASM
|
||||||
|
#elif defined(__ANDROID__)
|
||||||
|
#define SPIDER_DISTRO_MOBILE
|
||||||
|
#define SPIDER_OS_ANDROID
|
||||||
|
#elif defined(__APPLE__) && defined(__MACH__)
|
||||||
|
#include <TargetConditionals.h>
|
||||||
|
#if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR
|
||||||
|
#define SPIDER_DISTRO_MOBILE
|
||||||
|
#define SPIDER_OS_IOS
|
||||||
|
#else
|
||||||
|
#define SPIDER_DISTRO_DESKTOP
|
||||||
|
#define SPIDER_OS_MACOS
|
||||||
|
#endif
|
||||||
|
#elif defined(_WIN32) || defined(_WIN64)
|
||||||
|
#define SPIDER_DISTRO_DESKTOP
|
||||||
|
#define SPIDER_OS_WINDOWS
|
||||||
|
#elif defined(__linux__) && !defined(__ANDROID__)
|
||||||
|
#define SPIDER_DISTRO_DESKTOP
|
||||||
|
#define SPIDER_OS_LINUX
|
||||||
|
#elif defined(__unix__) || defined(__unix)
|
||||||
|
#define SPIDER_DISTRO_DESKTOP
|
||||||
|
#define SPIDER_OS_LINUX
|
||||||
|
#else
|
||||||
|
// ========================================================== //
|
||||||
|
// MUST be a microcontroller! //
|
||||||
|
// ========================================================== //
|
||||||
|
#include <spider/config_mcu.hpp>
|
||||||
|
#ifdef SPIDER_DISTRO_MICRO
|
||||||
|
#error "[Spider Distro] Could not autodetect. Please select a distro and OS manually."
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ========================================================== //
|
||||||
|
// Distro and OS specific configuration //
|
||||||
|
// ========================================================== //
|
||||||
|
|
||||||
|
#if defined(SPIDER_DISTRO_DESKTOP)
|
||||||
|
|
||||||
|
#define SPIDER_DISTRO_NAME "Desktop"
|
||||||
|
|
||||||
|
#if !defined(SPIDER_USE_ICU) && !defined(SPIDER_NO_ICU)
|
||||||
|
#define SPIDER_USE_ICU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SPIDER_OS_WINDOWS)
|
||||||
|
#define SPIDER_OS_NAME "Windows"
|
||||||
|
#elif defined(SPIDER_OS_MACOS)
|
||||||
|
#define SPIDER_OS_NAME "Mac OS"
|
||||||
|
#elif defined(SPIDER_OS_LINUX)
|
||||||
|
#define SPIDER_OS_NAME "Linux"
|
||||||
|
#elif
|
||||||
|
#error "[Spider Distro] Unsupported OS"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(SPIDER_DISTRO_MOBILE)
|
||||||
|
|
||||||
|
#define SPIDER_DISTRO_NAME "Mobile"
|
||||||
|
|
||||||
|
#if !defined(SPIDER_USE_ICU) && !defined(SPIDER_NO_ICU)
|
||||||
|
#define SPIDER_no_ICU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SPIDER_OS_ANDROID)
|
||||||
|
#define SPIDER_OS_NAME "Android"
|
||||||
|
#elif defined(SPIDER_OS_IOS)
|
||||||
|
#define SPIDER_OS_NAME "iOS"
|
||||||
|
#elif
|
||||||
|
#error "[Spider Distro] Unsupported OS"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(SPIDER_DISTRO_BROWSER)
|
||||||
|
|
||||||
|
#define SPIDER_DISTRO_NAME "Browser"
|
||||||
|
|
||||||
|
#if !defined(SPIDER_USE_ICU) && !defined(SPIDER_NO_ICU)
|
||||||
|
#define SPIDER_NO_ICU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(SPIDER_OS_WASM)
|
||||||
|
#define SPIDER_OS_NAME "WASM"
|
||||||
|
#elif
|
||||||
|
#error "[Spider Distro] Unsupported OS"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(SPIDER_DISTRO_MICRO)
|
||||||
|
|
||||||
|
#include <spider/runtime/native/distro_mcu.hpp>
|
||||||
|
|
||||||
|
#define SPIDER_DISTRO_NAME "Micro"
|
||||||
|
|
||||||
|
#if !defined(SPIDER_USE_ICU) && !defined(SPIDER_NO_ICU)
|
||||||
|
#define SPIDER_NO_ICU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if define(SPIDER_OS_NONE)
|
||||||
|
#define SPIDER_OS_NAME "None"
|
||||||
|
#elif !defined(SPIDER_OS_MCU)
|
||||||
|
#error "[Spider Distro] Unsupported MCU OS"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "[Spider Distro] Unsupported Distro"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
112
src/spider/runtime/native/distro_mcu.hpp
Normal file
112
src/spider/runtime/native/distro_mcu.hpp
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
// ========================================================== //
|
||||||
|
// SPIDER MICROCONTROLLER AUTODETECT //
|
||||||
|
// ========================================================== //
|
||||||
|
|
||||||
|
// Automatically enable configurations for the microcontroller //
|
||||||
|
// so long as we can detect it or the user has already configured //
|
||||||
|
// the corresponding macros. //
|
||||||
|
|
||||||
|
#define SPIDER_MCU_FAM_GENERIC 0
|
||||||
|
#define SPIDER_MCU_FAM_AVR 1
|
||||||
|
#define SPIDER_MCU_FAM_ARM_CM 2
|
||||||
|
#define SPIDER_MCU_FAM_ARM_MBED 3
|
||||||
|
#define SPIDER_MCU_FAM_PIC 4
|
||||||
|
#define SPIDER_MCU_FAM_PIC32 5
|
||||||
|
#define SPIDER_MCU_FAM_ESP8266 6
|
||||||
|
#define SPIDER_MCU_FAM_ESP32 7
|
||||||
|
#define SPIDER_MCU_FAM_RISCV 8
|
||||||
|
#define SPIDER_MCU_FAM_RP2040 9
|
||||||
|
|
||||||
|
#if defined(SPIDER_MCU_AVR) || defined(__avr__) || defined(__AVR__)
|
||||||
|
// ========================================================== //
|
||||||
|
// AVR (Atmel / Microchip) //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_AVR
|
||||||
|
#define SPIDER_MCU_NAME "AVR"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_ARM) || defined(__arm__) || defined(__ARM_ARCH) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_6M__)
|
||||||
|
// ========================================================== //
|
||||||
|
// ARM Cortex-M (most STM32, nRF, etc.) //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_ARM_CM
|
||||||
|
#define SPIDER_MCU_NAME "ARM Cortex-M"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_MBED) || defined(TARGET_LIKE_MBED)
|
||||||
|
// ========================================================== //
|
||||||
|
// Mbed OS special detection //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_ARM_MBED
|
||||||
|
#define SPIDER_MCU_NAME "ARM MBED"
|
||||||
|
#define SPIDER_OS_NAME "MBED OS"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_PIC8) || defined(__XC) && (defined(_PIC14) || defined(_PIC16))
|
||||||
|
// ========================================================== //
|
||||||
|
// PIC (8-bit) //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_PIC
|
||||||
|
#define SPIDER_MCU_NAME "PIC (8-bit)"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_PIC32) || defined(__XC32__)
|
||||||
|
// ========================================================== //
|
||||||
|
// PIC32 (MIPS) //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_PIC32
|
||||||
|
#define SPIDER_MCU_NAME "PIC (32-bit)"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_ESP8266) || defined(ESP8266)
|
||||||
|
// ========================================================== //
|
||||||
|
// ESP8266 //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_ESP8266
|
||||||
|
#define SPIDER_MCU_NAME "ESP-8266"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_ESP32) || defined(ESP32)
|
||||||
|
// ========================================================== //
|
||||||
|
// ESP32 //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_ESP32
|
||||||
|
#define SPIDER_MCU_NAME "ESP-32"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_PICO) || defined(PICO_PLATFORM) || defined(PICO_BOARD) || defined(RP2040) || defined(__RP2040__)
|
||||||
|
// ========================================================== //
|
||||||
|
// Raspberry Pi Pico (RP2040) //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAM_FAMILY SPIDER_MCU_FAM_RP2040
|
||||||
|
#define SPIDER_MCU_NAME "ESP-32"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_RISCV) || defined(__riscv) || defined(__riscv__)
|
||||||
|
// ========================================================== //
|
||||||
|
// RISC-V MCUs //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_RISCV
|
||||||
|
#define SPIDER_MCU_NAME "RISC-V MCU"
|
||||||
|
|
||||||
|
#elif defined(SPIDER_MCU_GENERIC)
|
||||||
|
// ========================================================== //
|
||||||
|
// GENERIC MICRO //
|
||||||
|
// ========================================================== //
|
||||||
|
#define SPIDER_MCU_FAMILY SPIDER_MCU_FAM_GENERIC
|
||||||
|
#define SPIDER_MCU_NAME "Generic MCU"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef SPIDER_MCU_FAMILY
|
||||||
|
|
||||||
|
#ifndef SPIDER_DISTRO_MICRO
|
||||||
|
#define SPIDER_DISTRO_MICRO
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// If SPIDER_OS_NAME was already defined, implies the SPIDER_MCU_FAM has an OS
|
||||||
|
#if defined(SPIDER_OS_NAME) && !defined(SPIDER_OS_MCU)
|
||||||
|
#define SPIDER_OS_MCU
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// If no SPIDER_MCU_FAM OS defined, then it is NONE
|
||||||
|
#ifndef SPIDER_OS_MCU
|
||||||
|
#define SPIDER_OS_NONE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#elif defined(SPIDER_DISTRO_MICRO)
|
||||||
|
#error "[Spider Distro] Unsupported SPIDER_MCU_FAM. Define SPIDER_MCU_GENERIC and see if works."
|
||||||
|
#endif
|
||||||
@@ -5,7 +5,10 @@
|
|||||||
* things like alignment and type juggling
|
* things like alignment and type juggling
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// === ENDIANESS === //
|
// ========================================================== //
|
||||||
|
// ENDIANNESS //
|
||||||
|
// ========================================================== //
|
||||||
|
|
||||||
// Used by GCC/Clang/WASM/ESP32/RP2040 and most compilers
|
// Used by GCC/Clang/WASM/ESP32/RP2040 and most compilers
|
||||||
#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
|
#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
|
||||||
#define SPIDER_LITTLE_ENDIAN (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
#define SPIDER_LITTLE_ENDIAN (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||||
@@ -31,6 +34,8 @@
|
|||||||
#define SPIDER_LITTLE_ENDIAN 1
|
#define SPIDER_LITTLE_ENDIAN 1
|
||||||
#define SPIDER_BIG_ENDIAN 0
|
#define SPIDER_BIG_ENDIAN 0
|
||||||
// Likely will never use this clause
|
// Likely will never use this clause
|
||||||
|
// ...but keeps compatibility with the one (1)
|
||||||
|
// guy who uses MSVC.
|
||||||
#elif defined(_WIN32) || defined(_M_IX86) || defined(_M_X64)
|
#elif defined(_WIN32) || defined(_M_IX86) || defined(_M_X64)
|
||||||
#define SPIDER_LITTLE_ENDIAN 1
|
#define SPIDER_LITTLE_ENDIAN 1
|
||||||
#define SPIDER_BIG_ENDIAN 0
|
#define SPIDER_BIG_ENDIAN 0
|
||||||
@@ -47,31 +52,23 @@
|
|||||||
#warning "Mixed endian machine detected, unsupported! Be cautious adventurer!"
|
#warning "Mixed endian machine detected, unsupported! Be cautious adventurer!"
|
||||||
#endif
|
#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__)
|
// PACKING //
|
||||||
#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)
|
// Find out what compiler the user is using
|
||||||
#define SPIDER_PLATFORM_RP2040 1
|
#if defined(__clang__)
|
||||||
#elif defined(ESP32) || defined(ARDUINO_ARCH_ESP32)
|
#define SPIDER_COMPILER_CLANG
|
||||||
#define SPIDER_PLATFORM_ESP32 1
|
#define SPIDER_COMPILER_GCC_LIKE
|
||||||
#elif defined(STM32) || defined(ARDUINO_ARCH_STM32)
|
#elif defined(__GNUC__)
|
||||||
#define SPIDER_PLATFORM_STM32 1
|
#define SPIDER_COMPILER_GCC
|
||||||
|
#define SPIDER_COMPILER_GCC_LIKE
|
||||||
|
#elif defined(_MSC_VER)
|
||||||
|
#define SPIDER_COMPILER_MSVC
|
||||||
|
#else
|
||||||
|
#define SPIDER_COMPILER_UNKNOWN
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Macros...
|
// Macros...
|
||||||
|
|||||||
Reference in New Issue
Block a user