forked from OSchip/llvm-project
228 lines
6.4 KiB
CMake
228 lines
6.4 KiB
CMake
# The SOVERSION should be updated only if a change is made to the libclang
|
|
# ABI, and when it is updated, it should be updated to the current
|
|
# LLVM_VERSION_MAJOR.
|
|
# Please also see clang/tools/libclang/libclang.map
|
|
set(CLANG_SONAME 13)
|
|
|
|
set(SOURCES
|
|
ARCMigrate.cpp
|
|
BuildSystem.cpp
|
|
CIndex.cpp
|
|
CIndexCXX.cpp
|
|
CIndexCodeCompletion.cpp
|
|
CIndexDiagnostic.cpp
|
|
CIndexHigh.cpp
|
|
CIndexInclusionStack.cpp
|
|
CIndexUSRs.cpp
|
|
CIndexer.cpp
|
|
CXComment.cpp
|
|
CXCursor.cpp
|
|
CXIndexDataConsumer.cpp
|
|
CXCompilationDatabase.cpp
|
|
CXLoadedDiagnostic.cpp
|
|
CXSourceLocation.cpp
|
|
CXStoredDiagnostic.cpp
|
|
CXString.cpp
|
|
CXType.cpp
|
|
Indexing.cpp
|
|
FatalErrorHandler.cpp
|
|
Rewrite.cpp
|
|
|
|
ADDITIONAL_HEADERS
|
|
CIndexDiagnostic.h
|
|
CIndexer.h
|
|
CXCursor.h
|
|
CXLoadedDiagnostic.h
|
|
CXSourceLocation.h
|
|
CXString.h
|
|
CXTranslationUnit.h
|
|
CXType.h
|
|
Index_Internal.h
|
|
../../include/clang-c/Index.h
|
|
)
|
|
|
|
set(LIBS
|
|
clangAST
|
|
clangBasic
|
|
clangDriver
|
|
clangFrontend
|
|
clangIndex
|
|
clangLex
|
|
clangRewrite
|
|
clangSema
|
|
clangSerialization
|
|
clangTooling
|
|
)
|
|
|
|
if (CLANG_ENABLE_ARCMT)
|
|
list(APPEND LIBS clangARCMigrate)
|
|
endif ()
|
|
|
|
if (HAVE_LIBDL)
|
|
list(APPEND LIBS ${CMAKE_DL_LIBS})
|
|
elseif (CLANG_BUILT_STANDALONE)
|
|
find_library(DL_LIBRARY_PATH dl)
|
|
if (DL_LIBRARY_PATH)
|
|
list(APPEND LIBS dl)
|
|
endif ()
|
|
endif ()
|
|
|
|
option(LIBCLANG_BUILD_STATIC
|
|
"Build libclang as a static library (in addition to a shared one)" OFF)
|
|
|
|
set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_BINARY_DIR}/libclang-generic.exports)
|
|
set(LIBCLANG_VERSION_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map)
|
|
|
|
if(MSVC)
|
|
# Avoid LNK4197 by not specifying libclang.exports here.
|
|
# Each functions is exported as "dllexport" in include/clang-c.
|
|
# KB835326
|
|
set(LLVM_EXPORTED_SYMBOL_FILE)
|
|
endif()
|
|
|
|
if (UNIX AND NOT APPLE)
|
|
set(LLVM_EXPORTED_SYMBOL_FILE)
|
|
set(USE_VERSION_SCRIPT ${LLVM_HAVE_LINK_VERSION_SCRIPT})
|
|
endif()
|
|
|
|
if (LLVM_EXPORTED_SYMBOL_FILE)
|
|
add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE}
|
|
COMMAND "${Python3_EXECUTABLE}"
|
|
ARGS ${CMAKE_CURRENT_SOURCE_DIR}/linker-script-to-export-list.py
|
|
${LIBCLANG_VERSION_SCRIPT_FILE}
|
|
${LLVM_EXPORTED_SYMBOL_FILE}
|
|
DEPENDS ${LIBCLANG_VERSION_SCRIPT_FILE})
|
|
endif()
|
|
|
|
if(LLVM_ENABLE_PIC OR (WIN32 AND NOT LIBCLANG_BUILD_STATIC))
|
|
set(ENABLE_SHARED SHARED)
|
|
endif()
|
|
|
|
if(NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC)
|
|
set(ENABLE_STATIC STATIC)
|
|
endif()
|
|
|
|
if (MSVC AND ENABLE_SHARED AND ENABLE_STATIC)
|
|
unset(ENABLE_STATIC)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
set(output_name "libclang")
|
|
else()
|
|
set(output_name "clang")
|
|
endif()
|
|
|
|
# libclang requires headers which need _ALL_SOURCE to build on AIX
|
|
if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
|
|
remove_definitions("-D_XOPEN_SOURCE=700")
|
|
endif()
|
|
|
|
add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN
|
|
OUTPUT_NAME ${output_name}
|
|
${SOURCES}
|
|
|
|
DEPENDS
|
|
ClangDriverOptions
|
|
clang-resource-headers
|
|
|
|
LINK_LIBS
|
|
${LIBS}
|
|
|
|
LINK_COMPONENTS
|
|
${LLVM_TARGETS_TO_BUILD}
|
|
Core
|
|
Support
|
|
)
|
|
|
|
if(ENABLE_STATIC)
|
|
foreach(name libclang obj.libclang libclang_static)
|
|
if (TARGET ${name})
|
|
target_compile_definitions(${name} PUBLIC CINDEX_NO_EXPORTS)
|
|
endif()
|
|
endforeach()
|
|
endif()
|
|
|
|
if(ENABLE_SHARED)
|
|
if(WIN32)
|
|
set_target_properties(libclang
|
|
PROPERTIES
|
|
VERSION ${LIBCLANG_LIBRARY_VERSION}
|
|
DEFINE_SYMBOL _CINDEX_LIB_)
|
|
elseif(APPLE)
|
|
set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
|
|
set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
|
|
|
|
set_property(TARGET libclang APPEND_STRING PROPERTY
|
|
LINK_FLAGS ${LIBCLANG_LINK_FLAGS})
|
|
else()
|
|
set_target_properties(libclang
|
|
PROPERTIES
|
|
VERSION ${LIBCLANG_LIBRARY_VERSION}
|
|
DEFINE_SYMBOL _CINDEX_LIB_)
|
|
# FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32.
|
|
if(LLVM_ENABLE_MODULES AND NOT WIN32)
|
|
target_compile_options(libclang PRIVATE
|
|
"-fmodules-ignore-macro=_CINDEX_LIB_"
|
|
)
|
|
endif()
|
|
endif()
|
|
if (USE_VERSION_SCRIPT)
|
|
target_link_options(libclang PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map")
|
|
# The Solaris 11.4 linker supports a subset of GNU ld version scripts,
|
|
# but requires a special option to enable it.
|
|
if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
|
|
target_link_options(libclang PRIVATE "-Wl,-z,gnu-version-script-compat")
|
|
endif()
|
|
# Ensure that libclang.so gets rebuilt when the linker script changes.
|
|
set_property(SOURCE ARCMigrate.cpp APPEND PROPERTY
|
|
OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map)
|
|
|
|
set_target_properties(libclang PROPERTIES
|
|
VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}
|
|
SOVERSION ${CLANG_SONAME})
|
|
endif()
|
|
endif()
|
|
|
|
if(INTERNAL_INSTALL_PREFIX)
|
|
set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include")
|
|
else()
|
|
set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
|
|
endif()
|
|
|
|
install(DIRECTORY ../../include/clang-c
|
|
COMPONENT libclang-headers
|
|
DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}"
|
|
FILES_MATCHING
|
|
PATTERN "*.h"
|
|
)
|
|
|
|
# LLVM_DISTRIBUTION_COMPONENTS requires that each component have both a
|
|
# component and an install-component target, so add a dummy libclang-headers
|
|
# target to allow using it in LLVM_DISTRIBUTION_COMPONENTS.
|
|
add_custom_target(libclang-headers)
|
|
set_target_properties(libclang-headers PROPERTIES FOLDER "Misc")
|
|
|
|
if (NOT LLVM_ENABLE_IDE)
|
|
add_llvm_install_targets(install-libclang-headers
|
|
COMPONENT libclang-headers)
|
|
endif()
|
|
|
|
# Create a target to install the python bindings to make them easier to
|
|
# distribute. Since the bindings are over libclang, which is installed
|
|
# unbundled to the clang version, follow suit.
|
|
foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
|
|
install(DIRECTORY
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../bindings/python/clang
|
|
COMPONENT
|
|
libclang-python-bindings
|
|
DESTINATION
|
|
"lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
|
|
endforeach()
|
|
if(NOT LLVM_ENABLE_IDE)
|
|
add_custom_target(libclang-python-bindings)
|
|
add_llvm_install_targets(install-libclang-python-bindings
|
|
COMPONENT
|
|
libclang-python-bindings)
|
|
endif()
|
|
|