diff options
Diffstat (limited to 'src/shared/clang/clang_installation.pri')
-rw-r--r-- | src/shared/clang/clang_installation.pri | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/shared/clang/clang_installation.pri b/src/shared/clang/clang_installation.pri new file mode 100644 index 0000000000..ec2f3749b1 --- /dev/null +++ b/src/shared/clang/clang_installation.pri @@ -0,0 +1,101 @@ +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\\\"\"" |