Clang Project

clang_source_code/tools/libclang/CMakeLists.txt
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
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
36set(LIBS
37  clangAST
38  clangBasic
39  clangDriver
40  clangFrontend
41  clangIndex
42  clangLex
43  clangSema
44  clangSerialization
45  clangTooling
46)
47
48if (CLANG_ENABLE_ARCMT)
49  list(APPEND LIBS clangARCMigrate)
50endif ()
51
52if (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()
59endif ()
60
61find_library(DL_LIBRARY_PATH dl)
62if (DL_LIBRARY_PATH)
63  list(APPEND LIBS dl)
64endif()
65
66option(LIBCLANG_BUILD_STATIC
67  "Build libclang as a static library (in addition to a shared one)" OFF)
68
69set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.exports)
70
71if(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)
76endif()
77
78if(LLVM_ENABLE_PIC OR WIN32)
79  set(ENABLE_SHARED SHARED)
80endif()
81
82if((NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC) AND NOT WIN32)
83  set(ENABLE_STATIC STATIC)
84endif()
85
86if(WIN32)
87  set(output_name "libclang")
88else()
89  set(output_name "clang")
90endif()
91
92add_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
106if(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()
130endif()
131
132if(INTERNAL_INSTALL_PREFIX)
133  set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include")
134else()
135  set(LIBCLANG_HEADERS_INSTALL_DESTINATION include)
136endif()
137
138install(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.
149add_custom_target(libclang-headers)
150set_target_properties(libclang-headers PROPERTIES FOLDER "Misc")
151
152if (NOT LLVM_ENABLE_IDE)
153  add_llvm_install_targets(install-libclang-headers
154                           COMPONENT libclang-headers)
155endif()
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.
160foreach(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")
167endforeach()
168if(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)
173endif()
174
175