remove hh_fileinfo
[hiphop-php.git] / CMake / HPHPFindLibs.cmake
blobe077fecf191b4766a51e64a5a5f8235934492150
2 #   +----------------------------------------------------------------------+
3 #   | HipHop for PHP                                                       |
4 #   +----------------------------------------------------------------------+
5 #   | Copyright (c) 2010 Facebook, Inc. (http://www.facebook.com)          |
6 #   | Copyright (c) 1997-2010 The PHP Group                                |
7 #   +----------------------------------------------------------------------+
8 #   | This source file is subject to version 3.01 of the PHP license,      |
9 #   | that is bundled with this package in the file LICENSE, and is        |
10 #   | available through the world-wide-web at the following url:           |
11 #   | http://www.php.net/license/3_01.txt                                  |
12 #   | If you did not receive a copy of the PHP license and are unable to   |
13 #   | obtain it through the world-wide-web, please send a note to          |
14 #   | license@php.net so we can mail you a copy immediately.               |
15 #   +----------------------------------------------------------------------+
18 include(CheckFunctionExists)
20 # libdl
21 find_package(LibDL)
22 if (LIBDL_INCLUDE_DIRS)
23   add_definitions("-DHAVE_LIBDL")
24   include_directories(${LIBDL_INCLUDE_DIRS})
25   if (LIBDL_NEEDS_UNDERSCORE)
26     add_definitions("-DLIBDL_NEEDS_UNDERSCORE")
27   endif()
28 endif()
30 # google-glog
31 find_package(Glog REQUIRED)
32 if (LIBGLOG_STATIC)
33   add_definitions("-DGOOGLE_GLOG_DLL_DECL=")
34 endif()
35 include_directories(${LIBGLOG_INCLUDE_DIR})
37 # inotify checks
38 find_package(Libinotify)
39 if (LIBINOTIFY_INCLUDE_DIR)
40   include_directories(${LIBINOTIFY_INCLUDE_DIR})
41 endif()
43 # mysql checks - if we're using async mysql, we use webscalesqlclient from
44 # third-party/ instead
45 if (ENABLE_ASYNC_MYSQL)
46   include_directories(
47     ${RE2_INCLUDE_DIR}
48     ${TP_DIR}/squangle/src/
49     ${TP_DIR}/webscalesqlclient/src/include/
50   )
51   set(MYSQL_CLIENT_LIB_DIR ${TP_DIR}/webscalesqlclient/src/)
52   set(MYSQL_CLIENT_LIBS
53     ${MYSQL_CLIENT_LIB_DIR}/libmysql/libfbmysqlclient_r.a
54   )
55 else()
56   find_package(MySQL REQUIRED)
57   link_directories(${MYSQL_LIB_DIR})
58   include_directories(${MYSQL_INCLUDE_DIR})
59 endif()
60 MYSQL_SOCKET_SEARCH()
61 if (MYSQL_UNIX_SOCK_ADDR)
62   add_definitions(-DPHP_MYSQL_UNIX_SOCK_ADDR="${MYSQL_UNIX_SOCK_ADDR}")
63 else ()
64   message(FATAL_ERROR "Could not find MySQL socket path - if you install a MySQL server, this should be automatically detected. Alternatively, specify -DMYSQL_UNIX_SOCK_ADDR=/path/to/mysql.socket ; if you don't care about unix socket support for MySQL, specify -DMYSQL_UNIX_SOCK_ADDR=/dev/null")
65 endif ()
67 # pcre checks
68 find_package(PCRE)
69 include_directories(${PCRE_INCLUDE_DIR})
71 # libevent checks
72 find_package(LibEvent REQUIRED)
73 include_directories(${LIBEVENT_INCLUDE_DIR})
75 set(CMAKE_REQUIRED_LIBRARIES "${LIBEVENT_LIB}")
76 CHECK_FUNCTION_EXISTS("evhttp_bind_socket_with_fd" HAVE_CUSTOM_LIBEVENT)
77 if(HAVE_CUSTOM_LIBEVENT)
78         message("Using custom LIBEVENT")
79         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUSTOM_LIBEVENT")
80 endif()
81 set(CMAKE_REQUIRED_LIBRARIES)
83 # libXed
84 find_package(LibXed)
85 if (LibXed_INCLUDE_DIR AND LibXed_LIBRARY)
86   include_directories(${LibXed_INCLUDE_DIR})
87   add_definitions("-DHAVE_LIBXED")
88 endif()
90 # CURL checks
91 find_package(CURL REQUIRED)
92 include_directories(${CURL_INCLUDE_DIR})
93 if (CURL_STATIC)
94   add_definitions("-DCURL_STATICLIB")
95 endif()
97 set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}")
98 CHECK_FUNCTION_EXISTS("curl_multi_select" HAVE_CURL_MULTI_SELECT)
99 CHECK_FUNCTION_EXISTS("curl_multi_wait" HAVE_CURL_MULTI_WAIT)
100 if (HAVE_CURL_MULTI_SELECT)
101   add_definitions("-DHAVE_CURL_MULTI_SELECT")
102 endif()
103 if (HAVE_CURL_MULTI_WAIT)
104   add_definitions("-DHAVE_CURL_MULTI_WAIT")
105 endif()
106 set(CMAKE_REQUIRED_LIBRARIES)
108 # LibXML2 checks
109 find_package(LibXml2 REQUIRED)
110 include_directories(${LIBXML2_INCLUDE_DIR})
111 add_definitions(${LIBXML2_DEFINITIONS})
113 # libsqlite3
114 find_package(LibSQLite)
115 if (LIBSQLITE_INCLUDE_DIR)
116   include_directories(${LIBSQLITE_INCLUDE_DIR})
117 endif ()
119 # libdouble-conversion
120 find_package(DoubleConversion)
121 if (DOUBLE_CONVERSION_INCLUDE_DIR)
122   include_directories(${DOUBLE_CONVERSION_INCLUDE_DIR})
123 endif ()
125 # liblz4
126 find_package(LZ4)
127 if (LZ4_FOUND)
128   include_directories(${LZ4_INCLUDE_DIR})
129 endif()
131 # fastlz
132 find_package(FastLZ)
133 if (FASTLZ_INCLUDE_DIR)
134   include_directories(${FASTLZ_INCLUDE_DIR})
135 endif()
137 # libzip
138 find_package(LibZip)
139 if (LIBZIP_INCLUDE_DIR_ZIP AND LIBZIP_INCLUDE_DIR_ZIPCONF)
140   if (LIBZIP_VERSION VERSION_LESS "0.11")
141     unset(LIBZIP_FOUND CACHE)
142     unset(LIBZIP_LIBRARY CACHE)
143     unset(LIBZIP_INCLUDE_DIR_ZIP CACHE)
144     unset(LIBZIP_INCLUDE_DIR_ZIPCONF CACHE)
145     message(STATUS "libzip is too old, found ${LIBZIP_VERSION} and we need 0.11+, using third-party bundled libzip")
146   else ()
147     include_directories(${LIBZIP_INCLUDE_DIR_ZIP} ${LIBZIP_INCLUDE_DIR_ZIPCONF})
148     message(STATUS "Found libzip: ${LIBZIP_LIBRARY} ${LIBZIP_VERSION}")
149   endif ()
150 else ()
151   message(STATUS "Using third-party bundled libzip")
152 endif()
154 # ICU
155 find_package(ICU REQUIRED)
156 if (ICU_FOUND)
157   if (ICU_VERSION VERSION_LESS "4.2")
158     unset(ICU_FOUND CACHE)
159     unset(ICU_INCLUDE_DIRS CACHE)
160     unset(ICU_LIBRARIES CACHE)
161     message(FATAL_ERROR "ICU is too old, found ${ICU_VERSION} and we need 4.2")
162   endif ()
163   include_directories(${ICU_INCLUDE_DIRS})
164   if (ICU_STATIC)
165     add_definitions("-DU_EXPORT=")
166     add_definitions("-DU_IMPORT=")
167   endif()
168   # Everything is either in the `icu61` namespace or `icu` namespace, depending
169   # on another definition. There's an implicit `using namespace WHATEVER;` in
170   # ICU4c < 61.1, but now that's opt-in rather than opt-out.
171   add_definitions("-DU_USING_ICU_NAMESPACE=1")
172 endif (ICU_FOUND)
174 # jemalloc/tmalloc and profiler
175 if (USE_GOOGLE_HEAP_PROFILER OR USE_GOOGLE_CPU_PROFILER)
176   FIND_LIBRARY(GOOGLE_PROFILER_LIB profiler)
177   FIND_PATH(GOOGLE_PROFILER_INCLUDE_DIR NAMES google/profiler.h)
178   if (GOOGLE_PROFILER_INCLUDE_DIR)
179     include_directories(${GOOGLE_PROFILER_INCLUDE_DIR})
180   endif()
181   if (GOOGLE_PROFILER_LIB)
182     message(STATUS "Found Google profiler: ${GOOGLE_PROFILER_LIB}")
183     if (USE_GOOGLE_CPU_PROFILER)
184       set(GOOGLE_CPU_PROFILER_ENABLED 1)
185     endif()
186   else()
187     message(STATUS "Can't find Google profiler")
188   endif()
189 endif()
191 if (USE_GOOGLE_HEAP_PROFILER AND GOOGLE_PROFILER_LIB)
192   FIND_LIBRARY(GOOGLE_TCMALLOC_FULL_LIB tcmalloc)
193   if (GOOGLE_TCMALLOC_FULL_LIB)
194     message(STATUS "Found full tcmalloc: ${GOOGLE_TCMALLOC_FULL_LIB}")
195     set(GOOGLE_HEAP_PROFILER_ENABLED 1)
196     set(GOOGLE_TCMALLOC_ENABLED 1)
197   else()
198     message(STATUS "Can't find full tcmalloc - heap profiling is disabled")
199   endif()
200 endif()
202 if (USE_JEMALLOC AND NOT GOOGLE_TCMALLOC_ENABLED)
203   FIND_LIBRARY(JEMALLOC_LIB NAMES jemalloc)
204   FIND_PATH(JEMALLOC_INCLUDE_DIR NAMES jemalloc/jemalloc.h)
206   if (JEMALLOC_INCLUDE_DIR AND JEMALLOC_LIB)
207     include_directories(${JEMALLOC_INCLUDE_DIR})
209     set (CMAKE_REQUIRED_INCLUDES ${JEMALLOC_INCLUDE_DIR})
210     INCLUDE(CheckCXXSourceCompiles)
211     CHECK_CXX_SOURCE_COMPILES("
212 #include <jemalloc/jemalloc.h>
214 #define JEMALLOC_VERSION_NUMERIC ((JEMALLOC_VERSION_MAJOR << 24) | (JEMALLOC_VERSION_MINOR << 16) | (JEMALLOC_VERSION_BUGFIX << 8) | JEMALLOC_VERSION_NDEV)
216 #if JEMALLOC_VERSION_NUMERIC < 0x03050100
217 # error jemalloc version >= 3.5.1 required
218 #endif
220 int main(void) { return 0; }" JEMALLOC_VERSION_MINIMUM)
221     set (CMAKE_REQUIRED_INCLUDES)
223     if (JEMALLOC_VERSION_MINIMUM)
224       message(STATUS "Found jemalloc: ${JEMALLOC_LIB}")
225       set(JEMALLOC_ENABLED 1)
226     else()
227       message(STATUS "Found jemalloc, but it was too old")
228     endif()
229   endif()
230 endif()
232 if (USE_TCMALLOC AND NOT JEMALLOC_ENABLED AND NOT GOOGLE_TCMALLOC_ENABLED)
233   FIND_LIBRARY(GOOGLE_TCMALLOC_MIN_LIB tcmalloc_minimal)
234   if (GOOGLE_TCMALLOC_MIN_LIB)
235     message(STATUS "Found minimal tcmalloc: ${GOOGLE_TCMALLOC_MIN_LIB}")
236     set(GOOGLE_TCMALLOC_ENABLED 1)
237   else()
238     message(STATUS "Can't find minimal tcmalloc")
239   endif()
240 endif()
242 if (JEMALLOC_ENABLED)
243   add_definitions(-DUSE_JEMALLOC=1)
244 else()
245   add_definitions(-DNO_JEMALLOC=1)
246 endif()
247 if (GOOGLE_TCMALLOC_ENABLED)
248   add_definitions(-DGOOGLE_TCMALLOC=1)
249 else()
250   add_definitions(-DNO_TCMALLOC=1)
251 endif()
252 if (GOOGLE_HEAP_PROFILER_ENABLED)
253   add_definitions(-DGOOGLE_HEAP_PROFILER=1)
254 endif()
255 if (GOOGLE_CPU_PROFILER_ENABLED)
256   add_definitions(-DGOOGLE_CPU_PROFILER=1)
257 endif()
259 # HHProf
260 if (JEMALLOC_ENABLED AND ENABLE_HHPROF)
261   add_definitions(-DENABLE_HHPROF=1)
262 endif()
264 # tbb libs
265 find_package(TBB REQUIRED)
266 if (${TBB_INTERFACE_VERSION} LESS 5005)
267   unset(TBB_FOUND CACHE)
268   unset(TBB_INCLUDE_DIRS CACHE)
269   unset(TBB_LIBRARIES CACHE)
270   message(FATAL_ERROR "TBB is too old, please install at least 3.0(5005), preferably 4.0(6000) or higher")
271 endif()
272 include_directories(${TBB_INCLUDE_DIRS})
273 link_directories(${TBB_LIBRARY_DIRS})
275 # OpenSSL libs
276 find_package(OpenSSL REQUIRED)
277 include_directories(${OPENSSL_INCLUDE_DIR})
279 # LibreSSL explicitly refuses to support RAND_egd()
280 SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
281 SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
282 INCLUDE(CheckCXXSourceCompiles)
283 CHECK_CXX_SOURCE_COMPILES("#include <openssl/rand.h>
284 int main() {
285   return RAND_egd(\"/dev/null\");
286 }" OPENSSL_HAVE_RAND_EGD)
287 if (NOT OPENSSL_HAVE_RAND_EGD)
288   add_definitions("-DOPENSSL_NO_RAND_EGD")
289 endif()
290 SET(CMAKE_REQUIRED_INCLUDES)
291 SET(CMAKE_REQUIRED_LIBRARIES)
294 # ZLIB
295 find_package(ZLIB REQUIRED)
296 include_directories(${ZLIB_INCLUDE_DIR})
298 # oniguruma
299 find_package(ONIGURUMA REQUIRED)
300 include_directories(${ONIGURUMA_INCLUDE_DIRS})
301 if (ONIGURUMA_STATIC)
302   add_definitions("-DONIG_EXTERN=extern")
303 endif()
305 # libpthreads
306 find_package(PThread REQUIRED)
307 include_directories(${LIBPTHREAD_INCLUDE_DIRS})
308 if (LIBPTHREAD_STATIC)
309   add_definitions("-DPTW32_STATIC_LIB")
310 endif()
312 # Either Readline or Editline (for hphpd)
313 find_package(Readline)
314 find_package(Editline)
315 if (EDITLINE_INCLUDE_DIRS)
316   add_definitions("-DUSE_EDITLINE")
317   include_directories(${EDITLINE_INCLUDE_DIRS})
318 elseif (READLINE_INCLUDE_DIR)
319   if (READLINE_STATIC)
320     add_definitions("-DREADLINE_STATIC")
321   endif()
322   include_directories(${READLINE_INCLUDE_DIR})
323 else()
324   message(FATAL_ERROR "Could not find Readline or Editline")
325 endif()
327 if (NOT WINDOWS)
328   find_package(LibDwarf REQUIRED)
329   include_directories(${LIBDWARF_INCLUDE_DIRS})
330   if (LIBDWARF_CONST_NAME)
331     add_definitions("-DLIBDWARF_CONST_NAME")
332   endif()
333   if (LIBDWARF_USE_INIT_C)
334     add_definitions("-DLIBDWARF_USE_INIT_C")
335   endif()
337   find_package(LibElf REQUIRED)
338   include_directories(${LIBELF_INCLUDE_DIRS})
339   if (ELF_GETSHDRSTRNDX)
340     add_definitions("-DHAVE_ELF_GETSHDRSTRNDX")
341   endif()
342 endif()
344 FIND_LIBRARY(CRYPT_LIB NAMES xcrypt crypt crypto)
345 if (LINUX OR FREEBSD)
346   FIND_LIBRARY (RT_LIB rt)
347 endif()
349 if (LINUX)
350   FIND_LIBRARY (CAP_LIB cap)
352   if (NOT CAP_LIB)
353     message(FATAL_ERROR "You need to install libcap")
354   endif()
355 endif()
357 if (LINUX OR APPLE)
358   FIND_LIBRARY (DL_LIB dl)
359   FIND_LIBRARY (RESOLV_LIB resolv)
360 endif()
362 if (FREEBSD)
363   FIND_LIBRARY (EXECINFO_LIB execinfo)
364   if (NOT EXECINFO_LIB)
365     message(FATAL_ERROR "You need to install libexecinfo")
366   endif()
367 endif()
369 if (APPLE)
370   find_library(KERBEROS_LIB NAMES gssapi_krb5)
372   # This is required by Homebrew's libc. See
373   # https://github.com/facebook/hhvm/pull/5728#issuecomment-124290712
374   # for more info.
375   find_package(Libpam)
376   if (PAM_INCLUDE_PATH)
377     include_directories(${PAM_INCLUDE_PATH})
378   endif()
379 endif()
381 #find_package(BISON REQUIRED)
382 #find_package(FLEX REQUIRED)
384 #if (${FLEX_VERSION} VERSION_LESS 2.5.33)
385 #  message(FATAL_ERROR "Flex is too old, found ${FLEX_VERSION} and we need 2.5.33")
386 #endif()
388 include_directories(${HPHP_HOME}/hphp)
390 macro(hphp_link target)
391   # oniguruma must remain first for OS X to work -- see below for a somewhat
392   # dogscience explanation. If you deeply understand this, feel free to fix
393   # properly; in particular, two-level namespaces on OS X should allow us to
394   # say *which* copy of the disputed functions we want, but I don' t know
395   # how to get that to work.
396   #
397   # oniguruma has some of its own implementations of POSIX regex functions,
398   # like regcomp() an regexec(). We use onig everywhere, for both its own
399   # sepcial functions and for the POSIX replacements. This means that the
400   # linker needs to pick the implementions of the POSIX regex functions from
401   # onig, not libc.
402   #
403   # On Linux, that works out fine, since the linker sees onig on the link
404   # line before (implicitly) libc. However, on OS X, despide the manpage for
405   # ld claiming otherwise about indirect dylib dependencies, as soon as we
406   # include one of the libs here that pull in libSystem.B, the linker will
407   # pick the implementations of those functions from libc, not from onig.
408   # And since we've included the onig headers, which have very slightly
409   # different definintions for some of the key data structures, things go
410   # quite awry -- this manifests as infinite loops or crashes when calling
411   # the PHP split() function.
412   #
413   # So make sure to link onig first, so its implementations are picked.
414   target_link_libraries(${target} ${ONIGURUMA_LIBRARIES})
416   if (LIBDL_LIBRARIES)
417     target_link_libraries(${target} ${LIBDL_LIBRARIES})
418   endif ()
420   if (GOOGLE_HEAP_PROFILER_ENABLED OR GOOGLE_CPU_PROFILER_ENABLED)
421     target_link_libraries(${target} ${GOOGLE_PROFILER_LIB})
422   endif()
424   if (JEMALLOC_ENABLED)
425     target_link_libraries(${target} ${JEMALLOC_LIB})
426   endif()
428   if (GOOGLE_HEAP_PROFILER_ENABLED)
429     target_link_libraries(${target} ${GOOGLE_TCMALLOC_FULL_LIB})
430   elseif (GOOGLE_TCMALLOC_ENABLED)
431     target_link_libraries(${target} ${GOOGLE_TCMALLOC_MIN_LIB})
432   endif()
434   target_link_libraries(${target} boost)
435   target_link_libraries(${target} ${MYSQL_CLIENT_LIBS})
436   if (ENABLE_ASYNC_MYSQL)
437     target_link_libraries(${target} squangle)
438   endif()
439   target_link_libraries(${target} ${PCRE_LIBRARY})
440   target_link_libraries(${target} ${ICU_DATA_LIBRARIES} ${ICU_I18N_LIBRARIES} ${ICU_LIBRARIES})
441   target_link_libraries(${target} ${LIBEVENT_LIB})
442   target_link_libraries(${target} ${CURL_LIBRARIES})
443   target_link_libraries(${target} ${LIBGLOG_LIBRARY})
444   if (LIBJSONC_LIBRARY)
445     target_link_libraries(${target} ${LIBJSONC_LIBRARY})
446   endif()
448   if (LibXed_LIBRARY)
449     target_link_libraries(${target} ${LibXed_LIBRARY})
450   endif()
452   if (LIBINOTIFY_LIBRARY)
453     target_link_libraries(${target} ${LIBINOTIFY_LIBRARY})
454   endif()
456   if (LINUX)
457     target_link_libraries(${target} ${CAP_LIB})
458   endif()
460   if (LINUX OR APPLE)
461     target_link_libraries(${target} ${RESOLV_LIB})
462     target_link_libraries(${target} ${DL_LIB})
463   endif()
465   if (FREEBSD)
466     target_link_libraries(${target} ${EXECINFO_LIB})
467   endif()
469   if (APPLE)
470     target_link_libraries(${target} ${LIBINTL_LIBRARIES})
471     target_link_libraries(${target} ${KERBEROS_LIB})
473     if (PAM_LIBRARY)
474       target_link_libraries(${target} ${PAM_LIBRARY})
475     endif()
476   endif()
478   if (LIBPTHREAD_LIBRARIES)
479     target_link_libraries(${target} ${LIBPTHREAD_LIBRARIES})
480   endif()
482   target_link_libraries(${target} ${TBB_LIBRARIES})
483   target_link_libraries(${target} ${OPENSSL_LIBRARIES})
484   target_link_libraries(${target} ${ZLIB_LIBRARIES})
486   target_link_libraries(${target} ${LIBXML2_LIBRARIES})
488   target_link_libraries(${target} ${LBER_LIBRARIES})
490   if (CRYPT_LIB)
491     target_link_libraries(${target} ${CRYPT_LIB})
492   endif()
494   if (LINUX OR FREEBSD)
495     target_link_libraries(${target} ${RT_LIB})
496   endif()
498   if (LIBSQLITE3_FOUND AND LIBSQLITE3_LIBRARY)
499     target_link_libraries(${target} ${LIBSQLITE3_LIBRARY})
500   else()
501     target_link_libraries(${target} sqlite3)
502   endif()
504   if (DOUBLE_CONVERSION_FOUND)
505     target_link_libraries(${target} ${DOUBLE_CONVERSION_LIBRARY})
506   else()
507     target_link_libraries(${target} double-conversion)
508   endif()
510   if (LZ4_FOUND)
511     target_link_libraries(${target} ${LZ4_LIBRARY})
512   else()
513     target_link_libraries(${target} lz4)
514   endif()
515   # The syntax used for these warnings is unparsable by Apple's Clang
516   add_definitions("-DLZ4_DISABLE_DEPRECATE_WARNINGS=1")
518   if (LIBZIP_LIBRARY)
519     target_link_libraries(${target} ${LIBZIP_LIBRARY})
520   else()
521     target_link_libraries(${target} zip_static)
522   endif()
524   if (PCRE_LIBRARY)
525     target_link_libraries(${target} ${PCRE_LIBRARY})
526   else()
527     target_link_libraries(${target} pcre)
528   endif()
530   if (LIBFASTLZ_LIBRARY)
531     target_link_libraries(${target} ${LIBFASTLZ_LIBRARY})
532   else()
533     target_link_libraries(${target} fastlz)
534   endif()
536   target_link_libraries(${target} timelib)
537   target_link_libraries(${target} folly)
538   target_link_libraries(${target} wangle)
539   target_link_libraries(${target} brotli_enc)
540   target_link_libraries(${target} brotli_dec)
542   if (ENABLE_MCROUTER)
543     target_link_libraries(${target} mcrouter)
544   endif()
546   if (NOT MSVC)
547     target_link_libraries(${target} afdt)
548   endif()
549   target_link_libraries(${target} mbfl)
551   if (EDITLINE_LIBRARIES)
552     target_link_libraries(${target} ${EDITLINE_LIBRARIES})
553   elseif (READLINE_LIBRARY)
554     target_link_libraries(${target} ${READLINE_LIBRARY})
555   endif()
557   if (NOT WINDOWS)
558     target_link_libraries(${target} ${LIBDWARF_LIBRARIES})
559     target_link_libraries(${target} ${LIBELF_LIBRARIES})
560   endif()
562   if (LINUX)
563     target_link_libraries(${target} -Wl,--wrap=pthread_create -Wl,--wrap=pthread_exit -Wl,--wrap=pthread_join)
564   endif()
566   if (MSVC)
567     target_link_libraries(${target} dbghelp.lib dnsapi.lib)
568   endif()
569 endmacro()