UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
Platform.hpp
[詳解]
1//
2// プラットフォーム定義
3//
4// Copyright (c) 2022-2024 udonrobo
5//
6// 次のマクロが定義されます。新たにプラットフォームを追加する場合は、これらのマクロを適切に定義してください。
7//
8// UDON_PLATFORM_HAS_STL (0 or 1) C++標準ライブラリを使用できるか
9// UDON_PLATFORM_HAS_SERIAL_PRINTF (0 or 1) Serial.printf(...) を使用できるか
10// UDON_PLATFORM_OUTPUT_STREAM (UDON_PLATFORM_OUTPUT_SERIAL or UDON_PLATFORM_OUTPUT_CONSOLE) 標準出力先
11// UDON_PLATFORM_ENDIANNESS (UDON_PLATFORM_LITTLE_ENDIAN or UDON_PLATFORM_BIG_ENDIAN) エンディアン
12// UDON_PLATFORM_ENABLE_EXCEPTION (0 or 1) 例外を使用できるか
13//
14
15#pragma once
16
17// UDON_PLATFORM_OUTPUT_STREAM
18#define UDON_PLATFORM_OUTPUT_SERIAL 0
19#define UDON_PLATFORM_OUTPUT_CONSOLE 1
20
21// UDON_PLATFORM_ENDIANNESS
22#define UDON_PLATFORM_LITTLE_ENDIAN 0
23#define UDON_PLATFORM_BIG_ENDIAN 1
24
25//-------------------------------------------------------------------
26//
27// Arduino Nano / Uno / Mega
28//
29//-------------------------------------------------------------------
30
31#if defined(ARDUINO_AVR_NANO) || defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_MEGA) || defined(ARDUINO_AVR_MEGA2560)
32
33# define UDON_PLATFORM_HAS_STL 0
34# define UDON_PLATFORM_HAS_SERIAL_PRINTF 0
35# define UDON_PLATFORM_OUTPUT_STREAM UDON_PLATFORM_OUTPUT_SERIAL
36# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_LITTLE_ENDIAN
37# define UDON_PLATFORM_ENABLE_EXCEPTION 0
38
39//-------------------------------------------------------------------
40//
41// Teensy
42//
43//-------------------------------------------------------------------
44
45#elif defined(TEENSYDUINO)
46
47# define UDON_PLATFORM_HAS_STL 1
48# define UDON_PLATFORM_HAS_SERIAL_PRINTF 1
49# define UDON_PLATFORM_OUTPUT_STREAM UDON_PLATFORM_OUTPUT_SERIAL
50# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_LITTLE_ENDIAN
51# define UDON_PLATFORM_ENABLE_EXCEPTION 0
52
53//-------------------------------------------------------------------
54//
55// Raspberry Pi Pico
56//
57//-------------------------------------------------------------------
58
59#elif defined(ARDUINO_ARCH_RP2040)
60
61# define UDON_PLATFORM_HAS_STL 1
62# define UDON_PLATFORM_HAS_SERIAL_PRINTF 1
63# define UDON_PLATFORM_OUTPUT_STREAM UDON_PLATFORM_OUTPUT_SERIAL
64# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_LITTLE_ENDIAN
65# define UDON_PLATFORM_ENABLE_EXCEPTION 0
66
67//-------------------------------------------------------------------
68//
69// msvc
70//
71//-------------------------------------------------------------------
72
73#elif defined(_MSC_VER)
74
75# pragma warning(disable : 4819)
76# define UDON_PLATFORM_OUTPUT_STREAM UDON_PLATFORM_OUTPUT_CONSOLE
77# define UDON_PLATFORM_ENABLE_EXCEPTION 1
78
79//-------------------------------------------------------------------
80//
81// gcc
82//
83//-------------------------------------------------------------------
84
85#elif defined(__GNUC__)
86
87# define UDON_PLATFORM_OUTPUT_STREAM UDON_PLATFORM_OUTPUT_CONSOLE
88# define UDON_PLATFORM_ENABLE_EXCEPTION 1
89
90//-------------------------------------------------------------------
91//
92// 未定義のプラットフォーム
93//
94//-------------------------------------------------------------------
95
96#else
97# error "Platform is not defined!"
98#endif
99
100//-------------------------------------------------------------------
101//
102// 意地でも定義してやるで^^~
103//
104//-------------------------------------------------------------------
105
106#ifndef UDON_PLATFORM_HAS_STL
107# define UDON_PLATFORM_HAS_STL __has_include(<vector>)
108#endif
109
110#ifndef UDON_PLATFORM_ENDIANNESS
111
112# if __has_include(<endian.h>)
113# include <endian.h>
114# endif
115# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__)
116# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
117# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_LITTLE_ENDIAN
118# elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
119# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_BIG_ENDIAN
120# endif
121# elif defined(_M_IX86) || defined(_M_X64) || defined(_M_IA64) || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_AMD64) || defined(_M_MRX000) || defined(_M_PPC) || defined(_M_ALPHA) || defined(_M_SH)
122# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_LITTLE_ENDIAN
123# elif defined(_MIPSEB) || defined(_POWER) || defined(__s390__)
124# define UDON_PLATFORM_ENDIANNESS UDON_PLATFORM_BIG_ENDIAN
125# else
126# error "Unknown Endian"
127# endif
128
129#endif
130
131//-------------------------------------------------------------------
132//
133// 未定義チェック
134//
135//-------------------------------------------------------------------
136
137#ifndef UDON_PLATFORM_HAS_STL
138# error "UDON_PLATFORM_HAS_STL is not defined!"
139#endif
140
141#ifndef UDON_PLATFORM_OUTPUT_STREAM
142# error "UDON_PLATFORM_OUTPUT_STREAM is not defined!"
143#endif
144
145#if UDON_PLATFORM_OUTPUT_STREAM == UDON_PLATFORM_OUTPUT_SERIAL
146# ifndef UDON_PLATFORM_HAS_SERIAL_PRINTF
147# error "UDON_PLATFORM_HAS_SERIAL_PRINTF is not defined!"
148# endif
149#endif
150
151#ifndef UDON_PLATFORM_ENDIANNESS
152# error "UDON_PLATFORM_ENDIANNESS is not defined!"
153#endif
154
155#ifndef UDON_PLATFORM_ENABLE_EXCEPTION
156# error "UDON_PLATFORM_ENABLE_EXCEPTION is not defined!"
157#endif