systemdeps.h 4.36 KB
Newer Older
1
/*
2
Copyright (C) 2004-2012 Grame
3
4

This program is free software; you can redistribute it and/or modify
5
6
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __jack_systemdeps_h__
#define __jack_systemdeps_h__

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef POST_PACKED_STRUCTURE

    #ifdef __GNUC__
        /* POST_PACKED_STRUCTURE needs to be a macro which
           expands into a compiler directive. The directive must
           tell the compiler to arrange the preceding structure
           declaration so that it is packed on byte-boundaries rather 
           than use the natural alignment of the processor and/or
           compiler.
        */

        #define PRE_PACKED_STRUCTURE
        #define POST_PACKED_STRUCTURE __attribute__((__packed__))

    #else
    
        #ifdef _MSC_VER
            #define PRE_PACKED_STRUCTURE1 __pragma(pack(push,1))
            #define PRE_PACKED_STRUCTURE    PRE_PACKED_STRUCTURE1
            /* PRE_PACKED_STRUCTURE needs to be a macro which
            expands into a compiler directive. The directive must
            tell the compiler to arrange the following structure
            declaration so that it is packed on byte-boundaries rather
            than use the natural alignment of the processor and/or
            compiler.
            */
            #define POST_PACKED_STRUCTURE ;__pragma(pack(pop))
            /* and POST_PACKED_STRUCTURE needs to be a macro which
            restores the packing to its previous setting */
52
53
54
        #else
            #define PRE_PACKED_STRUCTURE
            #define POST_PACKED_STRUCTURE
55
        #endif /* _MSC_VER */
56

57
    #endif /* __GNUC__ */
58

59
60
#endif

61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(GNU_WIN32)

    #include <windows.h>

    #ifdef _MSC_VER     /* Microsoft compiler */
        #define __inline__ inline
        #if (!defined(int8_t) && !defined(_STDINT_H))
            #define __int8_t_defined
            typedef char int8_t;
            typedef unsigned char uint8_t;
            typedef short int16_t;
            typedef unsigned short uint16_t;
            typedef long int32_t;
            typedef unsigned long uint32_t;
            typedef LONGLONG int64_t;
            typedef ULONGLONG uint64_t;
        #endif
    #elif __MINGW32__   /* MINGW */
        #include <stdint.h>
        #include <sys/types.h>
    #else               /* other compilers ...*/
        #include <inttypes.h>
        #include <pthread.h>
        #include <sys/types.h>
    #endif

    #if !defined(_PTHREAD_H) && !defined(PTHREAD_WIN32)
        /**
         *  to make jack API independent of different thread implementations,
         *  we define jack_native_thread_t to HANDLE here.
         */
        typedef HANDLE jack_native_thread_t;
    #else
        #ifdef PTHREAD_WIN32            // Added by JE - 10-10-2011
            #include <ptw32/pthread.h>  // Makes sure we #include the ptw32 version !
        #endif
        /**
         *  to make jack API independent of different thread implementations,
         *  we define jack_native_thread_t to pthread_t here.
         */
        typedef pthread_t jack_native_thread_t;
102
    #endif
103

104
#endif /* WIN32 && !__CYGWIN__ && !GNU_WIN32 */
105

106
107
#if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun) || defined(__unix__) || defined(__CYGWIN__) || defined(GNU_WIN32)

108
109
110
111
112
113
    #if defined(__CYGWIN__) || defined(GNU_WIN32)
        #include <stdint.h>
    #endif
        #include <inttypes.h>
        #include <pthread.h>
        #include <sys/types.h>
114

115
116
117
118
119
        /**
         *  to make jack API independent of different thread implementations,
         *  we define jack_native_thread_t to pthread_t here.
         */
        typedef pthread_t jack_native_thread_t;
120

121
#endif /* __APPLE__ || __linux__ || __sun__ || sun */
122

123
#if defined(__arm__)
Adrian Knoth's avatar
Adrian Knoth committed
124
125
126
127
    #undef POST_PACKED_STRUCTURE
    #define POST_PACKED_STRUCTURE
#endif /* __arm__ */

128
#endif /* __jack_systemdeps_h__ */