| 1 | set(SOURCES |
| 2 | ARCMigrate.cpp |
| 3 | BuildSystem.cpp |
| 4 | CIndex.cpp |
| 5 | CIndexCXX.cpp |
| 6 | CIndexCodeCompletion.cpp |
| 7 | CIndexDiagnostic.cpp |
| 8 | CIndexHigh.cpp |
| 9 | CIndexInclusionStack.cpp |
| 10 | CIndexUSRs.cpp |
| 11 | CIndexer.cpp |
| 12 | CXComment.cpp |
| 13 | CXCursor.cpp |
| 14 | CXIndexDataConsumer.cpp |
| 15 | CXCompilationDatabase.cpp |
| 16 | CXLoadedDiagnostic.cpp |
| 17 | CXSourceLocation.cpp |
| 18 | CXStoredDiagnostic.cpp |
| 19 | CXString.cpp |
| 20 | CXType.cpp |
| 21 | Indexing.cpp |
| 22 | |
| 23 | ADDITIONAL_HEADERS |
| 24 | CIndexDiagnostic.h |
| 25 | CIndexer.h |
| 26 | CXCursor.h |
| 27 | CXLoadedDiagnostic.h |
| 28 | CXSourceLocation.h |
| 29 | CXString.h |
| 30 | CXTranslationUnit.h |
| 31 | CXType.h |
| 32 | Index_Internal.h |
| 33 | ../../include/clang-c/Index.h |
| 34 | ) |
| 35 | |
| 36 | set(LIBS |
| 37 | clangAST |
| 38 | clangBasic |
| 39 | clangDriver |
| 40 | clangFrontend |
| 41 | clangIndex |
| 42 | clangLex |
| 43 | clangSema |
| 44 | clangSerialization |
| 45 | clangTooling |
| 46 | ) |
| 47 | |
| 48 | if (CLANG_ENABLE_ARCMT) |
| 49 | list(APPEND LIBS clangARCMigrate) |
| 50 | endif () |
| 51 | |
| 52 | if (TARGET clangTidyPlugin) |
| 53 | add_definitions(-DCLANG_TOOL_EXTRA_BUILD) |
| 54 | list(APPEND LIBS clangTidyPlugin) |
| 55 | list(APPEND LIBS clangIncludeFixerPlugin) |
| 56 | if(LLVM_ENABLE_MODULES) |
| 57 | list(APPEND LLVM_COMPILE_FLAGS "-fmodules-ignore-macro=CLANG_TOOL_EXTRA_BUILD") |
| 58 | endif() |
| 59 | endif () |
| 60 | |
| 61 | find_library(DL_LIBRARY_PATH dl) |
| 62 | if (DL_LIBRARY_PATH) |
| 63 | list(APPEND LIBS dl) |
| 64 | endif() |
| 65 | |
| 66 | option(LIBCLANG_BUILD_STATIC |
| 67 | "Build libclang as a static library (in addition to a shared one)" OFF) |
| 68 | |
| 69 | set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.exports) |
| 70 | |
| 71 | if(MSVC) |
| 72 | # Avoid LNK4197 by not specifying libclang.exports here. |
| 73 | # Each functions is exported as "dllexport" in include/clang-c. |
| 74 | # KB835326 |
| 75 | set(LLVM_EXPORTED_SYMBOL_FILE) |
| 76 | endif() |
| 77 | |
| 78 | if(LLVM_ENABLE_PIC OR WIN32) |
| 79 | set(ENABLE_SHARED SHARED) |
| 80 | endif() |
| 81 | |
| 82 | if((NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC) AND NOT WIN32) |
| 83 | set(ENABLE_STATIC STATIC) |
| 84 | endif() |
| 85 | |
| 86 | if(WIN32) |
| 87 | set(output_name "libclang") |
| 88 | else() |
| 89 | set(output_name "clang") |
| 90 | endif() |
| 91 | |
| 92 | add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} |
| 93 | OUTPUT_NAME ${output_name} |
| 94 | ${SOURCES} |
| 95 | DEPENDS clang-resource-headers |
| 96 | |
| 97 | LINK_LIBS |
| 98 | ${LIBS} |
| 99 | |
| 100 | LINK_COMPONENTS |
| 101 | ${LLVM_TARGETS_TO_BUILD} |
| 102 | Core |
| 103 | Support |
| 104 | ) |
| 105 | |
| 106 | if(ENABLE_SHARED) |
| 107 | if(WIN32) |
| 108 | set_target_properties(libclang |
| 109 | PROPERTIES |
| 110 | VERSION ${LIBCLANG_LIBRARY_VERSION} |
| 111 | DEFINE_SYMBOL _CINDEX_LIB_) |
| 112 | elseif(APPLE) |
| 113 | set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") |
| 114 | set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") |
| 115 | |
| 116 | set_property(TARGET libclang APPEND_STRING PROPERTY |
| 117 | LINK_FLAGS ${LIBCLANG_LINK_FLAGS}) |
| 118 | else() |
| 119 | set_target_properties(libclang |
| 120 | PROPERTIES |
| 121 | VERSION ${LIBCLANG_LIBRARY_VERSION} |
| 122 | DEFINE_SYMBOL _CINDEX_LIB_) |
| 123 | # FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32. |
| 124 | if(LLVM_ENABLE_MODULES AND NOT WIN32) |
| 125 | target_compile_options(libclang PRIVATE |
| 126 | "-fmodules-ignore-macro=_CINDEX_LIB_" |
| 127 | ) |
| 128 | endif() |
| 129 | endif() |
| 130 | endif() |
| 131 | |
| 132 | if(INTERNAL_INSTALL_PREFIX) |
| 133 | set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include") |
| 134 | else() |
| 135 | set(LIBCLANG_HEADERS_INSTALL_DESTINATION include) |
| 136 | endif() |
| 137 | |
| 138 | install(DIRECTORY ../../include/clang-c |
| 139 | COMPONENT libclang-headers |
| 140 | DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}" |
| 141 | FILES_MATCHING |
| 142 | PATTERN "*.h" |
| 143 | PATTERN ".svn" EXCLUDE |
| 144 | ) |
| 145 | |
| 146 | # LLVM_DISTRIBUTION_COMPONENTS requires that each component have both a |
| 147 | # component and an install-component target, so add a dummy libclang-headers |
| 148 | # target to allow using it in LLVM_DISTRIBUTION_COMPONENTS. |
| 149 | add_custom_target(libclang-headers) |
| 150 | set_target_properties(libclang-headers PROPERTIES FOLDER "Misc") |
| 151 | |
| 152 | if (NOT LLVM_ENABLE_IDE) |
| 153 | add_llvm_install_targets(install-libclang-headers |
| 154 | COMPONENT libclang-headers) |
| 155 | endif() |
| 156 | |
| 157 | # Create a target to install the python bindings to make them easier to |
| 158 | # distribute. Since the bindings are over libclang, which is installed |
| 159 | # unbundled to the clang version, follow suit. |
| 160 | foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS}) |
| 161 | install(DIRECTORY |
| 162 | ${CMAKE_CURRENT_SOURCE_DIR}/../../bindings/python/clang |
| 163 | COMPONENT |
| 164 | libclang-python-bindings |
| 165 | DESTINATION |
| 166 | "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") |
| 167 | endforeach() |
| 168 | if(NOT LLVM_ENABLE_IDE) |
| 169 | add_custom_target(libclang-python-bindings) |
| 170 | add_llvm_install_targets(install-libclang-python-bindings |
| 171 | COMPONENT |
| 172 | libclang-python-bindings) |
| 173 | endif() |
| 174 | |
| 175 | |