forked from qt-creator/qt-creator
Opening a main.cpp of a Qt Widget Application project that is configured
with a GCC toolchain leads to errors [1] like
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/ia32intrin.h:41:10: \
error: use of undeclared identifier '__builtin_ia32_bsrsi'
due to a wrong determination of the clang directory with intrinsics. The
directory was determined as
$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include
whereas $LLVM_VERSION was extracted as e.g. "3.5" from 'llvm-config
--version' instead of "3.5.0".
The path of clang intrinsics dir shipped with Qt Creator (as package)
does also match this version scheme:
$QTC_INSTALL_DIR/share/qtcreator/cplusplus/clang/3.4.2/include
[1] Visible with qtc.clangcodemodel.verboserun=true
Change-Id: I1061912eef437a9889987e638915d2fabe208011
Reviewed-by: hjk <hjk@theqtcompany.com>
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
102 lines
3.1 KiB
Plaintext
102 lines
3.1 KiB
Plaintext
isEmpty(LLVM_INSTALL_DIR):LLVM_INSTALL_DIR=$$(LLVM_INSTALL_DIR)
|
|
LLVM_INSTALL_DIR = $$clean_path($$LLVM_INSTALL_DIR)
|
|
|
|
DEFINES += CLANG_COMPLETION
|
|
DEFINES += CLANG_HIGHLIGHTING
|
|
#DEFINES += CLANG_INDEXING
|
|
|
|
defineReplace(findLLVMConfig) {
|
|
LLVM_CONFIG_VARIANTS = \
|
|
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
|
|
!isEmpty(LLVM_INSTALL_DIR) {
|
|
for(variant, LLVM_CONFIG_VARIANTS) {
|
|
variant=$$LLVM_INSTALL_DIR/bin/$$variant
|
|
exists($$variant) {
|
|
return($$variant)
|
|
}
|
|
}
|
|
}
|
|
|
|
# Find llvm-config* in PATH
|
|
ENV_PATH = $$(PATH)
|
|
ENV_PATH = $$split(ENV_PATH, $$QMAKE_DIRLIST_SEP)
|
|
for(variant, LLVM_CONFIG_VARIANTS) {
|
|
for(path, ENV_PATH) {
|
|
subvariant = $$path/$$variant
|
|
exists($$subvariant) {
|
|
return($$subvariant)
|
|
}
|
|
}
|
|
}
|
|
|
|
# Fallback
|
|
return(llvm-config)
|
|
}
|
|
|
|
defineReplace(findClangOnWindows) {
|
|
FILE_EXTS = a dll
|
|
win32-msvc*: FILE_EXTS = lib dll
|
|
for (suffix, $$list(lib bin)) {
|
|
for (libname, $$list(clang libclang)) {
|
|
for (ext, FILE_EXTS) {
|
|
exists("$${LLVM_INSTALL_DIR}/$${suffix}/$${libname}.$${ext}") {
|
|
return($${LLVM_INSTALL_DIR}/$${suffix}/)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
error("Cannot find clang shared library at $${LLVM_INSTALL_DIR}")
|
|
}
|
|
|
|
win32 {
|
|
LLVM_INCLUDEPATH = "$$LLVM_INSTALL_DIR/include"
|
|
CLANG_LIB_PATH = $$findClangOnWindows()
|
|
CLANG_LIB = clang
|
|
!exists("$${CLANG_LIB_PATH}/clang.*"):CLANG_LIB = libclang
|
|
|
|
LLVM_LIBS = -L"$${CLANG_LIB_PATH}" -l$${CLANG_LIB}
|
|
LLVM_LIBS += -ladvapi32 -lshell32
|
|
LLVM_VERSION = 3.4
|
|
}
|
|
|
|
unix {
|
|
LLVM_CONFIG = $$findLLVMConfig()
|
|
|
|
LLVM_VERSION = $$system($$LLVM_CONFIG --version 2>/dev/null)
|
|
LLVM_VERSION = $$replace(LLVM_VERSION, ^(\\d+\\.\\d+\\.\\d+).*$, \\1)
|
|
message("... version $$LLVM_VERSION")
|
|
|
|
LLVM_INCLUDEPATH = $$system($$LLVM_CONFIG --includedir 2>/dev/null)
|
|
isEmpty(LLVM_INCLUDEPATH):LLVM_INCLUDEPATH=$$LLVM_INSTALL_DIR/include
|
|
LLVM_LIBDIR = $$system($$LLVM_CONFIG --libdir 2>/dev/null)
|
|
isEmpty(LLVM_LIBDIR):LLVM_LIBDIR=$$LLVM_INSTALL_DIR/lib
|
|
|
|
exists ($${LLVM_LIBDIR}/libclang.*) {
|
|
#message("LLVM was build with autotools")
|
|
CLANG_LIB = clang
|
|
} else {
|
|
exists ($${LLVM_LIBDIR}/liblibclang.*) {
|
|
#message("LLVM was build with CMake")
|
|
CLANG_LIB = libclang
|
|
} else {
|
|
exists ($${LLVM_INSTALL_DIR}/lib/libclang.*) {
|
|
#message("libclang placed separately from LLVM")
|
|
CLANG_LIB = clang
|
|
LLVM_LIBDIR = $${LLVM_INSTALL_DIR}/lib
|
|
LLVM_INCLUDEPATH=$${LLVM_INSTALL_DIR}/include
|
|
} else {
|
|
error("Cannot find Clang shared library!")
|
|
}
|
|
}
|
|
}
|
|
|
|
LLVM_LIBS = -L$${LLVM_LIBDIR}
|
|
LLVM_LIBS += -l$${CLANG_LIB}
|
|
}
|
|
|
|
DEFINES += CLANG_VERSION=\\\"$${LLVM_VERSION}\\\"
|
|
DEFINES += "\"CLANG_RESOURCE_DIR=\\\"$${LLVM_LIBDIR}/clang/$${LLVM_VERSION}/include\\\"\""
|