clang: Support user-provided llvm-config

... in the qmake and qbs builds. (The look-up mechanism in the cmake
build is completely different.)

Fixes: QTCREATORBUG-20592
Change-Id: I049740795108060aeada62dd030e82390e07fe48
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2020-11-24 11:56:45 +01:00
parent f17bf14533
commit 3e2d224722
3 changed files with 28 additions and 24 deletions

View File

@@ -35,6 +35,9 @@ function isSuitableLLVMConfig(llvmConfigCandidate, qtcFunctions)
function llvmConfig(hostOS, qtcFunctions) function llvmConfig(hostOS, qtcFunctions)
{ {
var llvmConfigFromEnv = Environment.getEnv("LLVM_CONFIG");
if (llvmConfigFromEnv)
return llvmConfigFromEnv;
var llvmInstallDirFromEnv = Environment.getEnv("LLVM_INSTALL_DIR") var llvmInstallDirFromEnv = Environment.getEnv("LLVM_INSTALL_DIR")
var llvmConfigVariants = [ var llvmConfigVariants = [
// CLANG-UPGRADE-CHECK: Adapt once we require a new minimum version. // CLANG-UPGRADE-CHECK: Adapt once we require a new minimum version.

View File

@@ -69,7 +69,7 @@ Module {
validate: { validate: {
if (!clangProbe.found) { if (!clangProbe.found) {
console.warn("No usable libclang version found." console.warn("No usable libclang version found."
+ " Set LLVM_INSTALL_DIR to build the Clang Code Model." + " Set LLVM_CONFIG to build the Clang Code Model."
+ " For details, see" + " For details, see"
+ " doc/src/editors/creator-only/creator-clang-codemodel.qdoc."); + " doc/src/editors/creator-only/creator-clang-codemodel.qdoc.");
throw new Error(); throw new Error();

View File

@@ -1,16 +1,21 @@
isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR) isEmpty(LLVM_CONFIG): LLVM_CONFIG=$$(LLVM_CONFIG)
LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR) llvm_config = $$clean_path($$LLVM_CONFIG)
!isEmpty(llvm_config):!exists($$llvm_config) {
error("Explicitly given LLVM_CONFIG does not exist: $$llvm_config")
}
!isEmpty(LLVM_INSTALL_DIR):!exists($$LLVM_INSTALL_DIR) { isEmpty(LLVM_CONFIG) {
error("Explicitly given LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR") isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR)
LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR)
!isEmpty(LLVM_INSTALL_DIR):!exists($$LLVM_INSTALL_DIR) {
error("Explicitly given LLVM_INSTALL_DIR does not exist: $$LLVM_INSTALL_DIR")
}
} }
defineReplace(llvmWarningOrError) { defineReplace(llvmWarningOrError) {
warningText = $$1 warningText = $$1
errorText = $$2 isEmpty(llvm_config): warning($$warningText)
isEmpty(errorText): errorText = $$warningText else: error($$warningText)
isEmpty(LLVM_INSTALL_DIR): warning($$warningText)
else: error($$errorText)
return(false) return(false)
} }
@@ -134,19 +139,17 @@ defineReplace(extractWarnings) {
BIN_EXTENSION = BIN_EXTENSION =
win32: BIN_EXTENSION = .exe win32: BIN_EXTENSION = .exe
isEmpty(LLVM_INSTALL_DIR) { isEmpty(llvm_config) {
unix { isEmpty(LLVM_INSTALL_DIR) {
llvm_config = $$system(which llvm-config-11) unix: llvm_config = $$system(which llvm-config-11)
isEmpty(llvm_config): llvm_config = $$system(which llvm-config-10) isEmpty(llvm_config): llvm_config = llvm-config
isEmpty(llvm_config): llvm_config = $$system(which llvm-config-9)
}
isEmpty(llvm_config): llvm_config = llvm-config
} else {
exists($$LLVM_INSTALL_DIR/bin/llvm-config-11$$BIN_EXTENSION) {
llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config-11)
} else { } else {
llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config) exists($$LLVM_INSTALL_DIR/bin/llvm-config-11$$BIN_EXTENSION) {
requires(exists($$llvm_config$$BIN_EXTENSION)) llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config-11)
} else {
llvm_config = $$system_quote($$LLVM_INSTALL_DIR/bin/llvm-config)
requires(exists($$llvm_config$$BIN_EXTENSION))
}
} }
} }
@@ -154,9 +157,7 @@ output = $$system($$llvm_config --version, lines)
LLVM_VERSION = $$extractVersion($$output) LLVM_VERSION = $$extractVersion($$output)
isEmpty(LLVM_VERSION) { isEmpty(LLVM_VERSION) {
$$llvmWarningOrError(\ $$llvmWarningOrError("Cannot determine clang version. Set LLVM_CONFIG to build the Clang Code Model")
"Cannot determine clang version. Set LLVM_INSTALL_DIR to build the Clang Code Model",\
"LLVM_INSTALL_DIR does not contain a valid llvm-config, candidate: $$llvm_config")
} else:!versionIsAtLeast($$LLVM_VERSION, 9, 0, 0): { } else:!versionIsAtLeast($$LLVM_VERSION, 9, 0, 0): {
# CLANG-UPGRADE-CHECK: Adapt minimum version numbers. # CLANG-UPGRADE-CHECK: Adapt minimum version numbers.
$$llvmWarningOrError(\ $$llvmWarningOrError(\