[RISCV] Fix mgather -> riscv.masked.strided.load combine not extending indices (...
[llvm-project.git] / llvm / lib / Support / CMakeLists.txt
blobe19223fdef4f175cbf20809dab4609d475c59e7f
1 include(GetLibraryName)
3 # Ensure that libSupport does not carry any static global initializer.
4 # libSupport can be embedded in use cases where we don't want to load all
5 # cl::opt unless we want to parse the command line.
6 # ManagedStatic can be used to enable lazy-initialization of globals.
7 # We don't use `add_flag_if_supported` as instead of compiling an empty file we
8 # check if the current platform is able to compile global std::mutex with this
9 # flag (Linux can, Darwin can't for example).
10 check_cxx_compiler_flag("-Werror=global-constructors" HAS_WERROR_GLOBAL_CTORS)
11 if (HAS_WERROR_GLOBAL_CTORS)
12   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=global-constructors")
13   CHECK_CXX_SOURCE_COMPILES("
14   #include <mutex>
15   static std::mutex TestGlobalCtorDtor;
16   static std::recursive_mutex TestGlobalCtorDtor2;
17   int main() { (void)TestGlobalCtorDtor; (void)TestGlobalCtorDtor2; return 0;}
18   " LLVM_HAS_NOGLOBAL_CTOR_MUTEX)
19   if (NOT LLVM_HAS_NOGLOBAL_CTOR_MUTEX)
20     string(REPLACE "-Werror=global-constructors" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
21   endif()
22 endif()
24 if(LLVM_ENABLE_ZLIB)
25   list(APPEND imported_libs ZLIB::ZLIB)
26 endif()
28 if(LLVM_ENABLE_ZSTD)
29   if(TARGET zstd::libzstd_shared AND NOT LLVM_USE_STATIC_ZSTD)
30     set(zstd_target zstd::libzstd_shared)
31   else()
32     set(zstd_target zstd::libzstd_static)
33   endif()
34 endif()
36 if(LLVM_ENABLE_ZSTD)
37   list(APPEND imported_libs ${zstd_target})
38 endif()
40 if( MSVC OR MINGW )
41   # libuuid required for FOLDERID_Profile usage in lib/Support/Windows/Path.inc.
42   # advapi32 required for CryptAcquireContextW in lib/Support/Windows/Path.inc.
43   set(system_libs ${system_libs} psapi shell32 ole32 uuid advapi32 ws2_32)
44 elseif( CMAKE_HOST_UNIX )
45   if( HAVE_LIBRT )
46     set(system_libs ${system_libs} rt)
47   endif()
48   if( HAVE_LIBDL )
49     set(system_libs ${system_libs} ${CMAKE_DL_LIBS})
50   endif()
51   if( HAVE_BACKTRACE AND NOT "${Backtrace_LIBRARIES}" STREQUAL "" )
52     # On BSDs, CMake returns a fully qualified path to the backtrace library.
53     # We need to remove the path and the 'lib' prefix, to make it look like a
54     # regular short library name, suitable for appending to a -l link flag.
55     get_filename_component(Backtrace_LIBFILE ${Backtrace_LIBRARIES} NAME_WE)
56     STRING(REGEX REPLACE "^lib" "" Backtrace_LIBFILE ${Backtrace_LIBFILE})
57     set(system_libs ${system_libs} ${Backtrace_LIBFILE})
58   endif()
59   if( LLVM_ENABLE_TERMINFO )
60     set(imported_libs ${imported_libs} Terminfo::terminfo)
61   endif()
62   set(system_libs ${system_libs} ${LLVM_ATOMIC_LIB})
63   set(system_libs ${system_libs} ${LLVM_PTHREAD_LIB})
64   if( UNIX AND NOT (BEOS OR HAIKU) )
65     set(system_libs ${system_libs} m)
66   endif()
67   if( UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "SunOS" )
68     set(system_libs ${system_libs} kstat socket)
69   endif()
70   if( FUCHSIA )
71     set(system_libs ${system_libs} zircon)
72   endif()
73   if ( HAIKU )
74     add_compile_definitions(_BSD_SOURCE)
75     set(system_libs ${system_libs} bsd network)
76   endif()
77 endif( MSVC OR MINGW )
79 # Delay load shell32.dll if possible to speed up process startup.
80 set (delayload_flags)
81 if (MSVC)
82   # When linking with Swift, `swiftc.exe` is used as the linker drive rather
83   # than invoking `link.exe` directly.  In such a case, the flags should be
84   # marked as `-Xlinker` to pass them directly to the linker.  As a temporary
85   # workaround simply elide the delay loading.
86   set (delayload_flags $<$<NOT:$<LINK_LANGUAGE:Swift>>:delayimp -delayload:shell32.dll -delayload:ole32.dll>)
87 endif()
89 # Link Z3 if the user wants to build it.
90 if(LLVM_WITH_Z3)
91   set(system_libs ${system_libs} ${Z3_LIBRARIES})
92 endif()
94 # Override the C runtime allocator on Windows and embed it into LLVM tools & libraries
95 if(LLVM_INTEGRATED_CRT_ALLOC)
96   if (NOT CMAKE_MSVC_RUNTIME_LIBRARY OR CMAKE_MSVC_RUNTIME_LIBRARY MATCHES "DLL$")
97     message(FATAL_ERROR "LLVM_INTEGRATED_CRT_ALLOC only works with CMAKE_MSVC_RUNTIME_LIBRARY set to MultiThreaded or MultiThreadedDebug.")
98   endif()
100   string(REGEX REPLACE "(/|\\\\)$" "" LLVM_INTEGRATED_CRT_ALLOC "${LLVM_INTEGRATED_CRT_ALLOC}")
102   if(NOT EXISTS "${LLVM_INTEGRATED_CRT_ALLOC}")
103     message(FATAL_ERROR "Cannot find the path to `git clone` for the CRT allocator! (${LLVM_INTEGRATED_CRT_ALLOC}). Currently, rpmalloc, snmalloc and mimalloc are supported.")
104   endif()
106   if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "rpmalloc$")
107     add_compile_definitions(ENABLE_OVERRIDE ENABLE_PRELOAD)
108     set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/rpmalloc/rpmalloc.c")
109   elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$")
110     set(ALLOCATOR_FILES "${LLVM_INTEGRATED_CRT_ALLOC}/src/snmalloc/override/new.cc")
111     set(system_libs ${system_libs} "mincore.lib" "-INCLUDE:malloc")
112   elseif(LLVM_INTEGRATED_CRT_ALLOC MATCHES "mimalloc$")
113     set(MIMALLOC_LIB "${LLVM_INTEGRATED_CRT_ALLOC}/out/msvc-x64/Release/mimalloc-static.lib")
114     if(NOT EXISTS "${MIMALLOC_LIB}")
115           message(FATAL_ERROR "Cannot find the mimalloc static library. To build it, first apply the patch from https://github.com/microsoft/mimalloc/issues/268 then build the Release x64 target through ${LLVM_INTEGRATED_CRT_ALLOC}\\ide\\vs2019\\mimalloc.sln")
116     endif()
117     set(system_libs ${system_libs} "${MIMALLOC_LIB}" "-INCLUDE:malloc")
118   endif()
119 endif()
121 # FIXME: We are currently guarding AIX headers with _XOPEN_SOURCE=700.
122 # See llvm/CMakeLists.txt. However, we need _SC_NPROCESSORS_ONLN in
123 # unistd.h and it is guarded by _ALL_SOURCE, so we remove the _XOPEN_SOURCE
124 # guard here. We should remove the guards all together once AIX cleans up
125 # the system headers.
126 if (UNIX AND ${CMAKE_SYSTEM_NAME} MATCHES "AIX")
127   remove_definitions("-D_XOPEN_SOURCE=700")
128 endif()
130 add_subdirectory(BLAKE3)
132 add_llvm_component_library(LLVMSupport
133   ABIBreak.cpp
134   AMDGPUMetadata.cpp
135   APFixedPoint.cpp
136   APFloat.cpp
137   APInt.cpp
138   APSInt.cpp
139   ARMBuildAttrs.cpp
140   ARMAttributeParser.cpp
141   ARMWinEH.cpp
142   Allocator.cpp
143   AutoConvert.cpp
144   Base64.cpp
145   BalancedPartitioning.cpp
146   BinaryStreamError.cpp
147   BinaryStreamReader.cpp
148   BinaryStreamRef.cpp
149   BinaryStreamWriter.cpp
150   BlockFrequency.cpp
151   BranchProbability.cpp
152   BuryPointer.cpp
153   CachePruning.cpp
154   Caching.cpp
155   circular_raw_ostream.cpp
156   Chrono.cpp
157   COM.cpp
158   CodeGenCoverage.cpp
159   CommandLine.cpp
160   Compression.cpp
161   CRC.cpp
162   ConvertUTF.cpp
163   ConvertEBCDIC.cpp
164   ConvertUTFWrapper.cpp
165   CrashRecoveryContext.cpp
166   CSKYAttributes.cpp
167   CSKYAttributeParser.cpp
168   DataExtractor.cpp
169   Debug.cpp
170   DebugCounter.cpp
171   DeltaAlgorithm.cpp
172   DivisionByConstantInfo.cpp
173   DAGDeltaAlgorithm.cpp
174   DJB.cpp
175   ELFAttributeParser.cpp
176   ELFAttributes.cpp
177   Error.cpp
178   ErrorHandling.cpp
179   ExtensibleRTTI.cpp
180   FileCollector.cpp
181   FileUtilities.cpp
182   FileOutputBuffer.cpp
183   FloatingPointMode.cpp
184   FoldingSet.cpp
185   FormattedStream.cpp
186   FormatVariadic.cpp
187   GlobPattern.cpp
188   GraphWriter.cpp
189   Hashing.cpp
190   InitLLVM.cpp
191   InstructionCost.cpp
192   IntEqClasses.cpp
193   IntervalMap.cpp
194   JSON.cpp
195   KnownBits.cpp
196   LEB128.cpp
197   LineIterator.cpp
198   Locale.cpp
199   LockFileManager.cpp
200   ManagedStatic.cpp
201   MathExtras.cpp
202   MemAlloc.cpp
203   MemoryBuffer.cpp
204   MemoryBufferRef.cpp
205   MD5.cpp
206   MSP430Attributes.cpp
207   MSP430AttributeParser.cpp
208   NativeFormatting.cpp
209   OptimizedStructLayout.cpp
210   Optional.cpp
211   PGOOptions.cpp
212   Parallel.cpp
213   PluginLoader.cpp
214   PrettyStackTrace.cpp
215   RandomNumberGenerator.cpp
216   Regex.cpp
217   RISCVAttributes.cpp
218   RISCVAttributeParser.cpp
219   RISCVISAInfo.cpp
220   ScaledNumber.cpp
221   ScopedPrinter.cpp
222   SHA1.cpp
223   SHA256.cpp
224   Signposts.cpp
225   SmallPtrSet.cpp
226   SmallVector.cpp
227   SourceMgr.cpp
228   SpecialCaseList.cpp
229   Statistic.cpp
230   StringExtras.cpp
231   StringMap.cpp
232   StringSaver.cpp
233   StringRef.cpp
234   SuffixTreeNode.cpp
235   SuffixTree.cpp
236   SystemUtils.cpp
237   TarWriter.cpp
238   ThreadPool.cpp
239   TimeProfiler.cpp
240   Timer.cpp
241   ToolOutputFile.cpp
242   Twine.cpp
243   TypeSize.cpp
244   Unicode.cpp
245   UnicodeCaseFold.cpp
246   UnicodeNameToCodepoint.cpp
247   UnicodeNameToCodepointGenerated.cpp
248   VersionTuple.cpp
249   VirtualFileSystem.cpp
250   WithColor.cpp
251   YAMLParser.cpp
252   YAMLTraits.cpp
253   raw_os_ostream.cpp
254   raw_ostream.cpp
255   raw_socket_stream.cpp
256   regcomp.c
257   regerror.c
258   regexec.c
259   regfree.c
260   regstrlcpy.c
261   xxhash.cpp
262   Z3Solver.cpp
264   ${ALLOCATOR_FILES}
265   $<TARGET_OBJECTS:LLVMSupportBlake3>
267 # System
268   Atomic.cpp
269   DynamicLibrary.cpp
270   Errno.cpp
271   Memory.cpp
272   Path.cpp
273   Process.cpp
274   Program.cpp
275   RWMutex.cpp
276   Signals.cpp
277   Threading.cpp
278   Valgrind.cpp
279   Watchdog.cpp
281   ADDITIONAL_HEADER_DIRS
282   Unix
283   Windows
284   ${LLVM_MAIN_INCLUDE_DIR}/llvm/ADT
285   ${LLVM_MAIN_INCLUDE_DIR}/llvm/Support
286   ${Backtrace_INCLUDE_DIRS}
288   LINK_LIBS
289   ${system_libs} ${imported_libs} ${delayload_flags}
291   LINK_COMPONENTS
292   Demangle
293   )
295 set(llvm_system_libs ${system_libs})
297 # This block is only needed for llvm-config. When we deprecate llvm-config and
298 # move to using CMake export, this block can be removed.
299 if(LLVM_ENABLE_ZLIB)
300   # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators.
301   if(CMAKE_BUILD_TYPE)
302     string(TOUPPER ${CMAKE_BUILD_TYPE} build_type)
303     get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION_${build_type})
304   endif()
305   if(NOT zlib_library)
306     get_property(zlib_library TARGET ZLIB::ZLIB PROPERTY LOCATION)
307   endif()
308   get_library_name(${zlib_library} zlib_library)
309   set(llvm_system_libs ${llvm_system_libs} "${zlib_library}")
310 endif()
312 if(LLVM_ENABLE_ZSTD)
313   # CMAKE_BUILD_TYPE is only meaningful to single-configuration generators.
314   if(CMAKE_BUILD_TYPE)
315     string(TOUPPER ${CMAKE_BUILD_TYPE} build_type)
316     get_property(zstd_library TARGET ${zstd_target} PROPERTY LOCATION_${build_type})
317   endif()
318   if(NOT zstd_library)
319     get_property(zstd_library TARGET ${zstd_target} PROPERTY LOCATION)
320   endif()
321   get_library_name(${zstd_library} zstd_library)
322   set(llvm_system_libs ${llvm_system_libs} "${zstd_library}")
323 endif()
325 if(LLVM_ENABLE_TERMINFO)
326   if(NOT terminfo_library)
327     get_property(terminfo_library TARGET Terminfo::terminfo PROPERTY LOCATION)
328   endif()
329   get_library_name(${terminfo_library} terminfo_library)
330   set(llvm_system_libs ${llvm_system_libs} "${terminfo_library}")
331 endif()
333 set_property(TARGET LLVMSupport PROPERTY LLVM_SYSTEM_LIBS "${llvm_system_libs}")
336 if(LLVM_INTEGRATED_CRT_ALLOC)
337   if(LLVM_INTEGRATED_CRT_ALLOC MATCHES "snmalloc$")
338     set_property(TARGET LLVMSupport PROPERTY CXX_STANDARD 17)
339     add_compile_definitions(_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
340     if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" AND
341         "${CMAKE_SYSTEM_PROCESSOR}" MATCHES "x86_64")
342       set_property(TARGET LLVMSupport PROPERTY COMPILE_FLAGS "-mcx16")
343     endif()
344   endif()
345 endif()
347 if(LLVM_WITH_Z3)
348   target_include_directories(LLVMSupport SYSTEM
349     PRIVATE
350     ${Z3_INCLUDE_DIR}
351     )
352 endif()