IsoSpec  1.95
platform.h
1 
2 #pragma once
3 
4 #if !defined(ISOSPEC_BUILDING_R)
5 #define ISOSPEC_BUILDING_R false
6 #endif
7 
8 #if !defined(ISOSPEC_BUILDING_CPP)
9 #define ISOSPEC_BUILDING_CPP true
10 #endif
11 
12 #if !defined(ISOSPEC_BUILDING_PYTHON)
13 #define ISOSPEC_BUILDING_PYTHON false
14 #endif
15 
16 #if !defined(ISOSPEC_BUILDING_OPENMS)
17 #define ISOSPEC_BUILDING_OPENMS false
18 #endif
19 
20 #if defined(__unix__) || defined(__unix) || \
21  (defined(__APPLE__) && defined(__MACH__))
22 #define ISOSPEC_TEST_WE_ARE_ON_UNIX_YAY true
23 #define ISOSPEC_TEST_WE_ARE_ON_WINDOWS false /* CYGWIN doesn't really count as Windows for our purposes, we'll be using UNIX API anyway */
24 #define ISOSPEC_TEST_GOT_SYSTEM_MMAN true
25 #define ISOSPEC_TEST_GOT_MMAN true
26 #elif defined(__MINGW32__) || defined(_WIN32)
27 #define ISOSPEC_TEST_WE_ARE_ON_UNIX_YAY false
28 #define ISOSPEC_TEST_WE_ARE_ON_WINDOWS true
29 #define ISOSPEC_TEST_GOT_SYSTEM_MMAN false
30 #define ISOSPEC_TEST_GOT_MMAN true
31 #else
32 #define ISOSPEC_TEST_WE_ARE_ON_UNIX_YAY false /* Well, probably... */
33 #define ISOSPEC_TEST_WE_ARE_ON_WINDOWS false
34 #define ISOSPEC_TEST_GOT_SYSTEM_MMAN false
35 #define ISOSPEC_TEST_GOT_MMAN false
36 #endif
37 
38 #if !defined(ISOSPEC_USE_PTHREADS)
39 #define ISOSPEC_USE_PTHREADS false /* TODO: possibly put a macro here to detect whether we */
40 #endif /* can/should use pthreads - or rip them out altogether.
41  * Investigate whether the performance advantage of pthreads on
42  * some platforms (*cough* CYGWIN *cough*) is still large
43  * enough to justify keeping both implementations around */
44 
45 #if !defined(ISOSPEC_WE_ARE_ON_UNIX_YAY)
46 #define ISOSPEC_WE_ARE_ON_UNIX_YAY ISOSPEC_TEST_WE_ARE_ON_UNIX_YAY
47 #endif
48 
49 #if !defined(ISOSPEC_WE_ARE_ON_WINDOWS)
50 #define ISOSPEC_WE_ARE_ON_WINDOWS ISOSPEC_TEST_WE_ARE_ON_WINDOWS
51 #endif
52 
53 #if !defined(ISOSPEC_GOT_SYSTEM_MMAN)
54 #define ISOSPEC_GOT_SYSTEM_MMAN ISOSPEC_TEST_GOT_SYSTEM_MMAN
55 #endif
56 
57 #if !defined(ISOSPEC_GOT_MMAN)
58 #define ISOSPEC_GOT_MMAN ISOSPEC_TEST_GOT_MMAN
59 #endif
60 
61 
62 // Note: __GNUC__ is defined by clang and gcc
63 #ifdef __GNUC__
64 #define ISOSPEC_LIKELY(condition) __builtin_expect(static_cast<bool>(condition), 1)
65 #define ISOSPEC_UNLIKELY(condition) __builtin_expect(static_cast<bool>(condition), 0)
66 // For aggressive inlining
67 #define ISOSPEC_FORCE_INLINE __attribute__ ((always_inline)) inline
68 #elif defined _MSC_VER
69 #define ISOSPEC_LIKELY(condition) condition
70 #define ISOSPEC_UNLIKELY(condition) condition
71 #define ISOSPEC_FORCE_INLINE __forceinline inline
72 #else
73 #define ISOSPEC_LIKELY(condition) condition
74 #define ISOSPEC_UNLIKELY(condition) condition
75 #define ISOSPEC_FORCE_INLINE inline
76 #endif
77 
78 
79 #if ISOSPEC_GOT_MMAN
80  #if ISOSPEC_GOT_SYSTEM_MMAN
81  #include <sys/mman.h>
82  #else
83  #include "mman.h"
84  #endif
85 #else
86  #include <stdlib.h> /* malloc, free, rand */
87 #endif
88 
89 
90 #if defined(OPENMS_DLLAPI) /* IsoSpec is being built as a part of OpenMS: use their visibility macros */
91 #define ISOSPEC_EXPORT_SYMBOL OPENMS_DLLAPI
92 #else /* it's a can of worms we don't yet want to open ourselves though... */
93 #define ISOSPEC_EXPORT_SYMBOL
94 #endif