2016-03-22 14:28:07 +01:00
|
|
|
var Environment = loadExtension("qbs.Environment")
|
2015-07-31 11:37:36 +02:00
|
|
|
var File = loadExtension("qbs.File")
|
2016-01-12 16:53:12 +01:00
|
|
|
var MinimumLLVMVersion = "3.6.2"
|
2016-06-16 12:11:22 +02:00
|
|
|
var Process = loadExtension("qbs.Process")
|
2015-07-31 11:37:36 +02:00
|
|
|
|
2016-06-16 12:11:22 +02:00
|
|
|
function readOutput(executable, args)
|
|
|
|
|
{
|
|
|
|
|
var p = new Process();
|
|
|
|
|
var output = "";
|
|
|
|
|
if (p.exec(executable, args, false) !== -1)
|
|
|
|
|
output = p.readStdOut().trim(); // Trailing newline.
|
|
|
|
|
p.close();
|
|
|
|
|
return output;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions)
|
2015-08-03 14:08:58 +02:00
|
|
|
{
|
|
|
|
|
if (File.exists(llvmConfigCandidate)) {
|
2016-06-16 12:11:22 +02:00
|
|
|
var candidateVersion = version(llvmConfigCandidate);
|
2015-08-03 14:08:58 +02:00
|
|
|
if (candidateVersion && candidateVersion.length)
|
|
|
|
|
return qtcFunctions.versionIsAtLeast(candidateVersion, MinimumLLVMVersion)
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-16 12:11:22 +02:00
|
|
|
function llvmConfig(qbs, qtcFunctions)
|
2015-06-01 18:51:55 +02:00
|
|
|
{
|
2016-03-22 14:28:07 +01:00
|
|
|
var llvmInstallDirFromEnv = Environment.getEnv("LLVM_INSTALL_DIR")
|
2015-06-01 18:51:55 +02:00
|
|
|
var llvmConfigVariants = [
|
|
|
|
|
"llvm-config", "llvm-config-3.2", "llvm-config-3.3", "llvm-config-3.4",
|
|
|
|
|
"llvm-config-3.5", "llvm-config-3.6", "llvm-config-4.0", "llvm-config-4.1"
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
// Prefer llvm-config* from LLVM_INSTALL_DIR
|
2015-12-30 17:59:16 +08:00
|
|
|
var suffix = qbs.hostOS.contains("windows") ? ".exe" : "";
|
2015-06-01 18:51:55 +02:00
|
|
|
if (llvmInstallDirFromEnv) {
|
|
|
|
|
for (var i = 0; i < llvmConfigVariants.length; ++i) {
|
2015-12-30 17:59:16 +08:00
|
|
|
var variant = llvmInstallDirFromEnv + "/bin/" + llvmConfigVariants[i] + suffix;
|
2016-06-16 12:11:22 +02:00
|
|
|
if (isSuitableLLVMConfig(variant, qtcFunctions))
|
2015-06-01 18:51:55 +02:00
|
|
|
return variant;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find llvm-config* in PATH
|
2016-03-22 14:28:07 +01:00
|
|
|
var pathListString = Environment.getEnv("PATH");
|
2015-06-01 18:51:55 +02:00
|
|
|
var separator = qbs.hostOS.contains("windows") ? ";" : ":";
|
|
|
|
|
var pathList = pathListString.split(separator);
|
|
|
|
|
for (var i = 0; i < llvmConfigVariants.length; ++i) {
|
|
|
|
|
for (var j = 0; j < pathList.length; ++j) {
|
2015-12-30 17:59:16 +08:00
|
|
|
var variant = pathList[j] + "/" + llvmConfigVariants[i] + suffix;
|
2016-06-16 12:11:22 +02:00
|
|
|
if (isSuitableLLVMConfig(variant, qtcFunctions))
|
2015-06-01 18:51:55 +02:00
|
|
|
return variant;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
|
2016-06-16 12:11:22 +02:00
|
|
|
function includeDir(llvmConfig)
|
2015-06-01 18:51:55 +02:00
|
|
|
{
|
2016-06-16 12:11:22 +02:00
|
|
|
return readOutput(llvmConfig, ["--includedir"])
|
2015-06-01 18:51:55 +02:00
|
|
|
}
|
|
|
|
|
|
2016-06-16 12:11:22 +02:00
|
|
|
function libDir(llvmConfig)
|
2015-06-01 18:51:55 +02:00
|
|
|
{
|
2016-06-16 12:11:22 +02:00
|
|
|
return readOutput(llvmConfig, ["--libdir"])
|
2015-06-01 18:51:55 +02:00
|
|
|
}
|
|
|
|
|
|
2016-06-16 12:11:22 +02:00
|
|
|
function version(llvmConfig)
|
2015-06-01 18:51:55 +02:00
|
|
|
{
|
2016-06-16 12:11:22 +02:00
|
|
|
return readOutput(llvmConfig, ["--version"]).replace(/(\d+\.\d+\.\d+).*/, "$1")
|
2015-06-01 18:51:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function libraries(targetOS)
|
|
|
|
|
{
|
2016-01-05 13:29:14 +08:00
|
|
|
return targetOS.contains("windows") ? ["libclang.lib", "advapi32.lib", "shell32.lib"] : ["clang"]
|
2015-06-01 18:51:55 +02:00
|
|
|
}
|