[LoongArch][Clang] Make the parameters and return value of {x,}vorn.v builti ns ...
[llvm-project.git] / clang / tools / libclang / CMakeLists.txt
blob00a1223c0831a7c9049f502dba730a08d0fb4475
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
6 # This option defaults to CLANG_FORCE_MATCHING_LIBCLANG_SOVERSION
7 # to ON - which means that it by default matches CLANG_VERSION_MAJOR
9 # TODO: This should probably not be a option going forward but we
10 # we should commit to a way to do it. But due to getting this out
11 # in LLVM 15.x we opted for a option.
12 set(LIBCLANG_SOVERSION_ARG)
13 if(NOT CLANG_FORCE_MATCHING_LIBCLANG_SOVERSION)
14   set(LIBCLANG_SOVERSION_ARG SOVERSION 13)
15 endif()
17 # TODO: harmonize usage of LIBCLANG_SOVERSION / LIBCLANG_LIBARY_VERSION
18 #       below; this was added under time-pressure to avoid reverting the
19 #       better default from LLVM 14 for LLVM 15.0.0-rc3, hence no time
20 #       to clean up previous inconsistencies.
22 set(SOURCES
23   ARCMigrate.cpp
24   BuildSystem.cpp
25   CIndex.cpp
26   CIndexCXX.cpp
27   CIndexCodeCompletion.cpp
28   CIndexDiagnostic.cpp
29   CIndexHigh.cpp
30   CIndexInclusionStack.cpp
31   CIndexUSRs.cpp
32   CIndexer.cpp
33   CXComment.cpp
34   CXCursor.cpp
35   CXExtractAPI.cpp
36   CXIndexDataConsumer.cpp
37   CXCompilationDatabase.cpp
38   CXLoadedDiagnostic.cpp
39   CXSourceLocation.cpp
40   CXStoredDiagnostic.cpp
41   CXString.cpp
42   CXType.cpp
43   Indexing.cpp
44   FatalErrorHandler.cpp
45   Rewrite.cpp
47   ADDITIONAL_HEADERS
48   CIndexDiagnostic.h
49   CIndexer.h
50   CXCursor.h
51   CXLoadedDiagnostic.h
52   CXSourceLocation.h
53   CXString.h
54   CXTranslationUnit.h
55   CXType.h
56   Index_Internal.h
57   ../../include/clang-c/Index.h
58   )
60 set(LIBS
61   clangAST
62   clangBasic
63   clangDriver
64   clangExtractAPI
65   clangFrontend
66   clangIndex
67   clangLex
68   clangRewrite
69   clangSema
70   clangSerialization
71   clangTooling
74 if (CLANG_ENABLE_ARCMT)
75   list(APPEND LIBS clangARCMigrate)
76 endif ()
78 if (HAVE_LIBDL)
79   list(APPEND LIBS ${CMAKE_DL_LIBS})
80 elseif (CLANG_BUILT_STANDALONE)
81   find_library(DL_LIBRARY_PATH dl)
82   if (DL_LIBRARY_PATH)
83     list(APPEND LIBS dl)
84   endif ()
85 endif ()
87 option(LIBCLANG_BUILD_STATIC
88   "Build libclang as a static library (in addition to a shared one)" OFF)
90 set(LLVM_EXPORTED_SYMBOL_FILE ${CMAKE_CURRENT_BINARY_DIR}/libclang-generic.exports)
91 set(LIBCLANG_VERSION_SCRIPT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map)
93 if(MSVC)
94   # Avoid LNK4197 by not specifying libclang.exports here.
95   # Each functions is exported as "dllexport" in include/clang-c.
96   # KB835326
97   set(LLVM_EXPORTED_SYMBOL_FILE)
98 endif()
100 if (UNIX AND NOT APPLE AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
101   set(LLVM_EXPORTED_SYMBOL_FILE)
102   set(USE_VERSION_SCRIPT ${LLVM_HAVE_LINK_VERSION_SCRIPT})
103 endif()
105 if (LLVM_EXPORTED_SYMBOL_FILE)
106   add_custom_command(OUTPUT ${LLVM_EXPORTED_SYMBOL_FILE}
107                      COMMAND "${Python3_EXECUTABLE}"
108                        ARGS ${CMAKE_CURRENT_SOURCE_DIR}/linker-script-to-export-list.py
109                             ${LIBCLANG_VERSION_SCRIPT_FILE}
110                             ${LLVM_EXPORTED_SYMBOL_FILE}
111                      DEPENDS ${LIBCLANG_VERSION_SCRIPT_FILE})
112 endif()
114 if(LLVM_ENABLE_PIC OR (WIN32 AND NOT LIBCLANG_BUILD_STATIC))
115   set(ENABLE_SHARED SHARED)
116 endif()
118 if(NOT LLVM_ENABLE_PIC OR LIBCLANG_BUILD_STATIC)
119   set(ENABLE_STATIC STATIC)
120 endif()
122 if (MSVC AND ENABLE_SHARED AND ENABLE_STATIC)
123   unset(ENABLE_STATIC)
124 endif()
126 if(MSVC)
127   set(output_name "libclang")
128 else()
129   set(output_name "clang")
130 endif()
132 if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
133     set(CMAKE_AIX_EXPORT_ALL_SYMBOLS OFF)
134     # libclang requires headers which need _ALL_SOURCE to build on AIX
135     remove_definitions("-D_XOPEN_SOURCE=700")
136 endif()
138 add_clang_library(libclang ${ENABLE_SHARED} ${ENABLE_STATIC} INSTALL_WITH_TOOLCHAIN
139   OUTPUT_NAME ${output_name}
140   ${SOURCES}
142   DEPENDS
143   ClangDriverOptions
144   clang-resource-headers
146   LINK_LIBS
147   ${LIBS}
149   LINK_COMPONENTS
150   ${LLVM_TARGETS_TO_BUILD}
151   Core
152   Support
153   TargetParser
154   )
156 if(ENABLE_STATIC)
157   foreach(name libclang obj.libclang libclang_static)
158     if (TARGET ${name})
159       target_compile_definitions(${name} PUBLIC CINDEX_NO_EXPORTS)
160     endif()
161   endforeach()
162 endif()
164 if(ENABLE_SHARED)
165   if(WIN32)
166     set_target_properties(libclang
167       PROPERTIES
168       VERSION ${LIBCLANG_LIBRARY_VERSION}
169       DEFINE_SYMBOL _CINDEX_LIB_)
170       # Avoid declaring clang c++ symbols that are statically linked into libclang as dllimport'ed.
171       # If llvm/libclang-cpp dll is also being built for windows clang c++ symbols will still be
172       # implicitly be exported from libclang.
173       target_compile_definitions(libclang PRIVATE CLANG_BUILD_STATIC)
174   elseif(APPLE)
175     set(LIBCLANG_LINK_FLAGS " -Wl,-compatibility_version -Wl,1")
176     set(LIBCLANG_LINK_FLAGS "${LIBCLANG_LINK_FLAGS} -Wl,-current_version -Wl,${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}")
178     set_property(TARGET libclang APPEND_STRING PROPERTY
179                  LINK_FLAGS ${LIBCLANG_LINK_FLAGS})
180   else()
181     set_target_properties(libclang
182       PROPERTIES
183       VERSION ${LIBCLANG_LIBRARY_VERSION}
184       DEFINE_SYMBOL _CINDEX_LIB_)
185     # FIXME: _CINDEX_LIB_ affects dllexport/dllimport on Win32.
186     if(LLVM_ENABLE_MODULES AND NOT WIN32)
187       target_compile_options(libclang PRIVATE
188         "-fmodules-ignore-macro=_CINDEX_LIB_"
189         )
190     endif()
191   endif()
192   if (USE_VERSION_SCRIPT)
193     if (${CMAKE_SYSTEM_NAME} MATCHES "SunOS")
194       include(CheckLinkerFlag)
195       # The Solaris 11.4 linker supports a subset of GNU ld version scripts,
196       # but requires a special option to enable it.
197       check_linker_flag(CXX "-Wl,-z,gnu-version-script-compat"
198                         LINKER_SUPPORTS_Z_GNU_VERSION_SCRIPT_COMPAT)
199       # Older Solaris (and illumos) linker does not support GNU ld version scripts
200       # and does not support GNU version script compat.
201       if (LINKER_SUPPORTS_Z_GNU_VERSION_SCRIPT_COMPAT)
202         target_link_options(libclang PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map")
203         target_link_options(libclang PRIVATE "-Wl,-z,gnu-version-script-compat")
204       else()
205         target_link_options(libclang PRIVATE "-Wl,-M,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map")
206       endif()
207     else()
208       target_link_options(libclang PRIVATE "-Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/libclang.map")
209     endif()
210     # Ensure that libclang.so gets rebuilt when the linker script changes.
211     set_property(SOURCE ARCMigrate.cpp APPEND PROPERTY
212                  OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libclang.map)
214     set_target_properties(libclang PROPERTIES
215                           VERSION ${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}.${LLVM_VERSION_PATCH}${LLVM_VERSION_SUFFIX}
216                           ${LIBCLANG_SOVERSION_ARG})
217   endif()
218 endif()
220 if(INTERNAL_INSTALL_PREFIX)
221   set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${INTERNAL_INSTALL_PREFIX}/include")
222 else()
223   set(LIBCLANG_HEADERS_INSTALL_DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}")
224 endif()
226 install(DIRECTORY ../../include/clang-c
227   COMPONENT libclang-headers
228   DESTINATION "${LIBCLANG_HEADERS_INSTALL_DESTINATION}"
229   FILES_MATCHING
230   PATTERN "*.h"
231   )
233 # LLVM_DISTRIBUTION_COMPONENTS requires that each component have both a
234 # component and an install-component target, so add a dummy libclang-headers
235 # target to allow using it in LLVM_DISTRIBUTION_COMPONENTS.
236 add_custom_target(libclang-headers)
237 set_target_properties(libclang-headers PROPERTIES FOLDER "Clang/Resources")
239 if (NOT LLVM_ENABLE_IDE)
240   add_llvm_install_targets(install-libclang-headers
241                            COMPONENT libclang-headers)
242 endif()
244 # Create a target to install the python bindings to make them easier to
245 # distribute.  Since the bindings are over libclang, which is installed
246 # unbundled to the clang version, follow suit.
247 foreach(PythonVersion ${CLANG_PYTHON_BINDINGS_VERSIONS})
248   install(DIRECTORY
249             ${CMAKE_CURRENT_SOURCE_DIR}/../../bindings/python/clang
250           COMPONENT
251             libclang-python-bindings
252           DESTINATION
253             "lib${LLVM_LIBDIR_SUFFIX}/python${PythonVersion}/site-packages")
254 endforeach()
255 if(NOT LLVM_ENABLE_IDE)
256   add_custom_target(libclang-python-bindings)
257   add_llvm_install_targets(install-libclang-python-bindings
258                            COMPONENT
259                              libclang-python-bindings)
260 endif()