dust3d/thirdparty/instant-meshes/instant-meshes-dust3d/ext/tbb/build/detect.js

182 lines
5.6 KiB
JavaScript
Raw Normal View History

// Copyright (c) 2005-2016 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//
//
//
function doWork() {
var WshShell = WScript.CreateObject("WScript.Shell");
var fso = new ActiveXObject("Scripting.FileSystemObject");
var tmpExec;
tmpExec = WshShell.Run("cmd /c echo int main(){return 0;} >detect.c", 0, true);
// The next block deals with GCC (MinGW)
if ( WScript.Arguments.Count() > 1 && WScript.Arguments(1) == "gcc" ) {
if ( WScript.Arguments(0) == "/arch" ) {
// Get predefined macros
tmpExec = WshShell.Run("cmd /C gcc -dM -E detect.c > detect.map", 0, true);
var file = fso.OpenTextFile("detect.map", 1, 0);
var defs = file.readAll();
file.Close();
//detect target architecture
var intel64=/x86_64|amd64/mgi;
var ia32=/i386/mgi;
if ( defs.match(intel64) ) {
WScript.Echo( "intel64" );
} else if ( defs.match(ia32) ) {
WScript.Echo( "ia32" );
} else {
WScript.Echo( "unknown" );
}
} else {
tmpExec = WshShell.Exec("gcc -dumpversion");
var gcc_version = tmpExec.StdOut.ReadLine();
if ( WScript.Arguments(0) == "/runtime" ) {
WScript.Echo( "mingw"+gcc_version );
}
else if ( WScript.Arguments(0) == "/minversion" ) {
// Comparing strings, not numbers; will not work for two-digit versions
if ( gcc_version >= WScript.Arguments(2) ) {
WScript.Echo( "ok" );
} else {
WScript.Echo( "fail" );
}
}
}
return;
}
//Compile binary
tmpExec = WshShell.Exec("cl /MD detect.c /link /MAP");
while ( tmpExec.Status == 0 ) {
WScript.Sleep(100);
}
//compiler banner that includes version and target arch was printed to stderr
var clVersion = tmpExec.StdErr.ReadAll();
if ( WScript.Arguments(0) == "/arch" ) {
//detect target architecture
var intel64=/AMD64|EM64T|x64/mgi;
var ia32=/[80|\s]x86/mgi;
var arm=/ARM/mgi;
if ( clVersion.match(intel64) ) {
WScript.Echo( "intel64" );
} else if ( clVersion.match(ia32) ) {
WScript.Echo( "ia32" );
} else if ( clVersion.match(arm) ) {
WScript.Echo( "armv7" );
} else {
WScript.Echo( "unknown" );
}
return;
}
if ( WScript.Arguments(0) == "/runtime" ) {
//read map-file
var map = fso.OpenTextFile("detect.map", 1, 0);
var mapContext = map.readAll();
map.Close();
//detect runtime
var vc71=/MSVCR71\.DLL/mgi;
var vc80=/MSVCR80\.DLL/mgi;
var vc90=/MSVCR90\.DLL/mgi;
var vc100=/MSVCR100\.DLL/mgi;
var vc110=/MSVCR110\.DLL/mgi;
var vc120=/MSVCR120\.DLL/mgi;
var vc140=/VCRUNTIME140\.DLL/mgi;
var psdk=/MSVCRT\.DLL/mgi;
if ( mapContext.match(vc71) ) {
WScript.Echo( "vc7.1" );
} else if ( mapContext.match(vc80) ) {
WScript.Echo( "vc8" );
} else if ( mapContext.match(vc90) ) {
WScript.Echo( "vc9" );
} else if ( mapContext.match(vc100) ) {
WScript.Echo( "vc10" );
} else if ( mapContext.match(vc110) ) {
WScript.Echo( "vc11" );
} else if ( mapContext.match(vc120) ) {
WScript.Echo( "vc12" );
} else if ( mapContext.match(vc140) ) {
WScript.Echo( "vc14" );
} else {
WScript.Echo( "unknown" );
}
return;
}
if ( WScript.Arguments(0) == "/minversion" ) {
var compiler_version;
if ( WScript.Arguments(1) == "cl" ) {
compiler_version = clVersion.match(/Compiler Version ([0-9.]+)\s/mi)[1];
// compiler_version is in xx.xx.xxxxx.xx format, i.e. a string.
// It will compare well with major.minor versions where major has two digits,
// which is sufficient as the versions of interest start from 13 (for VC7).
} else if ( WScript.Arguments(1) == "icl" ) {
// Get predefined ICL macros
tmpExec = WshShell.Run("cmd /C icl /QdM /E detect.c > detect.map", 0, true);
var file = fso.OpenTextFile("detect.map", 1, 0);
var defs = file.readAll();
file.Close();
// In #define __INTEL_COMPILER XXYY, XX is the major ICL version, YY is minor
compiler_version = defs.match(/__INTEL_COMPILER[ \t]*([0-9]+).*$/mi)[1]/100;
// compiler version is a number; it compares well with another major.minor
// version number, where major has one, two, and perhaps more digits (9.1, 11, etc).
}
if ( compiler_version >= WScript.Arguments(2) ) {
WScript.Echo( "ok" );
} else {
WScript.Echo( "fail" );
}
return;
}
}
function doClean() {
var fso = new ActiveXObject("Scripting.FileSystemObject");
// delete intermediate files
if ( fso.FileExists("detect.c") )
fso.DeleteFile ("detect.c", false);
if ( fso.FileExists("detect.obj") )
fso.DeleteFile ("detect.obj", false);
if ( fso.FileExists("detect.map") )
fso.DeleteFile ("detect.map", false);
if ( fso.FileExists("detect.exe") )
fso.DeleteFile ("detect.exe", false);
if ( fso.FileExists("detect.exe.manifest") )
fso.DeleteFile ("detect.exe.manifest", false);
}
if ( WScript.Arguments.Count() > 0 ) {
try {
doWork();
} catch( error ) {
WScript.Echo( "unknown" );
}
doClean();
} else {
WScript.Echo( "Supported options:\n"
+ "\t/arch [compiler]\n"
+ "\t/runtime [compiler]\n"
+ "\t/minversion compiler version" );
}