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 | |