Add optional RS232 debugging
[contiki-2.x.git] / core / sys / cc.h
blob7250f6a875d9dc6d8f9a5b420088ad5a261bbfa2
1 /**
2 * \file
3 * Default definitions of C compiler quirk work-arounds.
4 * \author Adam Dunkels <adam@dunkels.com>
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 */
12 * Copyright (c) 2003, Adam Dunkels.
13 * All rights reserved.
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.
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.
40 * This file is part of the Contiki desktop OS
42 * $Id: cc.h,v 1.6 2008/07/02 08:35:29 adamdunkels Exp $
45 #ifndef __CC_H__
46 #define __CC_H__
48 #include "contiki-conf.h"
50 /**
51 * Configure if the C compiler supports the "register" keyword for
52 * function arguments.
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 */
60 /**
61 * Configure if the C compiler supports the arguments for function
62 * pointers.
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 */
70 /**
71 * Configure if the C compiler supports fastcall function
72 * declarations.
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 */
80 /**
81 * Configure if the C compiler have problems with const function pointers
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 */
89 /**
90 * Configure work-around for unsigned char bugs with sdcc.
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 */
98 /**
99 * Configure if C compiler supports double hash marks in C macros.
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 */
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 */
114 * Configure if the C compiler supports the assignment of struct value.
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 */
122 #if CC_CONF_NO_VA_ARGS
123 #define CC_NO_VA_ARGS CC_CONF_VA_ARGS
124 #endif
126 #ifndef NULL
127 #define NULL 0
128 #endif /* NULL */
130 #define CC_CONCAT2(s1, s2) s1##s2
132 * A C preprocessing macro for concatenating to
133 * strings.
135 * We need use two macros (CC_CONCAT and CC_CONCAT2) in order to allow
136 * concatenation of two #defined macros.
138 #define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)
140 #endif /* __CC_H__ */