Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / third_party / ot-br-posix / repo / src / common / toolchain.hpp
1 /*
2  *    Copyright (c) 2021, The OpenThread Authors.
3  *    All rights reserved.
4  *
5  *    Redistribution and use in source and binary forms, with or without
6  *    modification, are permitted provided that the following conditions are met:
7  *    1. Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *    2. Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *    3. Neither the name of the copyright holder nor the
13  *       names of its contributors may be used to endorse or promote products
14  *       derived from this software without specific prior written permission.
15  *
16  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  *    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  *    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  *    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20  *    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  *    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  *    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  *    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  *    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  *    POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #ifndef OTBR_COMMON_TOOLCHAIN_HPP_
30 #define OTBR_COMMON_TOOLCHAIN_HPP_
31
32 /**
33  * @def OTBR_TOOL_PACKED_BEGIN
34  *
35  * Compiler-specific indication that a class or struct must be byte packed.
36  *
37  */
38
39 /**
40  * @def OTBR_TOOL_PACKED_END
41  *
42  * Compiler-specific indication at the end of a byte packed class or struct.
43  *
44  */
45
46 // =========== TOOLCHAIN SELECTION : START ===========
47
48 #if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) || defined(__TI_ARM__)
49
50 // https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
51 // http://www.keil.com/support/man/docs/armcc/armcc_chr1359124973480.htm
52
53 #define OTBR_TOOL_PACKED_BEGIN
54 #define OTBR_TOOL_PACKED_END __attribute__((packed))
55
56 #elif defined(__ICCARM__) || defined(__ICC8051__)
57
58 // http://supp.iar.com/FilesPublic/UPDINFO/004916/arm/doc/EWARM_DevelopmentGuide.ENU.pdf
59
60 #include "intrinsics.h"
61
62 #define OTBR_TOOL_PACKED_BEGIN __packed
63 #define OTBR_TOOL_PACKED_END
64
65 #elif defined(__SDCC)
66
67 // Structures are packed by default in sdcc, as it primarily targets 8-bit MCUs.
68
69 #define OTBR_TOOL_PACKED_BEGIN
70 #define OTBR_TOOL_PACKED_END
71
72 #else
73
74 #error "Error: No valid Toolchain specified"
75
76 // Symbols for Doxygen
77
78 #define OTBR_TOOL_PACKED_BEGIN
79 #define OTBR_TOOL_PACKED_END
80
81 #endif
82
83 #endif // OTBR_COMMON_TOOLCHAIN_HPP_