summaryrefslogtreecommitdiff
path: root/tools/SetupAtlas/SetupAtlas.c
diff options
context:
space:
mode:
authorShashank2017-05-29 12:40:26 +0530
committerShashank2017-05-29 12:40:26 +0530
commit0345245e860375a32c9a437c4a9d9cae807134e9 (patch)
treead51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /tools/SetupAtlas/SetupAtlas.c
downloadscilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.gz
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.bz2
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.zip
CMSCOPE changed
Diffstat (limited to 'tools/SetupAtlas/SetupAtlas.c')
-rwxr-xr-xtools/SetupAtlas/SetupAtlas.c296
1 files changed, 296 insertions, 0 deletions
diff --git a/tools/SetupAtlas/SetupAtlas.c b/tools/SetupAtlas/SetupAtlas.c
new file mode 100755
index 000000000..17e9dae39
--- /dev/null
+++ b/tools/SetupAtlas/SetupAtlas.c
@@ -0,0 +1,296 @@
+/*
+* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+* Copyright (C) 2009 - DIGITEO - Allan CORNET
+*
+* This file must be used under the terms of the CeCILL.
+* This source file is licensed as described in the file COPYING, which
+* you should have received as part of this distribution. The terms
+* are also available at
+* http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+*
+*/
+/*--------------------------------------------------------------------------*/
+#include <Windows.h>
+#include "writeLog.h"
+#include "getCpuInfos.h"
+#include "readBlasSpec.h"
+#include "copyBlasFile.h"
+#include "GetPathOfThisExe.h"
+/*--------------------------------------------------------------------------*/
+#pragma comment(lib,"../../bin/libxml2.lib")
+/*--------------------------------------------------------------------------*/
+#define LOG_FILENAME L"SetupAtlas.log"
+#define ATLASSPEC_FILENAME L"Atlas.spec"
+/*--------------------------------------------------------------------------*/
+static wchar_t *LogFilename = NULL;
+static wchar_t msgtolog[512];
+static wchar_t *buildFilename(wchar_t *destpath, wchar_t *filename);
+static wchar_t *getCpuDllFilename(struct cpu_struct**CPUS_SPEC, int sizeCPUS_SPEC);
+static BOOL freeCpuStruct(struct cpu_struct**CPUS_SPEC, int sizeCPUS_SPEC);
+/*--------------------------------------------------------------------------*/
+int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int iCmdShow)
+{
+ int ierr = 1;
+ wchar_t *pathThisExe = GetPathOfThisExe();
+ if (pathThisExe)
+ {
+ LogFilename = buildFilename(pathThisExe, LOG_FILENAME);
+ if (LogFilename)
+ {
+#ifdef _WIN64
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ AppendMessageToLog(L"* ONLY WITH X86 VERSION *", LogFilename);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ free(LogFilename);
+ LogFilename = NULL;
+ free(pathThisExe);
+ pathThisExe = NULL;
+ return ierr;
+ }
+#else
+
+ wchar_t* AtlasSpecFilename = buildFilename(pathThisExe, ATLASSPEC_FILENAME);
+
+ if (AtlasSpecFilename)
+ {
+ int sizeArray = 0;
+ struct cpu_struct **CPUS_SPEC = readBlasSpec(AtlasSpecFilename, &sizeArray);
+
+ if (CPUS_SPEC)
+ {
+ wchar_t * blasdllname = getCpuDllFilename(CPUS_SPEC, sizeArray);
+ if (blasdllname)
+ {
+ int err = copyBlasFile(blasdllname);
+
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ switch (err)
+ {
+ case COPY_NO_RIGHT_TO_WRITE:
+ wcscpy(msgtolog, L"NO RIGHT TO WRITE: ");
+ wcscat(msgtolog, blasdllname);
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 1;
+ break;
+ case COPY_OK:
+ wcscpy(msgtolog, L"COPY OK OF: ");
+ wcscat(msgtolog, blasdllname);
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 0;
+ break;
+ case COPY_FILE_SRC_NOT_EXISTS:
+ wcscpy(msgtolog, L"FILE NOT EXIST: ");
+ wcscat(msgtolog, blasdllname);
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 1;
+ break;
+ case COPY_DESTINATION_NOT_EXISTS:
+ wcscpy(msgtolog, L"DESTINATION NOT EXIST");
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 1;
+ break;
+ case COPY_FILE_FAILED:
+ wcscpy(msgtolog, L"COPY FAILED");
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 1;
+ break;
+ default:
+ wcscpy(msgtolog, L"UNKNOW ERROR");
+ AppendMessageToLog(msgtolog, LogFilename);
+ ierr = 1;
+ break;
+ }
+ AppendMessageToLog(L"**************************************************", LogFilename);
+
+ free(blasdllname);
+ blasdllname = NULL;
+ }
+ else
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ wcscpy(msgtolog, L"IMPOSSIBLE TO FIND A OPTIMIZED DLL");
+ AppendMessageToLog(msgtolog, LogFilename);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ ierr = 1;
+ }
+
+ freeCpuStruct(CPUS_SPEC, sizeArray);
+ }
+ else
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ wcscpy(msgtolog, L"IMPOSSIBLE TO READ ATLAS.SPEC");
+ AppendMessageToLog(msgtolog, LogFilename);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ ierr = 1;
+ }
+ free(AtlasSpecFilename);
+ AtlasSpecFilename = NULL;
+ }
+ else
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ wcscpy(msgtolog, L"INCORRECT FILENAME ATLAS.SPEC");
+ AppendMessageToLog(msgtolog, LogFilename);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ ierr = 1;
+ }
+
+ free(LogFilename);
+ LogFilename = NULL;
+#endif /* _WIN64 */
+ }
+ else
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LOG_FILENAME);
+ AppendMessageToLog(L"* ERROR CREATES LOG FILENAME *", LOG_FILENAME);
+ AppendMessageToLog(L"**************************************************", LOG_FILENAME);
+ ierr = 1;
+ }
+
+ free(pathThisExe);
+ pathThisExe = NULL;
+ }
+ else
+ {
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ AppendMessageToLog(L"**************************************************", LOG_FILENAME);
+ AppendMessageToLog(L"* ERROR CURRENT PATH NOT FOUND *", LOG_FILENAME);
+ AppendMessageToLog(L"**************************************************", LOG_FILENAME);
+ ierr = 1;
+ }
+
+ return ierr;
+}
+/*--------------------------------------------------------------------------*/
+wchar_t *buildFilename(wchar_t *destpath, wchar_t *filename)
+{
+ wchar_t *fullfilename = NULL;
+ if (destpath && filename)
+ {
+ int len = (int)(wcslen(destpath) + wcslen(filename) + wcslen(L"\\") + 1);
+ fullfilename = (wchar_t *) calloc(len, sizeof(wchar_t));
+ if (fullfilename)
+ {
+ wcscpy(fullfilename, destpath);
+ wcscat(fullfilename, L"\\");
+ wcscat(fullfilename, filename);
+ }
+ }
+ return fullfilename;
+}
+/*--------------------------------------------------------------------------*/
+wchar_t *getCpuDllFilename(struct cpu_struct **CPUS_SPEC, int sizeCPUS_SPEC)
+{
+ int i = 0;
+
+ wchar_t *CurrentCpuManufacturer = getCpuVendor();
+ int CurrentCpuFamily = getCpuFamily();
+ int CurrentCpuModel = getCpuModel();
+
+ wchar_t* strtime = getTimeString();
+ AppendMessageToLog(strtime, LogFilename);
+ free(strtime);
+ strtime = NULL;
+
+ wsprintfW(msgtolog, L"Vendor %s Family %d Model %d",
+ CurrentCpuManufacturer,
+ CurrentCpuFamily,
+ CurrentCpuModel);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+ AppendMessageToLog(L"CPU DETECTION:", LogFilename);
+ AppendMessageToLog(msgtolog, LogFilename);
+ AppendMessageToLog(L"**************************************************", LogFilename);
+
+ for (i = 0; i < sizeCPUS_SPEC; i++)
+ {
+ if (wcscmp(CPUS_SPEC[i]->cpu_vendor, CurrentCpuManufacturer) == 0)
+ {
+ if (CPUS_SPEC[i]->cpu_family == CurrentCpuFamily)
+ {
+ if (CPUS_SPEC[i]->cpu_model == CurrentCpuModel)
+ {
+ return _wcsdup(CPUS_SPEC[i]->dll_filename);
+ }
+ else
+ {
+ if (CPUS_SPEC[i]->cpu_model == 0)
+ {
+ return _wcsdup(CPUS_SPEC[i]->dll_filename);
+ }
+ }
+ }
+ }
+ }
+ return NULL;
+}
+/*--------------------------------------------------------------------------*/
+static BOOL freeCpuStruct(struct cpu_struct** CPUS_SPEC, int sizeCPUS_SPEC)
+{
+ int i = 0;
+ if (CPUS_SPEC)
+ {
+ for (i = 0; i < sizeCPUS_SPEC; i++)
+ {
+ if (CPUS_SPEC[i])
+ {
+ if (CPUS_SPEC[i]->comments)
+ {
+ free(CPUS_SPEC[i]->comments);
+ CPUS_SPEC[i]->comments = NULL;
+ }
+ if (CPUS_SPEC[i]->cpu_vendor)
+ {
+ free(CPUS_SPEC[i]->cpu_vendor);
+ CPUS_SPEC[i]->cpu_vendor = NULL;
+ }
+ if (CPUS_SPEC[i]->dll_filename)
+ {
+ free(CPUS_SPEC[i]->dll_filename);
+ CPUS_SPEC[i]->dll_filename = NULL;
+ }
+ free(CPUS_SPEC[i]);
+ CPUS_SPEC[i] = NULL;
+ }
+ }
+ free(CPUS_SPEC);
+ CPUS_SPEC = NULL;
+ return TRUE;
+ }
+ return FALSE;
+}
+/*--------------------------------------------------------------------------*/