Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / muscle / globalslinux.cpp
diff --git a/website/archive/binaries/mac/src/muscle/globalslinux.cpp b/website/archive/binaries/mac/src/muscle/globalslinux.cpp
new file mode 100644 (file)
index 0000000..f414fa9
--- /dev/null
@@ -0,0 +1,163 @@
+#include "muscle.h"\r
+\r
+#if            defined(__linux__)\r
+#include <sys/time.h>\r
+#include <sys/resource.h>\r
+#include <unistd.h>\r
+#include <errno.h>\r
+#include <stdio.h>\r
+#include <fcntl.h>\r
+\r
+const int ONE_MB = 1000000;\r
+const int MEM_WARNING_THRESHOLD = 20*ONE_MB;\r
+\r
+double GetNAN()\r
+       {\r
+       static unsigned long nan[2]={0xffffffff, 0x7fffffff};\r
+       double dNAN = *( double* )nan;\r
+       return dNAN;\r
+       }\r
+\r
+double g_dNAN = GetNAN();\r
+\r
+void chkmem(const char szMsg[])\r
+       {\r
+       //assert(_CrtCheckMemory());\r
+       }\r
+\r
+void Break()\r
+       {\r
+       //DebugBreak();\r
+       }\r
+\r
+static char szCmdLine[4096];\r
+\r
+void *ptrStartBreak = sbrk(0);\r
+\r
+const char *GetCmdLine()\r
+       {\r
+       return szCmdLine;\r
+       }\r
+\r
+double GetMemUseMB()\r
+       {\r
+       static char statm[64];\r
+       static int PageSize;\r
+       if (0 == statm[0])\r
+               {\r
+               PageSize = sysconf(_SC_PAGESIZE);\r
+               pid_t pid = getpid();\r
+               sprintf(statm, "/proc/%d/statm", (int) pid);\r
+               }\r
+\r
+       int fd = open(statm, O_RDONLY);\r
+       if (-1 == fd)\r
+               return -1;\r
+       char Buffer[64];\r
+       int n = read(fd, Buffer, sizeof(Buffer) - 1);\r
+       close(fd);\r
+       fd = -1;\r
+\r
+       if (n <= 0)\r
+               {\r
+               static bool Warned = false;\r
+               if (!Warned)\r
+                       {\r
+                       Warned = true;\r
+                       Warning("*Warning* Cannot read %s errno=%d %s",\r
+                         statm, errno, strerror(errno));\r
+                       }\r
+               return 0;\r
+               }\r
+       Buffer[n] = 0;\r
+       int Pages = atoi(Buffer);\r
+\r
+       return ((double) Pages * (double) PageSize)/1e6;\r
+       }\r
+\r
+void SaveCmdLine(int argc, char *argv[])\r
+       {\r
+       for (int i = 0; i < argc; ++i)\r
+               {\r
+               if (i > 0)\r
+                       strcat(szCmdLine, " ");\r
+               strcat(szCmdLine, argv[i]);\r
+               }\r
+       }\r
+\r
+double dPeakMemUseMB = 0;\r
+\r
+double GetPeakMemUseMB()\r
+       {\r
+       CheckMemUse();\r
+       return dPeakMemUseMB;\r
+       }\r
+\r
+double GetCPUGHz()\r
+       {\r
+       double dGHz = 2.5;\r
+       const char *e = getenv("CPUGHZ");\r
+       if (0 != e)\r
+               dGHz = atof(e);\r
+       return dGHz;\r
+       }\r
+\r
+void CheckMemUse()\r
+       {\r
+       double dMB = GetMemUseMB();\r
+       if (dMB > dPeakMemUseMB)\r
+               dPeakMemUseMB = dMB;\r
+       }\r
+\r
+double GetRAMSizeMB()\r
+       {\r
+       const double DEFAULT_RAM = 500;\r
+       static double RAMMB = 0;\r
+       if (RAMMB != 0)\r
+               return RAMMB;\r
+\r
+       int fd = open("/proc/meminfo", O_RDONLY);\r
+       if (-1 == fd)\r
+               {\r
+               static bool Warned = false;\r
+               if (!Warned)\r
+                       {\r
+                       Warned = true;\r
+                       Warning("*Warning* Cannot open /proc/meminfo errno=%d %s",\r
+                         errno, strerror(errno));\r
+                       }\r
+               return DEFAULT_RAM;\r
+               }\r
+       char Buffer[1024];\r
+       int n = read(fd, Buffer, sizeof(Buffer) - 1);\r
+       close(fd);\r
+       fd = -1;\r
+\r
+       if (n <= 0)\r
+               {\r
+               static bool Warned = false;\r
+               if (!Warned)\r
+                       {\r
+                       Warned = true;\r
+                       Warning("*Warning* Cannot read /proc/meminfo errno=%d %s",\r
+                         errno, strerror(errno));\r
+                       }\r
+               return DEFAULT_RAM;\r
+               }\r
+       Buffer[n] = 0;\r
+       char *pMem = strstr(Buffer, "MemTotal: ");\r
+       if (0 == pMem)\r
+               {\r
+               static bool Warned = false;\r
+               if (!Warned)\r
+                       {\r
+                       Warned = true;\r
+                       Warning("*Warning* 'MemTotal:' not found in /proc/meminfo");\r
+                       }\r
+               return DEFAULT_RAM;\r
+               }\r
+       int Bytes = atoi(pMem+9)*1000;\r
+       return ((double) Bytes)/1e6;\r
+       }\r
+\r
+#endif // !WIN32\r