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