1# The SOVERSION should be updated only if a change is made to the libclang 2# ABI, and when it is updated, it should be updated to the current 3# LLVM_VERSION_MAJOR. 4# Please also see clang/tools/libclang/libclang.map 5set(CLANG_SONAME 13) 6 7set(SOURCES 8 ARCMigrate.cpp 9 BuildSystem.cpp 10 CIndex.cpp 11 CIndexCXX.cpp 12 CIndexCodeCompletion.cpp 13 CIndexDiagnostic.cpp 14 CIndexHigh.cpp 15 CIndexInclusionStack.cpp 16 CIndexUSRs.cpp 17 CIndexer.cpp 18 CXComment.cpp 19 CXCursor.cpp 20 CXIndexDataConsumer.cpp 21 CXCompilationDatabase.cpp 22 CXLoadedDiagnostic.cpp 23 CXSourceLocation.cpp 24 CXStoredDiagnostic.cpp 25 CXString.cpp 26 CXType.cpp 27 Indexing.cpp 28 FatalErrorHandler.cpp 29 Rewrite.cpp 30 31 ADDITIONAL_HEADERS 32 CIndexDiagnostic.h 33 CIndexer.h 34 CXCursor.h 35 CXLoadedDiagnostic.h 36 CXSourceLocation.h 37 CXString.h 38 CXTranslationUnit.h 39 CXType.h 40 Index_Internal.h 41 ../../include/clang-c/Index.h 42 ) 43 44set(LIBS 45 clangAST 46 clangBasic 47 clangDriver 48 clangFrontend 49 clangIndex 50 clangLex 51 clangRewrite 52 clangSema 53 clangSerialization 54 clangTooling 55) 56 57if (CLANG_ENABLE_ARCMT) 58 list(APPEND LIBS clangARCMigrate) 59endif () 60 61if (HAVE_LIBDL) 62 list(APPEND LIBS ${CMAKE_DL_LIBS}) 63elseif (CLANG_BUILT_STANDALONE) 64 find_library(DL_LIBRARY_PATH dl) 65 if (DL_LIBRARY_PATH) 66 list(APPEND LIBS dl) 67 endif () 68endif () 69 70option(LIBCLANG_BUILD_STATIC 71 "Build libclang as a static library (in addition to a shared one)" OFF) 72 73set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_BINARY_DIR}/libclang-generic.exports) 74set(LIBCLANG_VERSION_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map) 75 76if(MSVC) 77 # Avoid LNK4197 by not specifying libclang.exports here. 78 # Each functions is exported as "dllexport" in include/clang-c. 79 # KB835326 80 set(LLVM_EXPORTED_SYMBOL_FILE) 81endif() 82 83if (UNIX AND NOT APPLE) 84 set(LLVM_EXPORTED_SYMBOL_FILE) 85 set(USE_VERSION_SCRIPT ${LLVM_HAVE_LINK_VERSION_SCRIPT}) 86endif() 87 88if (LLVM_EXPORTED_SYMBOL_FILE) 89 add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE} 90 COMMAND "${Python3_EXECUTABLE}" 91 ARGS ${CMAKE_CURRENT_SOURCE_DIR}/linker-script-to-export-list.py 92 ${LIBCLANG_VERSION_SCRIPT_FILE} 93 ${LLVM_EXPORTED_SYMBOL_FILE} 94 DEPENDS ${LIBCLANG_VERSION_SCRIPT_FILE}) 95endif() 96 97if(LLVM_ENABLE_PIC OR (WIN32 AND NOT LIBCLANG_BUILD_STATIC)) 98 set(ENABLE_SHARED SHARED) 99endif() 100 101if(NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC) 102 set(ENABLE_STATIC STATIC) 103endif() 104 105if (MSVC AND ENABLE_SHARED AND ENABLE_STATIC) 106 unset(ENABLE_STATIC) 107endif() 108 109if(MSVC) 110 set(output_name "libclang") 111else() 112 set(output_name "clang") 113endif() 114 115# libclang requires headers which need _ALL_SOURCE to build on AIX 116if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX") 117 remove_definitions("-D_XOPEN_SOURCE=700") 118endif() 119 120add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN 121 OUTPUT_NAME ${output_name} 122 ${SOURCES} 123 124 DEPENDS 125 ClangDriverOptions 126 clang-resource-headers 127 128 LINK_LIBS 129 ${LIBS} 130 131 LINK_COMPONENTS 132 ${LLVM_TARGETS_TO_BUILD} 133 Core 134 Support 135 ) 136 137if(ENABLE_STATIC) 138 foreach(name libclang obj.libclang libclang_static) 139 if (TARGET ${name}) 140 target_compile_definitions(${name} PUBLIC CINDEX_NO_EXPORTS) 141 endif() 142 endforeach() 143endif() 144 145if(ENABLE_SHARED) 146 if(WIN32) 147 set_target_properties(libclang 148 PROPERTIES 149 VERSION ${LIBCLANG_LIBRARY_VERSION} 150 DEFINE_SYMBOL _CINDEX_LIB_) 151 elseif(APPLE) 152 set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1") 153 set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}") 154 155 set_property(TARGET libclang APPEND_STRING PROPERTY 156 LINK_FLAGS ${LIBCLANG_LINK_FLAGS}) 157 else() 158 set_target_properties(libclang 159 PROPERTIES 160 VERSION ${LIBCLANG_LIBRARY_VERSION} 161 DEFINE_SYMBOL _CINDEX_LIB_) 162 # FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32. 163 if(LLVM_ENABLE_MODULES AND NOT WIN32) 164 target_compile_options(libclang PRIVATE 165 "-fmodules-ignore-macro=_CINDEX_LIB_" 166 ) 167 endif() 168 endif() 169 if (USE_VERSION_SCRIPT) 170 target_link_options(libclang PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map") 171 # The Solaris 11.4 linker supports a subset of GNU ld version scripts, 172 # but requires a special option to enable it. 173 if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS") 174 target_link_options(libclang PRIVATE "-Wl,-z,gnu-version-script-compat") 175 endif() 176 # Ensure that libclang.so gets rebuilt when the linker script changes. 177 set_property(SOURCE ARCMigrate.cpp APPEND PROPERTY 178 OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map) 179 180 set_target_properties(libclang PROPERTIES 181 VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX} 182 SOVERSION ${CLANG_SONAME}) 183 endif() 184endif() 185 186if(INTERNAL_INSTALL_PREFIX) 187 set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include") 188else() 189 set(LIBCLANG_HEADERS_INSTALL_DESTINATION include) 190endif() 191 192install(DIRECTORY ../../include/clang-c 193 COMPONENT libclang-headers 194 DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}" 195 FILES_MATCHING 196 PATTERN "*.h" 197 ) 198 199# LLVM_DISTRIBUTION_COMPONENTS requires that each component have both a 200# component and an install-component target, so add a dummy libclang-headers 201# target to allow using it in LLVM_DISTRIBUTION_COMPONENTS. 202add_custom_target(libclang-headers) 203set_target_properties(libclang-headers PROPERTIES FOLDER "Misc") 204 205if (NOT LLVM_ENABLE_IDE) 206 add_llvm_install_targets(install-libclang-headers 207 COMPONENT libclang-headers) 208endif() 209 210# Create a target to install the python bindings to make them easier to 211# distribute. Since the bindings are over libclang, which is installed 212# unbundled to the clang version, follow suit. 213foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS}) 214 install(DIRECTORY 215 ${CMAKE_CURRENT_SOURCE_DIR}/../../bindings/python/clang 216 COMPONENT 217 libclang-python-bindings 218 DESTINATION 219 "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages") 220endforeach() 221if(NOT LLVM_ENABLE_IDE) 222 add_custom_target(libclang-python-bindings) 223 add_llvm_install_targets(install-libclang-python-bindings 224 COMPONENT 225 libclang-python-bindings) 226endif() 227 228