xref: /xnu-8020.121.3/bsd/net/cc.h (revision fdd8201d7b966f0c3ea610489d29bd841d358941)
1*fdd8201dSApple OSS Distributions /*
2*fdd8201dSApple OSS Distributions  * Copyright (c) 2017 Apple Inc. All rights reserved.
3*fdd8201dSApple OSS Distributions  *
4*fdd8201dSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*fdd8201dSApple OSS Distributions  *
6*fdd8201dSApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*fdd8201dSApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*fdd8201dSApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*fdd8201dSApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*fdd8201dSApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*fdd8201dSApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*fdd8201dSApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*fdd8201dSApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*fdd8201dSApple OSS Distributions  *
15*fdd8201dSApple OSS Distributions  * Please obtain a copy of the License at
16*fdd8201dSApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*fdd8201dSApple OSS Distributions  *
18*fdd8201dSApple OSS Distributions  * The Original Code and all software distributed under the License are
19*fdd8201dSApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*fdd8201dSApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*fdd8201dSApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*fdd8201dSApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*fdd8201dSApple OSS Distributions  * Please see the License for the specific language governing rights and
24*fdd8201dSApple OSS Distributions  * limitations under the License.
25*fdd8201dSApple OSS Distributions  *
26*fdd8201dSApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*fdd8201dSApple OSS Distributions  */
28*fdd8201dSApple OSS Distributions /*
29*fdd8201dSApple OSS Distributions  * Copyright (c) 2003, Adam Dunkels.
30*fdd8201dSApple OSS Distributions  * All rights reserved.
31*fdd8201dSApple OSS Distributions  *
32*fdd8201dSApple OSS Distributions  * Redistribution and use in source and binary forms, with or without
33*fdd8201dSApple OSS Distributions  * modification, are permitted provided that the following conditions
34*fdd8201dSApple OSS Distributions  * are met:
35*fdd8201dSApple OSS Distributions  * 1. Redistributions of source code must retain the above copyright
36*fdd8201dSApple OSS Distributions  *    notice, this list of conditions and the following disclaimer.
37*fdd8201dSApple OSS Distributions  * 2. Redistributions in binary form must reproduce the above
38*fdd8201dSApple OSS Distributions  *    copyright notice, this list of conditions and the following
39*fdd8201dSApple OSS Distributions  *    disclaimer in the documentation and/or other materials provided
40*fdd8201dSApple OSS Distributions  *    with the distribution.
41*fdd8201dSApple OSS Distributions  * 3. The name of the author may not be used to endorse or promote
42*fdd8201dSApple OSS Distributions  *    products derived from this software without specific prior
43*fdd8201dSApple OSS Distributions  *    written permission.
44*fdd8201dSApple OSS Distributions  *
45*fdd8201dSApple OSS Distributions  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
46*fdd8201dSApple OSS Distributions  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47*fdd8201dSApple OSS Distributions  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48*fdd8201dSApple OSS Distributions  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
49*fdd8201dSApple OSS Distributions  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50*fdd8201dSApple OSS Distributions  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
51*fdd8201dSApple OSS Distributions  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52*fdd8201dSApple OSS Distributions  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
53*fdd8201dSApple OSS Distributions  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
54*fdd8201dSApple OSS Distributions  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
55*fdd8201dSApple OSS Distributions  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
56*fdd8201dSApple OSS Distributions  *
57*fdd8201dSApple OSS Distributions  * This file is part of the Contiki desktop OS
58*fdd8201dSApple OSS Distributions  *
59*fdd8201dSApple OSS Distributions  *
60*fdd8201dSApple OSS Distributions  */
61*fdd8201dSApple OSS Distributions 
62*fdd8201dSApple OSS Distributions /**
63*fdd8201dSApple OSS Distributions  * \file
64*fdd8201dSApple OSS Distributions  * Default definitions of C compiler quirk work-arounds.
65*fdd8201dSApple OSS Distributions  * \author Adam Dunkels <[email protected]>
66*fdd8201dSApple OSS Distributions  *
67*fdd8201dSApple OSS Distributions  * This file is used for making use of extra functionality of some C
68*fdd8201dSApple OSS Distributions  * compilers used for Contiki, and defining work-arounds for various
69*fdd8201dSApple OSS Distributions  * quirks and problems with some other C compilers.
70*fdd8201dSApple OSS Distributions  */
71*fdd8201dSApple OSS Distributions 
72*fdd8201dSApple OSS Distributions #ifndef CC_H_
73*fdd8201dSApple OSS Distributions #define CC_H_
74*fdd8201dSApple OSS Distributions 
75*fdd8201dSApple OSS Distributions #include "contiki-conf.h"
76*fdd8201dSApple OSS Distributions 
77*fdd8201dSApple OSS Distributions /**
78*fdd8201dSApple OSS Distributions  * Configure if the C compiler supports the "register" keyword for
79*fdd8201dSApple OSS Distributions  * function arguments.
80*fdd8201dSApple OSS Distributions  */
81*fdd8201dSApple OSS Distributions #if CC_CONF_REGISTER_ARGS
82*fdd8201dSApple OSS Distributions #define CC_REGISTER_ARG register
83*fdd8201dSApple OSS Distributions #else /* CC_CONF_REGISTER_ARGS */
84*fdd8201dSApple OSS Distributions #define CC_REGISTER_ARG
85*fdd8201dSApple OSS Distributions #endif /* CC_CONF_REGISTER_ARGS */
86*fdd8201dSApple OSS Distributions 
87*fdd8201dSApple OSS Distributions /**
88*fdd8201dSApple OSS Distributions  * Configure if the C compiler supports the arguments for function
89*fdd8201dSApple OSS Distributions  * pointers.
90*fdd8201dSApple OSS Distributions  */
91*fdd8201dSApple OSS Distributions #if CC_CONF_FUNCTION_POINTER_ARGS
92*fdd8201dSApple OSS Distributions #define CC_FUNCTION_POINTER_ARGS 1
93*fdd8201dSApple OSS Distributions #else /* CC_CONF_FUNCTION_POINTER_ARGS */
94*fdd8201dSApple OSS Distributions #define CC_FUNCTION_POINTER_ARGS 0
95*fdd8201dSApple OSS Distributions #endif /* CC_CONF_FUNCTION_POINTER_ARGS */
96*fdd8201dSApple OSS Distributions 
97*fdd8201dSApple OSS Distributions /**
98*fdd8201dSApple OSS Distributions  * Configure if the C compiler supports fastcall function
99*fdd8201dSApple OSS Distributions  * declarations.
100*fdd8201dSApple OSS Distributions  */
101*fdd8201dSApple OSS Distributions #ifdef CC_CONF_FASTCALL
102*fdd8201dSApple OSS Distributions #define CC_FASTCALL CC_CONF_FASTCALL
103*fdd8201dSApple OSS Distributions #else /* CC_CONF_FASTCALL */
104*fdd8201dSApple OSS Distributions #define CC_FASTCALL
105*fdd8201dSApple OSS Distributions #endif /* CC_CONF_FASTCALL */
106*fdd8201dSApple OSS Distributions 
107*fdd8201dSApple OSS Distributions /**
108*fdd8201dSApple OSS Distributions  * Configure if the C compiler have problems with const function pointers
109*fdd8201dSApple OSS Distributions  */
110*fdd8201dSApple OSS Distributions #ifdef CC_CONF_CONST_FUNCTION_BUG
111*fdd8201dSApple OSS Distributions #define CC_CONST_FUNCTION
112*fdd8201dSApple OSS Distributions #else /* CC_CONF_FASTCALL */
113*fdd8201dSApple OSS Distributions #define CC_CONST_FUNCTION const
114*fdd8201dSApple OSS Distributions #endif /* CC_CONF_FASTCALL */
115*fdd8201dSApple OSS Distributions 
116*fdd8201dSApple OSS Distributions /**
117*fdd8201dSApple OSS Distributions  * Configure work-around for unsigned char bugs with sdcc.
118*fdd8201dSApple OSS Distributions  */
119*fdd8201dSApple OSS Distributions #if CC_CONF_UNSIGNED_CHAR_BUGS
120*fdd8201dSApple OSS Distributions #define CC_UNSIGNED_CHAR_BUGS 1
121*fdd8201dSApple OSS Distributions #else /* CC_CONF_UNSIGNED_CHAR_BUGS */
122*fdd8201dSApple OSS Distributions #define CC_UNSIGNED_CHAR_BUGS 0
123*fdd8201dSApple OSS Distributions #endif /* CC_CONF_UNSIGNED_CHAR_BUGS */
124*fdd8201dSApple OSS Distributions 
125*fdd8201dSApple OSS Distributions /**
126*fdd8201dSApple OSS Distributions  * Configure if C compiler supports double hash marks in C macros.
127*fdd8201dSApple OSS Distributions  */
128*fdd8201dSApple OSS Distributions #if CC_CONF_DOUBLE_HASH
129*fdd8201dSApple OSS Distributions #define CC_DOUBLE_HASH 1
130*fdd8201dSApple OSS Distributions #else /* CC_CONF_DOUBLE_HASH */
131*fdd8201dSApple OSS Distributions #define CC_DOUBLE_HASH 0
132*fdd8201dSApple OSS Distributions #endif /* CC_CONF_DOUBLE_HASH */
133*fdd8201dSApple OSS Distributions 
134*fdd8201dSApple OSS Distributions #ifdef CC_CONF_INLINE
135*fdd8201dSApple OSS Distributions #define CC_INLINE CC_CONF_INLINE
136*fdd8201dSApple OSS Distributions #else /* CC_CONF_INLINE */
137*fdd8201dSApple OSS Distributions #define CC_INLINE
138*fdd8201dSApple OSS Distributions #endif /* CC_CONF_INLINE */
139*fdd8201dSApple OSS Distributions 
140*fdd8201dSApple OSS Distributions /**
141*fdd8201dSApple OSS Distributions  * Configure if the C compiler supports the assignment of struct value.
142*fdd8201dSApple OSS Distributions  */
143*fdd8201dSApple OSS Distributions #ifdef CC_CONF_ASSIGN_AGGREGATE
144*fdd8201dSApple OSS Distributions #define CC_ASSIGN_AGGREGATE(dest, src)  CC_CONF_ASSIGN_AGGREGATE(dest, src)
145*fdd8201dSApple OSS Distributions #else /* CC_CONF_ASSIGN_AGGREGATE */
146*fdd8201dSApple OSS Distributions #define CC_ASSIGN_AGGREGATE(dest, src)  *dest = *src
147*fdd8201dSApple OSS Distributions #endif /* CC_CONF_ASSIGN_AGGREGATE */
148*fdd8201dSApple OSS Distributions 
149*fdd8201dSApple OSS Distributions #if CC_CONF_NO_VA_ARGS
150*fdd8201dSApple OSS Distributions #define CC_NO_VA_ARGS CC_CONF_VA_ARGS
151*fdd8201dSApple OSS Distributions #endif
152*fdd8201dSApple OSS Distributions 
153*fdd8201dSApple OSS Distributions #ifndef NULL
154*fdd8201dSApple OSS Distributions #define NULL 0
155*fdd8201dSApple OSS Distributions #endif /* NULL */
156*fdd8201dSApple OSS Distributions 
157*fdd8201dSApple OSS Distributions #ifndef MAX
158*fdd8201dSApple OSS Distributions #define MAX(n, m)   (((n) < (m)) ? (m) : (n))
159*fdd8201dSApple OSS Distributions #endif
160*fdd8201dSApple OSS Distributions 
161*fdd8201dSApple OSS Distributions #ifndef MIN
162*fdd8201dSApple OSS Distributions #define MIN(n, m)   (((n) < (m)) ? (n) : (m))
163*fdd8201dSApple OSS Distributions #endif
164*fdd8201dSApple OSS Distributions 
165*fdd8201dSApple OSS Distributions #ifndef ABS
166*fdd8201dSApple OSS Distributions #define ABS(n)      (((n) < 0) ? -(n) : (n))
167*fdd8201dSApple OSS Distributions #endif
168*fdd8201dSApple OSS Distributions 
169*fdd8201dSApple OSS Distributions 
170*fdd8201dSApple OSS Distributions #define CC_CONCAT2(s1, s2) s1##s2
171*fdd8201dSApple OSS Distributions /**
172*fdd8201dSApple OSS Distributions  * A C preprocessing macro for concatenating two preprocessor tokens.
173*fdd8201dSApple OSS Distributions  *
174*fdd8201dSApple OSS Distributions  * We need use two macros (CC_CONCAT and CC_CONCAT2) in order to allow
175*fdd8201dSApple OSS Distributions  * concatenation of two \#defined macros.
176*fdd8201dSApple OSS Distributions  */
177*fdd8201dSApple OSS Distributions #define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)
178*fdd8201dSApple OSS Distributions #define CC_CONCAT_EXT_2(s1, s2) CC_CONCAT2(s1, s2)
179*fdd8201dSApple OSS Distributions 
180*fdd8201dSApple OSS Distributions /**
181*fdd8201dSApple OSS Distributions  * A C preprocessing macro for concatenating three preprocessor tokens.
182*fdd8201dSApple OSS Distributions  */
183*fdd8201dSApple OSS Distributions #define CC_CONCAT3(s1, s2, s3) s1##s2##s3
184*fdd8201dSApple OSS Distributions #define CC_CONCAT_EXT_3(s1, s2, s3) CC_CONCAT3(s1, s2, s3)
185*fdd8201dSApple OSS Distributions 
186*fdd8201dSApple OSS Distributions #endif /* CC_H_ */
187