Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights 1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 2 // See the file tools.license for terms. 3 3 4 #ifndef tools_platform 4 #ifndef tools_platform 5 #define tools_platform 5 #define tools_platform 6 6 7 // We do not byteswap on intel (LE) (common pl 7 // We do not byteswap on intel (LE) (common platform). 8 // We have then a better compression on these 8 // We have then a better compression on these machines. 9 // NOTE : this is the contrary to what is done 9 // NOTE : this is the contrary to what is done in CERN-ROOT (and Rio). 10 10 11 namespace tools { 11 namespace tools { 12 12 13 inline bool is_little_endian() { 13 inline bool is_little_endian() { 14 unsigned int i = 1; 14 unsigned int i = 1; 15 unsigned char* b = (unsigned char*)&i; 15 unsigned char* b = (unsigned char*)&i; 16 // BE = Big Endian, LE = Little Endian. 16 // BE = Big Endian, LE = Little Endian. 17 // The Intels x86 are LE. 17 // The Intels x86 are LE. 18 // Mac PPC b[3] is 1 (BE) 18 // Mac PPC b[3] is 1 (BE) 19 // Mac Intel b[0] is 1 (LE) 19 // Mac Intel b[0] is 1 (LE) 20 // Linux i386 b[0] is 1 (LE) 20 // Linux i386 b[0] is 1 (LE) 21 // Linux x86_64 b[0] is 1 (LE) 21 // Linux x86_64 b[0] is 1 (LE) 22 return (b[0]==1?true:false); 22 return (b[0]==1?true:false); 23 } 23 } 24 24 25 } 25 } 26 26 27 #if defined(__APPLE__) 27 #if defined(__APPLE__) 28 #include <TargetConditionals.h> 28 #include <TargetConditionals.h> 29 #endif 29 #endif 30 30 31 namespace tools { 31 namespace tools { 32 namespace device { 32 namespace device { 33 33 34 #if TARGET_OS_IPHONE 34 #if TARGET_OS_IPHONE 35 inline bool is_iOS() {return true;} 35 inline bool is_iOS() {return true;} 36 #else 36 #else 37 inline bool is_iOS() {return false;} 37 inline bool is_iOS() {return false;} 38 #endif 38 #endif 39 39 40 #ifdef ANDROID 40 #ifdef ANDROID 41 inline bool is_Android() {return true;} 41 inline bool is_Android() {return true;} 42 #else 42 #else 43 inline bool is_Android() {return false;} 43 inline bool is_Android() {return false;} 44 #endif 44 #endif 45 45 46 #ifdef EMSCRIPTEN 46 #ifdef EMSCRIPTEN 47 inline bool is_emscripten() {return true;} 47 inline bool is_emscripten() {return true;} 48 #else 48 #else 49 inline bool is_emscripten() {return false;} 49 inline bool is_emscripten() {return false;} 50 #endif 50 #endif 51 51 52 52 53 #if defined(ANDROID) || TARGET_OS_IPHONE 53 #if defined(ANDROID) || TARGET_OS_IPHONE 54 inline bool small_screen() {return true;} 54 inline bool small_screen() {return true;} 55 //inline bool no_cursor() {return true; 55 //inline bool no_cursor() {return true;} 56 inline bool stop_app_button() {return true;} 56 inline bool stop_app_button() {return true;} //the device has a button to stop the app. 57 #elif defined(EMSCRIPTEN) 57 #elif defined(EMSCRIPTEN) 58 inline bool small_screen() {return false;} 58 inline bool small_screen() {return false;} 59 //inline bool no_cursor() {return false 59 //inline bool no_cursor() {return false;} 60 inline bool stop_app_button() {return true;} 60 inline bool stop_app_button() {return true;} //the device has a button to stop the app. 61 #else 61 #else 62 inline bool small_screen() {return false;} 62 inline bool small_screen() {return false;} 63 //inline bool no_cursor() {return false 63 //inline bool no_cursor() {return false;} 64 inline bool stop_app_button() {return false;} 64 inline bool stop_app_button() {return false;} 65 #endif 65 #endif 66 #if TARGET_OS_IPHONE 66 #if TARGET_OS_IPHONE 67 inline bool slow_cpu() {return true;} 67 inline bool slow_cpu() {return true;} 68 #else 68 #else 69 inline bool slow_cpu() {return false;} 69 inline bool slow_cpu() {return false;} 70 #endif 70 #endif 71 71 72 inline unsigned int tex_mem_limit() { 72 inline unsigned int tex_mem_limit() { 73 // glGet(GL_MAX_TEXTURE_SIZE) : 73 // glGet(GL_MAX_TEXTURE_SIZE) : 74 // MacBookPro : it returns 8192. 74 // MacBookPro : it returns 8192. 75 // SGS : it returns 2048. 75 // SGS : it returns 2048. 76 // iPad1 : it returns 2048. 76 // iPad1 : it returns 2048. 77 // iPod : it returns ? 77 // iPod : it returns ? 78 // Nexus 10 : it returns ? 78 // Nexus 10 : it returns ? 79 79 80 // 1024*1024 //*3 = 3 145 728 80 // 1024*1024 //*3 = 3 145 728 81 // 2048*2048 //*3 = 12 582 912 81 // 2048*2048 //*3 = 12 582 912 82 // 4096*4096 //*3 = 50 331 648 82 // 4096*4096 //*3 = 50 331 648 83 // 8192*8192 //*3 = 201 326 592 83 // 8192*8192 //*3 = 201 326 592 84 // 8192*4096 //*3 = 100 663 296 84 // 8192*4096 //*3 = 100 663 296 85 if(small_screen()) { 85 if(small_screen()) { 86 //iOS : Apple says that max 2D tex size is 86 //iOS : Apple says that max 2D tex size is 1024*1024 with two units 87 // texture available. From doc on Pow 87 // texture available. From doc on PowerVR MBX. 88 return 2048*2048*3; 88 return 2048*2048*3; 89 } else { 89 } else { 90 //limit = 4096*4096*3; //=8192*2048 //perm 90 //limit = 4096*4096*3; //=8192*2048 //permit to pass ATLAS big image. 91 //permit to pass fete_science_2010/power2/ 91 //permit to pass fete_science_2010/power2/image_0.jpg 92 return 8192*4096*3; //100663296 92 return 8192*4096*3; //100663296 93 } 93 } 94 } 94 } 95 95 96 }} 96 }} 97 97 98 ////////////////////////////////////////////// 98 /////////////////////////////////////////////////////////////////// 99 /// backcomp : for OnX/source/Core/atat.cxx : 99 /// backcomp : for OnX/source/Core/atat.cxx : ///////////////////// 100 ////////////////////////////////////////////// 100 /////////////////////////////////////////////////////////////////// 101 101 102 //NOTE : we avoid to have std includes here to 102 //NOTE : we avoid to have std includes here to be sure 103 // that in the below ifdef things come o 103 // that in the below ifdef things come only from the compiler. 104 104 105 namespace tools { 105 namespace tools { 106 106 107 inline const char* os() { 107 inline const char* os() { 108 108 109 #if TARGET_OS_IPHONE 109 #if TARGET_OS_IPHONE 110 static const char s_s[] = "iOS"; 110 static const char s_s[] = "iOS"; 111 #elif defined(ANDROID) 111 #elif defined(ANDROID) 112 static const char s_s[] = "Android"; 112 static const char s_s[] = "Android"; 113 #elif defined(EMSCRIPTEN) 113 #elif defined(EMSCRIPTEN) 114 static const char s_s[] = "emscripten"; 114 static const char s_s[] = "emscripten"; 115 #elif defined(_WIN32) 115 #elif defined(_WIN32) 116 static const char s_s[] = "Windows_NT"; 116 static const char s_s[] = "Windows_NT"; 117 #elif __APPLE__ 117 #elif __APPLE__ 118 static const char s_s[] = "Darwin"; 118 static const char s_s[] = "Darwin"; 119 #elif defined(__linux) 119 #elif defined(__linux) 120 static const char s_s[] = "Linux"; 120 static const char s_s[] = "Linux"; 121 #elif defined(__alpha) 121 #elif defined(__alpha) 122 static const char s_s[] = "OSF1"; 122 static const char s_s[] = "OSF1"; 123 #elif defined(__CYGWIN__) 123 #elif defined(__CYGWIN__) 124 static const char s_s[] = "CYGWIN"; 124 static const char s_s[] = "CYGWIN"; 125 #else 125 #else 126 static const char s_s[] = "unknown"; 126 static const char s_s[] = "unknown"; 127 #endif 127 #endif 128 return s_s; 128 return s_s; 129 } 129 } 130 130 131 inline bool _WIN32_defined() { 131 inline bool _WIN32_defined() { 132 #ifdef _WIN32 132 #ifdef _WIN32 133 return true; 133 return true; 134 #else 134 #else 135 return false; 135 return false; 136 #endif 136 #endif 137 } 137 } 138 138 139 inline const char* processor() { 139 inline const char* processor() { 140 140 141 #if defined(__GNUC__) 141 #if defined(__GNUC__) 142 142 143 #if defined(__ppc__) 143 #if defined(__ppc__) 144 static const char s_s[] = "ppc"; 144 static const char s_s[] = "ppc"; 145 #elif defined(__ppc64__) 145 #elif defined(__ppc64__) 146 static const char s_s[] = "ppc64"; 146 static const char s_s[] = "ppc64"; 147 #elif defined(__i386__) 147 #elif defined(__i386__) 148 static const char s_s[] = "i386"; 148 static const char s_s[] = "i386"; 149 #elif defined(__x86_64__) 149 #elif defined(__x86_64__) 150 static const char s_s[] = "x86_64"; 150 static const char s_s[] = "x86_64"; 151 #elif defined(__ia64__) 151 #elif defined(__ia64__) 152 static const char s_s[] = "ia64"; 152 static const char s_s[] = "ia64"; 153 #else 153 #else 154 static const char s_s[] = "unknown"; 154 static const char s_s[] = "unknown"; 155 #endif 155 #endif 156 156 157 #elif defined(_MSC_VER) 157 #elif defined(_MSC_VER) 158 158 159 #if defined(_M_IX86) 159 #if defined(_M_IX86) 160 static const char s_s[] = "ix86"; 160 static const char s_s[] = "ix86"; 161 #elif defined(_M_X64) 161 #elif defined(_M_X64) 162 static const char s_s[] = "x64"; 162 static const char s_s[] = "x64"; 163 #else 163 #else 164 static const char s_s[] = "unknown"; 164 static const char s_s[] = "unknown"; 165 #endif 165 #endif 166 166 167 #elif defined(__alpha) 167 #elif defined(__alpha) 168 static const char s_s[] = "alpha"; 168 static const char s_s[] = "alpha"; 169 169 170 #else 170 #else 171 static const char s_s[] = "unknown"; 171 static const char s_s[] = "unknown"; 172 #endif 172 #endif 173 return s_s; 173 return s_s; 174 } 174 } 175 175 176 inline const char* compiler_name() { 176 inline const char* compiler_name() { 177 177 178 #if defined(__clang__) 178 #if defined(__clang__) 179 static const char s_s[] = "clang"; 179 static const char s_s[] = "clang"; 180 #elif defined(__GNUC__) 180 #elif defined(__GNUC__) 181 static const char s_s[] = "gcc"; 181 static const char s_s[] = "gcc"; 182 #elif defined(_MSC_VER) 182 #elif defined(_MSC_VER) 183 static const char s_s[] = "cl"; 183 static const char s_s[] = "cl"; 184 #elif defined(__alpha) 184 #elif defined(__alpha) 185 static const char s_s[] = "cxx"; 185 static const char s_s[] = "cxx"; 186 #else 186 #else 187 static const char s_s[] = "unknown"; 187 static const char s_s[] = "unknown"; 188 #endif 188 #endif 189 return s_s; 189 return s_s; 190 } 190 } 191 191 192 } 192 } 193 193 194 #include "tosu" //does not bring any std inclu 194 #include "tosu" //does not bring any std include. 195 195 196 namespace tools { 196 namespace tools { 197 197 198 inline void compiler(char a_s[128]) { 198 inline void compiler(char a_s[128]) { 199 char* pos = a_s; 199 char* pos = a_s; 200 unsigned int l; 200 unsigned int l; 201 toss(compiler_name(),pos,l);pos += l; 201 toss(compiler_name(),pos,l);pos += l; 202 202 203 #if defined(__clang__) 203 #if defined(__clang__) 204 *pos = '_';pos++; 204 *pos = '_';pos++; 205 tosu<unsigned int>(__clang_major__,pos,l);po 205 tosu<unsigned int>(__clang_major__,pos,l);pos += l; 206 tosu<unsigned int>(__clang_minor__,pos,l);po 206 tosu<unsigned int>(__clang_minor__,pos,l);pos += l; 207 tosu<unsigned int>(__clang_patchlevel__,pos, 207 tosu<unsigned int>(__clang_patchlevel__,pos,l);pos += l; 208 #elif defined(__GNUC__) 208 #elif defined(__GNUC__) 209 *pos = '_';pos++; 209 *pos = '_';pos++; 210 tosu<unsigned int>(__GNUC__,pos,l);pos += l; 210 tosu<unsigned int>(__GNUC__,pos,l);pos += l; 211 tosu<unsigned int>(__GNUC_MINOR__,pos,l);pos 211 tosu<unsigned int>(__GNUC_MINOR__,pos,l);pos += l; 212 tosu<unsigned int>(__GNUC_PATCHLEVEL__,pos,l 212 tosu<unsigned int>(__GNUC_PATCHLEVEL__,pos,l);pos += l; 213 #elif defined(_MSC_VER) 213 #elif defined(_MSC_VER) 214 *pos = '_';pos++; 214 *pos = '_';pos++; 215 tosu<unsigned int>(_MSC_VER,pos,l);pos += l; 215 tosu<unsigned int>(_MSC_VER,pos,l);pos += l; 216 //_mfc_ 216 //_mfc_ 217 //tosu<unsigned int>(_MFC_VER,pos,l);pos += 217 //tosu<unsigned int>(_MFC_VER,pos,l);pos += l; 218 #elif defined(__alpha) 218 #elif defined(__alpha) 219 #else 219 #else 220 #endif 220 #endif 221 *pos = 0; 221 *pos = 0; 222 } 222 } 223 223 224 } 224 } 225 225 226 #endif 226 #endif 227 227 228 228 229 /* We prefer to handle endianity dynamically, 229 /* We prefer to handle endianity dynamically, but with cpp macro 230 it would looks like (from luaconf.h) : 230 it would looks like (from luaconf.h) : 231 #if defined(__i386__) || defined(__i386) || \ 231 #if defined(__i386__) || defined(__i386) || \ 232 defined(__X86__) || defined (__x86_64) 232 defined(__X86__) || defined (__x86_64) 233 #define TOOLS_IS_BE 0 233 #define TOOLS_IS_BE 0 234 #define TOOLS_IS_LE 1 234 #define TOOLS_IS_LE 1 235 #elif defined(__POWERPC__) || defined(__ppc__) 235 #elif defined(__POWERPC__) || defined(__ppc__) 236 #define TOOLS_IS_BE 1 236 #define TOOLS_IS_BE 1 237 #define TOOLS_IS_LE 0 237 #define TOOLS_IS_LE 0 238 #endif 238 #endif 239 */ 239 */