compiler.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /*
  2. * Copyright (c) mlibc & plct lab
  3. *
  4. * SPDX-License-Identifier: MIT
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2024/5/6 0Bitbiscuits the first version
  9. */
  10. #ifndef MLIBC_COMPILER_H__
  11. #define MLIBC_COMPILER_H__
  12. #if defined(__ARMCC_VERSION) /* ARM Compiler */
  13. #define mlibc_section(x) __attribute__((section(x)))
  14. #define mlibc_used __attribute__((used))
  15. #define mlibc_align(n) __attribute__((aligned(n)))
  16. #define mlibc_weak __attribute__((weak))
  17. #define mlibc_neck
  18. #define mlibc_typeof typeof
  19. #define mlibc_noreturn
  20. #define mlibc_inline static __inline
  21. #define mlibc_always_inline mlibc_inline
  22. #elif defined (__IAR_SYSTEMS_ICC__) /* for IAR Compiler */
  23. #define mlibc_section(x) @ x
  24. #define mlibc_used __root
  25. #define PRAGMA(x) _Pragma(#x)
  26. #define mlibc_align(n) PRAGMA(data_alignment=n)
  27. #define mlibc_weak __weak
  28. #define mlibc_neck
  29. #define mlibc_typeof __typeof
  30. #define mlibc_noreturn
  31. #define mlibc_inline static inline
  32. #define mlibc_always_inline mlibc_inline
  33. #elif defined (__GNUC__) /* GNU GCC Compiler */
  34. #define mlibc_section(x) __attribute__((section(x)))
  35. #define mlibc_used __attribute__((used))
  36. #define mlibc_align(n) __attribute__((aligned(n)))
  37. #define mlibc_weak __attribute__((weak))
  38. #define mlibc_neck __attribute__((naked))
  39. #define mlibc_typeof __typeof__
  40. #define mlibc_noreturn __attribute__ ((noreturn))
  41. #define mlibc_inline static __inline
  42. #define mlibc_always_inline static inline __attribute__((always_inline))
  43. #else /* Unkown Compiler */
  44. #error not supported tool chain
  45. #endif /* __ARMCC_VERSION */
  46. #endif /* MLIBC_COMPILER_H__ */