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"
|
2015-07-31 11:37:36 +02:00
|
|
|
|
2015-08-03 14:08:58 +02:00
|
|
|
function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions, processOutputReader)
|
|
|
|
|
{
|
|
|
|
|
if (File.exists(llvmConfigCandidate)) {
|
|
|
|
|
var candidateVersion = version(llvmConfigCandidate, processOutputReader);
|
|
|
|
|
if (candidateVersion && candidateVersion.length)
|
|
|
|
|
return qtcFunctions.versionIsAtLeast(candidateVersion, MinimumLLVMVersion)
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function llvmConfig(qbs, qtcFunctions, processOutputReader)
|
2015-06-01 18:51:55 +02:00
|
|
|
{
|
|
|
|
|
var llvmInstallDirFromEnv = qbs.getEnv("LLVM_INSTALL_DIR")
|
|
|
|
|
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;
|
2015-08-03 14:08:58 +02:00
|
|
|
if (isSuitableLLVMConfig(variant, qtcFunctions, processOutputReader))
|
2015-06-01 18:51:55 +02:00
|
|
|
return variant;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Find llvm-config* in PATH
|
|
|
|
|
var pathListString = qbs.getEnv("PATH");
|
|
|
|
|
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;
|
2015-08-03 14:08:58 +02:00
|
|
|
if (isSuitableLLVMConfig(variant, qtcFunctions, processOutputReader))
|
2015-06-01 18:51:55 +02:00
|
|
|
return variant;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return undefined;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function includeDir(llvmConfig, processOutputReader)
|
|
|
|
|
{
|
|
|
|
|
return processOutputReader.readOutput(llvmConfig, ["--includedir"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function libDir(llvmConfig, processOutputReader)
|
|
|
|
|
{
|
|
|
|
|
return processOutputReader.readOutput(llvmConfig, ["--libdir"])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function version(llvmConfig, processOutputReader)
|
|
|
|
|
{
|
|
|
|
|
return processOutputReader.readOutput(llvmConfig, ["--version"])
|
|
|
|
|
.replace(/(\d+\.\d+\.\d+).*/, "$1")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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
|
|
|
}
|