1set(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 FatalErrorHandler.cpp 23 Rewrite.cpp 24 25 ADDITIONAL_HEADERS 26 CIndexDiagnostic.h 27 CIndexer.h 28 CXCursor.h 29 CXLoadedDiagnostic.h 30 CXSourceLocation.h 31 CXString.h 32 CXTranslationUnit.h 33 CXType.h 34 Index_Internal.h 35 ../../include/clang-c/Index.h 36 ) 37 38set(LIBS 39 clangAST 40 clangBasic 41 clangDriver 42 clangFrontend 43 clangIndex 44 clangLex 45 clangRewrite 46 clangSema 47 clangSerialization 48 clangTooling 49) 50 51if (CLANG_ENABLE_ARCMT) 52 list(APPEND LIBS clangARCMigrate) 53endif () 54 55if (HAVE_LIBDL) 56 list(APPEND LIBS ${CMAKE_DL_LIBS}) 57elseif (CLANG_BUILT_STANDALONE) 58 find_library(DL_LIBRARY_PATH dl) 59 if (DL_LIBRARY_PATH) 60 list(APPEND LIBS dl) 61 endif () 62endif () 63 64option(LIBCLANG_BUILD_STATIC 65 "Build libclang as a static library (in addition to a shared one)" OFF) 66 67set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.exports) 68 69if(MSVC) 70 # Avoid LNK4197 by not specifying libclang.exports here. 71 # Each functions is exported as "dllexport" in include/clang-c. 72 # KB835326 73 set(LLVM_EXPORTED_SYMBOL_FILE) 74endif() 75 76if(LLVM_ENABLE_PIC OR (WIN32 AND NOT LIBCLANG_BUILD_STATIC)) 77 set(ENABLE_SHARED SHARED) 78endif() 79 80if(NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC) 81 set(ENABLE_STATIC STATIC) 82endif() 83 84if (MSVC AND ENABLE_SHARED AND ENABLE_STATIC) 85 unset(ENABLE_STATIC) 86endif() 87 88if(MSVC) 89 set(output_name "libclang") 90else() 91 set(output_name "clang") 92endif() 93 94# libclang requires headers which need _ALL_SOURCE to build on AIX 95if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX") 96 remove_definitions("-D_XOPEN_SOURCE=700") 97endif() 98 99add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN 100 OUTPUT_NAME ${output_name} 101 ${SOURCES} 102 103 DEPENDS 104 ClangDriverOptions 105 clang-resource-headers 106 107 LINK_LIBS 108 ${LIBS} 109 110 LINK_COMPONENTS 111 ${LLVM_TARGETS_TO_BUILD} 112 Core 113 Support 114 ) 115 116if(ENABLE_STATIC) 117 foreach(name libclang obj.libclang libclang_static) 118 if (TARGET ${name}) 119 target_compile_definitions(${name} PUBLIC CINDEX_NO_EXPORTS) 120 endif() 121 endforeach() 122endif() 123 124if(ENABLE_SHARED) 125 if(WIN32) 126 set_target_properties(libclang 127 PROPERTIES 128 VERSION ${LIBCLANG_LIBRARY_VERSION} 129 DEFINE_SYMBOL _CINDEX_LIB_) 130 elseif(APPLE) 131 set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") 132 set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") 133 134 set_property(TARGET libclang APPEND_STRING PROPERTY 135 LINK_FLAGS ${LIBCLANG_LINK_FLAGS}) 136 else() 137 set_target_properties(libclang 138 PROPERTIES 139 VERSION ${LIBCLANG_LIBRARY_VERSION} 140 DEFINE_SYMBOL _CINDEX_LIB_) 141 # FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32. 142 if(LLVM_ENABLE_MODULES AND NOT WIN32) 143 target_compile_options(libclang PRIVATE 144 "-fmodules-ignore-macro=_CINDEX_LIB_" 145 ) 146 endif() 147 endif() 148endif() 149 150if(INTERNAL_INSTALL_PREFIX) 151 set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include") 152else() 153 set(LIBCLANG_HEADERS_INSTALL_DESTINATION include) 154endif() 155 156install(DIRECTORY ../../include/clang-c 157 COMPONENT libclang-headers 158 DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}" 159 FILES_MATCHING 160 PATTERN "*.h" 161 ) 162 163# LLVM_DISTRIBUTION_COMPONENTS requires that each component have both a 164# component and an install-component target, so add a dummy libclang-headers 165# target to allow using it in LLVM_DISTRIBUTION_COMPONENTS. 166add_custom_target(libclang-headers) 167set_target_properties(libclang-headers PROPERTIES FOLDER "Misc") 168 169if (NOT LLVM_ENABLE_IDE) 170 add_llvm_install_targets(install-libclang-headers 171 COMPONENT libclang-headers) 172endif() 173 174# Create a target to install the python bindings to make them easier to 175# distribute. Since the bindings are over libclang, which is installed 176# unbundled to the clang version, follow suit. 177foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS}) 178 install(DIRECTORY 179 ${CMAKE_CURRENT_SOURCE_DIR}/../../bindings/python/clang 180 COMPONENT 181 libclang-python-bindings 182 DESTINATION 183 "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") 184endforeach() 185if(NOT LLVM_ENABLE_IDE) 186 add_custom_target(libclang-python-bindings) 187 add_llvm_install_targets(install-libclang-python-bindings 188 COMPONENT 189 libclang-python-bindings) 190endif() 191 192