Files
qt-creator/src/plugins/clangcodemodel/clang_installation.pri
Nikolai Kosjar e488f10c7f Clang: Fix providing clang directory with intrinsics
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>
2015-04-20 12:41:14 +00:00

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\\\"\""