xref: /netbsd-src/external/apache2/llvm/dist/clang/tools/libclang/CMakeLists.txt (revision a45db23f655e22f0c2354600d3b3c2cb98abf2dc)
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