summaryrefslogtreecommitdiff
path: root/src/common/tusb_compiler.h
diff options
context:
space:
mode:
authorWini-Buh <[email protected]>2021-05-29 21:23:39 +0200
committerWini-Buh <[email protected]>2021-05-29 21:23:39 +0200
commitb4f092ec74d85d4e5567ebb45e1bd0dec20f0e02 (patch)
treef325fe267004a5368da6eb2bcd100a6026d46646 /src/common/tusb_compiler.h
parent4e2684f23aacfd9a08046c2a60da50bd1af09a27 (diff)
Adaptations for Renesas CCRX toolchain and Rx72N controller performed
Diffstat (limited to 'src/common/tusb_compiler.h')
-rw-r--r--src/common/tusb_compiler.h92
1 files changed, 88 insertions, 4 deletions
diff --git a/src/common/tusb_compiler.h b/src/common/tusb_compiler.h
index 679060b20..508bb126e 100644
--- a/src/common/tusb_compiler.h
+++ b/src/common/tusb_compiler.h
@@ -48,6 +48,8 @@
#define TU_VERIFY_STATIC _Static_assert
#elif defined (__cplusplus) && __cplusplus >= 201103L
#define TU_VERIFY_STATIC static_assert
+#elif defined(__CCRX__)
+ #define TU_VERIFY_STATIC(const_expr, _mess) typedef char TU_XSTRCAT(Line, __LINE__)[(const_expr) ? 1 : 0];
#else
#define TU_VERIFY_STATIC(const_expr, _mess) enum { TU_XSTRCAT(_verify_static_, _TU_COUNTER_) = 1/(!!(const_expr)) }
#endif
@@ -62,6 +64,9 @@
// Compiler porting with Attribute and Endian
//--------------------------------------------------------------------+
+// define the standard definition of this macro to construct a "weak" function name
+#define MAKE_WEAK_FUNC(func_name) func_name
+
// TODO refactor since __attribute__ is supported across many compiler
#if defined(__GNUC__)
#define TU_ATTR_ALIGNED(Bytes) __attribute__ ((aligned(Bytes)))
@@ -73,9 +78,17 @@
#define TU_ATTR_UNUSED __attribute__ ((unused)) // Function/Variable is meant to be possibly unused
#define TU_ATTR_USED __attribute__ ((used)) // Function/Variable is meant to be used
+ #define TU_PACK_STRUCT_BEGIN
+ #define TU_PACK_STRUCT_END
+
+ #define TU_BIT_FIELD_ORDER_BEGIN
+ #define TU_BIT_FIELD_ORDER_END
+
// Endian conversion use well-known host to network (big endian) naming
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
#define TU_BYTE_ORDER TU_LITTLE_ENDIAN
+ #define TU_ENDIAN_LITTLE_BEGIN
+ #define TU_ENDIAN_LITTLE_END
#else
#define TU_BYTE_ORDER TU_BIG_ENDIAN
#endif
@@ -123,6 +136,77 @@
#define TU_BSWAP16(u16) (__iar_builtin_REV16(u16))
#define TU_BSWAP32(u32) (__iar_builtin_REV(u32))
+
+#elif defined(__CCRX__)
+ #define TU_ATTR_ALIGNED(Bytes)
+ #define TU_ATTR_SECTION(sec_name)
+ #define TU_ATTR_PACKED
+ #define TU_ATTR_WEAK
+ #define TU_ATTR_ALWAYS_INLINE
+ #define TU_ATTR_DEPRECATED(mess)
+ #define TU_ATTR_UNUSED
+ #define TU_ATTR_USED
+
+ #define TU_PACK_STRUCT_BEGIN _Pragma("pack")
+ #define TU_PACK_STRUCT_END _Pragma("packoption")
+
+ #define TU_BIT_FIELD_ORDER_BEGIN _Pragma("bit_order right")
+ #define TU_BIT_FIELD_ORDER_END _Pragma("bit_order")
+
+ // Endian conversion use well-known host to network (big endian) naming
+ #if defined(__LIT)
+ #define TU_BYTE_ORDER TU_LITTLE_ENDIAN
+ #define TU_ENDIAN_LITTLE_BEGIN
+ #define TU_ENDIAN_LITTLE_END
+ #else
+ #define TU_BYTE_ORDER TU_BIG_ENDIAN
+ #define TU_ENDIAN_LITTLE_BEGIN _Pragma("endian little")
+ #define TU_ENDIAN_LITTLE_END _Pragma("endian")
+ #endif
+
+ #define TU_BSWAP16(u16) ((unsigned short)_builtin_revw((unsigned long)u16))
+ #define TU_BSWAP32(u32) (_builtin_revl(u32))
+
+ /* activate the "aligned" emulation, because this toolchain does not know
+ the aligned attribute (or something similar yet) */
+ #define TU_HAS_NO_ATTR_ALIGNED
+
+ /* activate the "weak" function emulation, because this toolchain does not
+ know the weak attribute (or something similar yet) */
+ #define TU_HAS_NO_ATTR_WEAK
+
+ // make sure to define away the standard definition of this macro
+ #undef MAKE_WEAK_FUNC
+ // Helper macro to construct a "weak" function name
+ #define MAKE_WEAK_FUNC(func_name) weak_ ## func_name
+
+ #if defined(TU_HAS_NO_ATTR_WEAK)
+ // "Weak function" emulation defined in cdc_device.h
+ #define ADD_WEAK_FUNC_TUD_CDC_RX_CB 0
+ #define ADD_WEAK_FUNC_TUD_CDC_RX_WANTED_CB 0
+ #define ADD_WEAK_FUNC_TUD_CDC_TX_COMPLETE_CB 0
+ #define ADD_WEAK_FUNC_TUD_CDC_LINE_STATE_CB 0
+ #define ADD_WEAK_FUNC_TUD_CDC_LINE_CODING_CB 0
+ #define ADD_WEAK_FUNC_TUD_CDC_SEND_BREAK_CB 0
+
+ // "Weak function" emulation defined in usbd_pvt.h
+ #define ADD_WEAK_FUNC_USBD_APP_DRIVER_GET_CB 0
+
+ // "Weak function" emulation defined in usbd.h
+ #define ADD_WEAK_FUNC_TUD_DESCRIPTOR_BOS_CB 0
+ #define ADD_WEAK_FUNC_TUD_DESCRIPTOR_DEVICE_QUALIFIER_CB 0
+ #define ADD_WEAK_FUNC_TUD_MOUNT_CB 0
+ #define ADD_WEAK_FUNC_TUD_UMOUNT_CB 0
+ #define ADD_WEAK_FUNC_TUD_SUSPEND_CB 0
+ #define ADD_WEAK_FUNC_TUD_RESUME_CB 0
+ #define ADD_WEAK_FUNC_TUD_VENDOR_CONTROL_XFER_CB 0
+
+ // "Weak function" emulation defined in dcd.h
+ #define ADD_WEAK_FUNC_DCD_EDPT0_STATUS_COMPLETE 0
+ #define ADD_WEAK_FUNC_DCD_EDPT_CLOSE 0
+ #define ADD_WEAK_FUNC_DCD_EDPT_XFER_FIFO 0
+ #endif
+
#else
#error "Compiler attribute porting is required"
#endif
@@ -149,11 +233,11 @@
#define tu_htonl(u32) (u32)
#define tu_ntohl(u32) (u32)
- #define tu_htole16(u16) (tu_bswap16(u16))
- #define tu_le16toh(u16) (tu_bswap16(u16))
+ #define tu_htole16(u16) (TU_BSWAP16(u16))
+ #define tu_le16toh(u16) (TU_BSWAP16(u16))
- #define tu_htole32(u32) (tu_bswap32(u32))
- #define tu_le32toh(u32) (tu_bswap32(u32))
+ #define tu_htole32(u32) (TU_BSWAP32(u32))
+ #define tu_le32toh(u32) (TU_BSWAP32(u32))
#else
#error Byte order is undefined