Line data Source code
1 0 : /* 2 : 3 : OOCPUInfo.h 4 : 5 : Capabilities and features of CPUs. 6 : 7 : Oolite 8 : Copyright (C) 2004-2013 Giles C Williams and contributors 9 : 10 : This program is free software; you can redistribute it and/or 11 : modify it under the terms of the GNU General Public License 12 : as published by the Free Software Foundation; either version 2 13 : of the License, or (at your option) any later version. 14 : 15 : This program is distributed in the hope that it will be useful, 16 : but WITHOUT ANY WARRANTY; without even the implied warranty of 17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 : GNU General Public License for more details. 19 : 20 : You should have received a copy of the GNU General Public License 21 : along with this program; if not, write to the Free Software 22 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 23 : MA 02110-1301, USA. 24 : 25 : */ 26 : 27 : #import "OOCocoa.h" 28 : #include <stdint.h> 29 : 30 : #if OOLITE_LINUX 31 : #include <sys/sysinfo.h> 32 : #endif 33 : 34 : 35 0 : void OOCPUInfoInit(void); 36 : 37 : 38 : /* Number of processors (whether they be individual or cores), used to select 39 : number of threads to use for things like texture loading. 40 : */ 41 0 : NSUInteger OOCPUCount(void); 42 : 43 : 44 : /* 45 : Returns the CPU identifier string. Currently Windows and Linux only. 46 : */ 47 : #if (OOLITE_WINDOWS || OOLITE_LINUX) 48 : NSString* OOCPUDescription(void); 49 : void OOCPUID(int CPUInfo[4], int InfoType); 50 : 51 : typedef struct 52 : { 53 : unsigned long long ooPhysicalMemory; 54 : unsigned long long ooAvailableMemory; 55 : } OOMemoryStatus; 56 : OOMemoryStatus OOSystemMemoryStatus(void); 57 : #endif 58 : 59 : 60 : #if OOLITE_WINDOWS 61 : typedef BOOL (WINAPI *IW64PFP)(HANDLE, BOOL *); // for checking for 64/32 bit system 62 : BOOL is64BitSystem(void); 63 : NSString* operatingSystemFullVersion(void); 64 : #endif 65 : 66 : /* Set up OOLITE_BIG_ENDIAN and OOLITE_LITTLE_ENDIAN macros. Exactly one must 67 : be non-zero. If you're porting Oolite to a middle-endian platform, you'll 68 : need to work out what to do with endian-sensitive stuff -- currently, that 69 : means texture loading. (The data cache automatically rejects cached data 70 : of the wrong byte sex.) 71 : */ 72 : #if !defined(OOLITE_BIG_ENDIAN) && !defined(OOLITE_LITTLE_ENDIAN) 73 : 74 : #if __BIG_ENDIAN__ 75 : #define OOLITE_BIG_ENDIAN 1 76 : #endif 77 : 78 : #if __LITTLE_ENDIAN__ 79 : #define OOLITE_LITTLE_ENDIAN 1 80 : #endif 81 : 82 : 83 : #if !defined(OOLITE_BIG_ENDIAN) && !defined(OOLITE_LITTLE_ENDIAN) 84 : #if defined(__i386__) || defined(__amd64__) || defined(__x86_64__) 85 : #define OOLITE_LITTLE_ENDIAN 1 86 : #endif 87 : 88 : #if defined(__sgi__) || defined(__mips__) 89 : #define OOLITE_BIG_ENDIAN 1 90 : #endif 91 : 92 : // Do not assume PPC == big endian, it can be either. 93 : 94 : #endif // inner none defined 95 : #endif // outer none defined 96 : 97 : 98 : #ifndef OOLITE_BIG_ENDIAN 99 0 : #define OOLITE_BIG_ENDIAN 0 100 : #endif 101 : 102 : #ifndef OOLITE_LITTLE_ENDIAN 103 0 : #define OOLITE_LITTLE_ENDIAN 0 104 : #endif 105 : 106 : 107 : #if !OOLITE_BIG_ENDIAN && !OOLITE_LITTLE_ENDIAN 108 : #error Neither OOLITE_BIG_ENDIAN nor OOLITE_LITTLE_ENDIAN is defined as nonzero! 109 : 110 : #undef OOLITE_BIG_ENDIAN 111 : #undef OOLITE_LITTLE_ENDIAN 112 : 113 : // Cause errors where the macros are used 114 0 : #define OOLITE_BIG_ENDIAN "BUG" 115 0 : #define OOLITE_LITTLE_ENDIAN "BUG" 116 : #endif 117 : 118 : 119 : /* Set up OOLITE_NATIVE_64_BIT. This is intended for 64-bit optimizations 120 : (see OOTextureScaling.m). It is not set for systems where 64-bitness may 121 : be determined at runtime (such as 32-bit OS X binaries), because I can't 122 : be bothered to do the set-up required to use switch to a 64-bit code path 123 : at runtime while being cross-platform. 124 : -- Ahruman 125 : */ 126 : 127 : #ifndef OOLITE_NATIVE_64_BIT 128 : 129 : #ifdef _UINT64_T 130 : #ifdef __ppc64__ 131 : #define OOLITE_NATIVE_64_BIT 1 132 : #elif __amd64__ 133 : #define OOLITE_NATIVE_64_BIT 1 134 : #elif __x86_64__ 135 : #define OOLITE_NATIVE_64_BIT 1 136 : #endif 137 : #endif // _UINT64_T 138 : 139 : #ifndef OOLITE_NATIVE_64_BIT 140 0 : #define OOLITE_NATIVE_64_BIT 0 141 : #endif 142 : 143 : #endif // defined(OOLITE_NATIVE_64_BIT)