Contiki 2.5
cc.h
Go to the documentation of this file.
1 /**
2  * \file
3  * Default definitions of C compiler quirk work-arounds.
4  * \author Adam Dunkels <adam@dunkels.com>
5  *
6  * This file is used for making use of extra functionality of some C
7  * compilers used for Contiki, and defining work-arounds for various
8  * quirks and problems with some other C compilers.
9  */
10 
11 /*
12  * Copyright (c) 2003, Adam Dunkels.
13  * All rights reserved.
14  *
15  * Redistribution and use in source and binary forms, with or without
16  * modification, are permitted provided that the following conditions
17  * are met:
18  * 1. Redistributions of source code must retain the above copyright
19  * notice, this list of conditions and the following disclaimer.
20  * 2. Redistributions in binary form must reproduce the above
21  * copyright notice, this list of conditions and the following
22  * disclaimer in the documentation and/or other materials provided
23  * with the distribution.
24  * 3. The name of the author may not be used to endorse or promote
25  * products derived from this software without specific prior
26  * written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
29  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
30  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
32  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
34  * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
35  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39  *
40  * This file is part of the Contiki desktop OS
41  *
42  * $Id: cc.h,v 1.6 2008/07/02 08:35:29 adamdunkels Exp $
43  *
44  */
45 #ifndef __CC_H__
46 #define __CC_H__
47 
48 #include "contiki-conf.h"
49 
50 /**
51  * Configure if the C compiler supports the "register" keyword for
52  * function arguments.
53  */
54 #if CC_CONF_REGISTER_ARGS
55 #define CC_REGISTER_ARG register
56 #else /* CC_CONF_REGISTER_ARGS */
57 #define CC_REGISTER_ARG
58 #endif /* CC_CONF_REGISTER_ARGS */
59 
60 /**
61  * Configure if the C compiler supports the arguments for function
62  * pointers.
63  */
64 #if CC_CONF_FUNCTION_POINTER_ARGS
65 #define CC_FUNCTION_POINTER_ARGS 1
66 #else /* CC_CONF_FUNCTION_POINTER_ARGS */
67 #define CC_FUNCTION_POINTER_ARGS 0
68 #endif /* CC_CONF_FUNCTION_POINTER_ARGS */
69 
70 /**
71  * Configure if the C compiler supports fastcall function
72  * declarations.
73  */
74 #ifdef CC_CONF_FASTCALL
75 #define CC_FASTCALL CC_CONF_FASTCALL
76 #else /* CC_CONF_FASTCALL */
77 #define CC_FASTCALL
78 #endif /* CC_CONF_FASTCALL */
79 
80 /**
81  * Configure if the C compiler have problems with const function pointers
82  */
83 #ifdef CC_CONF_CONST_FUNCTION_BUG
84 #define CC_CONST_FUNCTION
85 #else /* CC_CONF_FASTCALL */
86 #define CC_CONST_FUNCTION const
87 #endif /* CC_CONF_FASTCALL */
88 
89 /**
90  * Configure work-around for unsigned char bugs with sdcc.
91  */
92 #if CC_CONF_UNSIGNED_CHAR_BUGS
93 #define CC_UNSIGNED_CHAR_BUGS 1
94 #else /* CC_CONF_UNSIGNED_CHAR_BUGS */
95 #define CC_UNSIGNED_CHAR_BUGS 0
96 #endif /* CC_CONF_UNSIGNED_CHAR_BUGS */
97 
98 /**
99  * Configure if C compiler supports double hash marks in C macros.
100  */
101 #if CC_CONF_DOUBLE_HASH
102 #define CC_DOUBLE_HASH 1
103 #else /* CC_CONF_DOUBLE_HASH */
104 #define CC_DOUBLE_HASH 0
105 #endif /* CC_CONF_DOUBLE_HASH */
106 
107 #ifdef CC_CONF_INLINE
108 #define CC_INLINE CC_CONF_INLINE
109 #else /* CC_CONF_INLINE */
110 #define CC_INLINE
111 #endif /* CC_CONF_INLINE */
112 
113 /**
114  * Configure if the C compiler supports the assignment of struct value.
115  */
116 #ifdef CC_CONF_ASSIGN_AGGREGATE
117 #define CC_ASSIGN_AGGREGATE(dest, src) CC_CONF_ASSIGN_AGGREGATE(dest, src)
118 #else /* CC_CONF_ASSIGN_AGGREGATE */
119 #define CC_ASSIGN_AGGREGATE(dest, src) *dest = *src
120 #endif /* CC_CONF_ASSIGN_AGGREGATE */
121 
122 #if CC_CONF_NO_VA_ARGS
123 #define CC_NO_VA_ARGS CC_CONF_VA_ARGS
124 #endif
125 
126 #ifndef NULL
127 #define NULL 0
128 #endif /* NULL */
129 
130 #define CC_CONCAT2(s1, s2) s1##s2
131 /**
132  * A C preprocessing macro for concatenating to
133  * strings.
134  *
135  * We need use two macros (CC_CONCAT and CC_CONCAT2) in order to allow
136  * concatenation of two #defined macros.
137  */
138 #define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)
139 
140 #endif /* __CC_H__ */