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