Typed AST: await and clone
[hiphop-php.git] / CMake / HPHPFindLibs.cmake
bloba40ce9d883c08512740334605640bdac9769e293
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 # boost checks
31 find_package(Boost 1.51.0 COMPONENTS system program_options filesystem context REQUIRED)
32 include_directories(${Boost_INCLUDE_DIRS})
33 link_directories(${Boost_LIBRARY_DIRS})
34 add_definitions("-DHAVE_BOOST1_49")
37 # features.h
38 FIND_PATH(FEATURES_HEADER features.h)
39 if (FEATURES_HEADER)
40   add_definitions("-DHAVE_FEATURES_H=1")
41 endif()
43 # google-glog
44 find_package(Glog REQUIRED)
45 if (LIBGLOG_STATIC)
46   add_definitions("-DGOOGLE_GLOG_DLL_DECL=")
47 endif()
48 include_directories(${LIBGLOG_INCLUDE_DIR})
50 # inotify checks
51 find_package(Libinotify)
52 if (LIBINOTIFY_INCLUDE_DIR)
53   include_directories(${LIBINOTIFY_INCLUDE_DIR})
54 endif()
56 # mysql checks - if we're using async mysql, we use webscalesqlclient from
57 # third-party/ instead
58 if (ENABLE_ASYNC_MYSQL)
59   include_directories(
60     ${TP_DIR}/re2/src/
61     ${TP_DIR}/squangle/src/
62     ${TP_DIR}/webscalesqlclient/src/include/
63   )
64   set(MYSQL_CLIENT_LIB_DIR ${TP_DIR}/webscalesqlclient/src/)
65   set(MYSQL_CLIENT_LIBS
66     ${MYSQL_CLIENT_LIB_DIR}/libmysql/libwebscalesqlclient_r.a
67   )
68 else()
69   find_package(MySQL REQUIRED)
70   link_directories(${MYSQL_LIB_DIR})
71   include_directories(${MYSQL_INCLUDE_DIR})
72 endif()
73 MYSQL_SOCKET_SEARCH()
74 if (MYSQL_UNIX_SOCK_ADDR)
75   add_definitions(-DPHP_MYSQL_UNIX_SOCK_ADDR="${MYSQL_UNIX_SOCK_ADDR}")
76 else ()
77   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")
78 endif ()
80 # pcre checks
81 find_package(PCRE)
82 include_directories(${PCRE_INCLUDE_DIR})
84 # libevent checks
85 find_package(LibEvent REQUIRED)
86 include_directories(${LIBEVENT_INCLUDE_DIR})
88 set(CMAKE_REQUIRED_LIBRARIES "${LIBEVENT_LIB}")
89 CHECK_FUNCTION_EXISTS("evhttp_bind_socket_with_fd" HAVE_CUSTOM_LIBEVENT)
90 if(HAVE_CUSTOM_LIBEVENT)
91         message("Using custom LIBEVENT")
92         set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_CUSTOM_LIBEVENT")
93 endif()
94 set(CMAKE_REQUIRED_LIBRARIES)
96 # libXed
97 find_package(LibXed)
98 if (LibXed_INCLUDE_DIR AND LibXed_LIBRARY)
99   include_directories(${LibXed_INCLUDE_DIR})
100   add_definitions("-DHAVE_LIBXED")
101 endif()
103 # CURL checks
104 find_package(CURL REQUIRED)
105 include_directories(${CURL_INCLUDE_DIR})
106 if (CURL_STATIC)
107   add_definitions("-DCURL_STATICLIB")
108 endif()
110 set(CMAKE_REQUIRED_LIBRARIES "${CURL_LIBRARIES}")
111 CHECK_FUNCTION_EXISTS("curl_multi_select" HAVE_CURL_MULTI_SELECT)
112 CHECK_FUNCTION_EXISTS("curl_multi_wait" HAVE_CURL_MULTI_WAIT)
113 if (HAVE_CURL_MULTI_SELECT)
114   add_definitions("-DHAVE_CURL_MULTI_SELECT")
115 endif()
116 if (HAVE_CURL_MULTI_WAIT)
117   add_definitions("-DHAVE_CURL_MULTI_WAIT")
118 endif()
119 set(CMAKE_REQUIRED_LIBRARIES)
121 # LibXML2 checks
122 find_package(LibXml2 REQUIRED)
123 include_directories(${LIBXML2_INCLUDE_DIR})
124 add_definitions(${LIBXML2_DEFINITIONS})
126 # libsqlite3
127 find_package(LibSQLite)
128 if (LIBSQLITE_INCLUDE_DIR)
129   include_directories(${LIBSQLITE_INCLUDE_DIR})
130 endif ()
132 # libdouble-conversion
133 find_package(DoubleConversion)
134 if (DOUBLE_CONVERSION_INCLUDE_DIR)
135   include_directories(${DOUBLE_CONVERSION_INCLUDE_DIR})
136 endif ()
138 # liblz4
139 find_package(LZ4)
140 if (LZ4_INCLUDE_DIR)
141   include_directories(${LZ4_INCLUDE_DIR})
142 endif()
144 # fastlz
145 find_package(FastLZ)
146 if (FASTLZ_INCLUDE_DIR)
147   include_directories(${FASTLZ_INCLUDE_DIR})
148 endif()
150 # libzip
151 find_package(LibZip)
152 if (LIBZIP_INCLUDE_DIR_ZIP AND LIBZIP_INCLUDE_DIR_ZIPCONF)
153   if (LIBZIP_VERSION VERSION_LESS "0.11")
154     unset(LIBZIP_FOUND CACHE)
155     unset(LIBZIP_LIBRARY CACHE)
156     unset(LIBZIP_INCLUDE_DIR_ZIP CACHE)
157     unset(LIBZIP_INCLUDE_DIR_ZIPCONF CACHE)
158     message(STATUS "libzip is too old, found ${LIBZIP_VERSION} and we need 0.11+, using third-party bundled libzip")
159   else ()
160     include_directories(${LIBZIP_INCLUDE_DIR_ZIP} ${LIBZIP_INCLUDE_DIR_ZIPCONF})
161     message(STATUS "Found libzip: ${LIBZIP_LIBRARY} ${LIBZIP_VERSION}")
162   endif ()
163 else ()
164   message(STATUS "Using third-party bundled libzip")
165 endif()
167 # ICU
168 find_package(ICU REQUIRED)
169 if (ICU_FOUND)
170   if (ICU_VERSION VERSION_LESS "4.2")
171     unset(ICU_FOUND CACHE)
172     unset(ICU_INCLUDE_DIRS CACHE)
173     unset(ICU_LIBRARIES CACHE)
174     message(FATAL_ERROR "ICU is too old, found ${ICU_VERSION} and we need 4.2")
175   endif ()
176   include_directories(${ICU_INCLUDE_DIRS})
177   if (ICU_STATIC)
178     add_definitions("-DU_EXPORT=")
179     add_definitions("-DU_IMPORT=")
180   endif()
181 endif (ICU_FOUND)
183 # jemalloc/tmalloc and profiler
184 if (USE_GOOGLE_HEAP_PROFILER OR USE_GOOGLE_CPU_PROFILER)
185   FIND_LIBRARY(GOOGLE_PROFILER_LIB profiler)
186   FIND_PATH(GOOGLE_PROFILER_INCLUDE_DIR NAMES google/profiler.h)
187   if (GOOGLE_PROFILER_INCLUDE_DIR)
188     include_directories(${GOOGLE_PROFILER_INCLUDE_DIR})
189   endif()
190   if (GOOGLE_PROFILER_LIB)
191     message(STATUS "Found Google profiler: ${GOOGLE_PROFILER_LIB}")
192     if (USE_GOOGLE_CPU_PROFILER)
193       set(GOOGLE_CPU_PROFILER_ENABLED 1)
194     endif()
195   else()
196     message(STATUS "Can't find Google profiler")
197   endif()
198 endif()
200 if (USE_GOOGLE_HEAP_PROFILER AND GOOGLE_PROFILER_LIB)
201   FIND_LIBRARY(GOOGLE_TCMALLOC_FULL_LIB tcmalloc)
202   if (GOOGLE_TCMALLOC_FULL_LIB)
203     message(STATUS "Found full tcmalloc: ${GOOGLE_TCMALLOC_FULL_LIB}")
204     set(GOOGLE_HEAP_PROFILER_ENABLED 1)
205     set(GOOGLE_TCMALLOC_ENABLED 1)
206   else()
207     message(STATUS "Can't find full tcmalloc - heap profiling is disabled")
208   endif()
209 endif()
211 if (USE_JEMALLOC AND NOT GOOGLE_TCMALLOC_ENABLED)
212   FIND_LIBRARY(JEMALLOC_LIB NAMES jemalloc)
213   FIND_PATH(JEMALLOC_INCLUDE_DIR NAMES jemalloc/jemalloc.h)
215   if (JEMALLOC_INCLUDE_DIR AND JEMALLOC_LIB)
216     include_directories(${JEMALLOC_INCLUDE_DIR})
218     set (CMAKE_REQUIRED_INCLUDES ${JEMALLOC_INCLUDE_DIR})
219     INCLUDE(CheckCXXSourceCompiles)
220     CHECK_CXX_SOURCE_COMPILES("
221 #include <jemalloc/jemalloc.h>
223 #define JEMALLOC_VERSION_NUMERIC ((JEMALLOC_VERSION_MAJOR << 24) | (JEMALLOC_VERSION_MINOR << 16) | (JEMALLOC_VERSION_BUGFIX << 8) | JEMALLOC_VERSION_NDEV)
225 #if JEMALLOC_VERSION_NUMERIC < 0x03050100
226 # error jemalloc version >= 3.5.1 required
227 #endif
229 int main(void) { return 0; }" JEMALLOC_VERSION_MINIMUM)
230     set (CMAKE_REQUIRED_INCLUDES)
232     if (JEMALLOC_VERSION_MINIMUM)
233       message(STATUS "Found jemalloc: ${JEMALLOC_LIB}")
234       set(JEMALLOC_ENABLED 1)
235     else()
236       message(STATUS "Found jemalloc, but it was too old")
237     endif()
238   endif()
239 endif()
241 if (USE_TCMALLOC AND NOT JEMALLOC_ENABLED AND NOT GOOGLE_TCMALLOC_ENABLED)
242   FIND_LIBRARY(GOOGLE_TCMALLOC_MIN_LIB tcmalloc_minimal)
243   if (GOOGLE_TCMALLOC_MIN_LIB)
244     message(STATUS "Found minimal tcmalloc: ${GOOGLE_TCMALLOC_MIN_LIB}")
245     set(GOOGLE_TCMALLOC_ENABLED 1)
246   else()
247     message(STATUS "Can't find minimal tcmalloc")
248   endif()
249 endif()
251 if (JEMALLOC_ENABLED)
252   add_definitions(-DUSE_JEMALLOC=1)
253 else()
254   add_definitions(-DNO_JEMALLOC=1)
255 endif()
256 if (GOOGLE_TCMALLOC_ENABLED)
257   add_definitions(-DGOOGLE_TCMALLOC=1)
258 else()
259   add_definitions(-DNO_TCMALLOC=1)
260 endif()
261 if (GOOGLE_HEAP_PROFILER_ENABLED)
262   add_definitions(-DGOOGLE_HEAP_PROFILER=1)
263 endif()
264 if (GOOGLE_CPU_PROFILER_ENABLED)
265   add_definitions(-DGOOGLE_CPU_PROFILER=1)
266 endif()
268 # HHProf
269 if (JEMALLOC_ENABLED AND ENABLE_HHPROF)
270   add_definitions(-DENABLE_HHPROF=1)
271 endif()
273 # tbb libs
274 find_package(TBB REQUIRED)
275 if (${TBB_INTERFACE_VERSION} LESS 5005)
276   unset(TBB_FOUND CACHE)
277   unset(TBB_INCLUDE_DIRS CACHE)
278   unset(TBB_LIBRARIES CACHE)
279   message(FATAL_ERROR "TBB is too old, please install at least 3.0(5005), preferably 4.0(6000) or higher")
280 endif()
281 include_directories(${TBB_INCLUDE_DIRS})
282 link_directories(${TBB_LIBRARY_DIRS})
284 # OpenSSL libs
285 find_package(OpenSSL REQUIRED)
286 include_directories(${OPENSSL_INCLUDE_DIR})
288 # LibreSSL explicitly refuses to support RAND_egd()
289 SET(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
290 SET(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
291 INCLUDE(CheckCXXSourceCompiles)
292 CHECK_CXX_SOURCE_COMPILES("#include <openssl/rand.h>
293 int main() {
294   return RAND_egd(\"/dev/null\");
295 }" OPENSSL_HAVE_RAND_EGD)
296 if (NOT OPENSSL_HAVE_RAND_EGD)
297   add_definitions("-DOPENSSL_NO_RAND_EGD")
298 endif()
299 SET(CMAKE_REQUIRED_INCLUDES)
300 SET(CMAKE_REQUIRED_LIBRARIES)
303 # ZLIB
304 find_package(ZLIB REQUIRED)
305 include_directories(${ZLIB_INCLUDE_DIR})
307 # oniguruma
308 find_package(ONIGURUMA REQUIRED)
309 include_directories(${ONIGURUMA_INCLUDE_DIRS})
310 if (ONIGURUMA_STATIC)
311   add_definitions("-DONIG_EXTERN=extern")
312 endif()
314 # libpthreads
315 find_package(PThread REQUIRED)
316 include_directories(${LIBPTHREAD_INCLUDE_DIRS})
317 if (LIBPTHREAD_STATIC)
318   add_definitions("-DPTW32_STATIC_LIB")
319 endif()
321 # Either Readline or Editline (for hphpd)
322 find_package(Readline)
323 find_package(Editline)
324 if (EDITLINE_INCLUDE_DIRS)
325   add_definitions("-DUSE_EDITLINE")
326   include_directories(${EDITLINE_INCLUDE_DIRS})
327 elseif (READLINE_INCLUDE_DIR)
328   if (READLINE_STATIC)
329     add_definitions("-DREADLINE_STATIC")
330   endif()
331   include_directories(${READLINE_INCLUDE_DIR})
332 else()
333   message(FATAL_ERROR "Could not find Readline or Editline")
334 endif()
336 if (NOT WINDOWS)
337   find_package(LibDwarf REQUIRED)
338   include_directories(${LIBDWARF_INCLUDE_DIRS})
339   if (LIBDWARF_CONST_NAME)
340     add_definitions("-DLIBDWARF_CONST_NAME")
341   endif()
342   if (LIBDWARF_USE_INIT_C)
343     add_definitions("-DLIBDWARF_USE_INIT_C")
344   endif()
346   find_package(LibElf REQUIRED)
347   include_directories(${LIBELF_INCLUDE_DIRS})
348   if (ELF_GETSHDRSTRNDX)
349     add_definitions("-DHAVE_ELF_GETSHDRSTRNDX")
350   endif()
351 endif()
353 FIND_LIBRARY(CRYPT_LIB NAMES xcrypt crypt crypto)
354 if (LINUX OR FREEBSD)
355   FIND_LIBRARY (RT_LIB rt)
356 endif()
358 if (LINUX)
359   FIND_LIBRARY (CAP_LIB cap)
361   if (NOT CAP_LIB)
362     message(FATAL_ERROR "You need to install libcap")
363   endif()
364 endif()
366 if (LINUX OR APPLE)
367   FIND_LIBRARY (DL_LIB dl)
368   FIND_LIBRARY (RESOLV_LIB resolv)
369 endif()
371 if (FREEBSD)
372   FIND_LIBRARY (EXECINFO_LIB execinfo)
373   if (NOT EXECINFO_LIB)
374     message(FATAL_ERROR "You need to install libexecinfo")
375   endif()
376 endif()
378 if (APPLE)
379   find_library(KERBEROS_LIB NAMES gssapi_krb5)
381   # This is required by Homebrew's libc. See
382   # https://github.com/facebook/hhvm/pull/5728#issuecomment-124290712
383   # for more info.
384   find_package(Libpam)
385   if (PAM_INCLUDE_PATH)
386     include_directories(${PAM_INCLUDE_PATH})
387   endif()
388 endif()
390 #find_package(BISON REQUIRED)
391 #find_package(FLEX REQUIRED)
393 #if (${FLEX_VERSION} VERSION_LESS 2.5.33)
394 #  message(FATAL_ERROR "Flex is too old, found ${FLEX_VERSION} and we need 2.5.33")
395 #endif()
397 include_directories(${HPHP_HOME}/hphp)
399 macro(hphp_link target)
400   # oniguruma must remain first for OS X to work -- see below for a somewhat
401   # dogscience explanation. If you deeply understand this, feel free to fix
402   # properly; in particular, two-level namespaces on OS X should allow us to
403   # say *which* copy of the disputed functions we want, but I don' t know
404   # how to get that to work.
405   #
406   # oniguruma has some of its own implementations of POSIX regex functions,
407   # like regcomp() an regexec(). We use onig everywhere, for both its own
408   # sepcial functions and for the POSIX replacements. This means that the
409   # linker needs to pick the implementions of the POSIX regex functions from
410   # onig, not libc.
411   #
412   # On Linux, that works out fine, since the linker sees onig on the link
413   # line before (implicitly) libc. However, on OS X, despide the manpage for
414   # ld claiming otherwise about indirect dylib dependencies, as soon as we
415   # include one of the libs here that pull in libSystem.B, the linker will
416   # pick the implementations of those functions from libc, not from onig.
417   # And since we've included the onig headers, which have very slightly
418   # different definintions for some of the key data structures, things go
419   # quite awry -- this manifests as infinite loops or crashes when calling
420   # the PHP split() function.
421   #
422   # So make sure to link onig first, so its implementations are picked.
423   target_link_libraries(${target} ${ONIGURUMA_LIBRARIES})
425   if (LIBDL_LIBRARIES)
426     target_link_libraries(${target} ${LIBDL_LIBRARIES})
427   endif ()
429   if (GOOGLE_HEAP_PROFILER_ENABLED OR GOOGLE_CPU_PROFILER_ENABLED)
430     target_link_libraries(${target} ${GOOGLE_PROFILER_LIB})
431   endif()
433   if (JEMALLOC_ENABLED)
434     target_link_libraries(${target} ${JEMALLOC_LIB})
435   endif()
437   if (GOOGLE_HEAP_PROFILER_ENABLED)
438     target_link_libraries(${target} ${GOOGLE_TCMALLOC_FULL_LIB})
439   elseif (GOOGLE_TCMALLOC_ENABLED)
440     target_link_libraries(${target} ${GOOGLE_TCMALLOC_MIN_LIB})
441   endif()
443   target_link_libraries(${target} ${Boost_LIBRARIES})
444   target_link_libraries(${target} ${MYSQL_CLIENT_LIBS})
445   if (ENABLE_ASYNC_MYSQL)
446     target_link_libraries(${target} squangle)
447   endif()
448   target_link_libraries(${target} ${PCRE_LIBRARY})
449   target_link_libraries(${target} ${ICU_DATA_LIBRARIES} ${ICU_I18N_LIBRARIES} ${ICU_LIBRARIES})
450   target_link_libraries(${target} ${LIBEVENT_LIB})
451   target_link_libraries(${target} ${CURL_LIBRARIES})
452   target_link_libraries(${target} ${LIBGLOG_LIBRARY})
453   if (LIBJSONC_LIBRARY)
454     target_link_libraries(${target} ${LIBJSONC_LIBRARY})
455   endif()
457   if (LibXed_LIBRARY)
458     target_link_libraries(${target} ${LibXed_LIBRARY})
459   endif()
461   if (LIBINOTIFY_LIBRARY)
462     target_link_libraries(${target} ${LIBINOTIFY_LIBRARY})
463   endif()
465   if (LINUX)
466     target_link_libraries(${target} ${CAP_LIB})
467   endif()
469   if (LINUX OR APPLE)
470     target_link_libraries(${target} ${RESOLV_LIB})
471     target_link_libraries(${target} ${DL_LIB})
472   endif()
474   if (FREEBSD)
475     target_link_libraries(${target} ${EXECINFO_LIB})
476   endif()
478   if (APPLE)
479     target_link_libraries(${target} ${LIBINTL_LIBRARIES})
480     target_link_libraries(${target} ${KERBEROS_LIB})
482     if (PAM_LIBRARY)
483       target_link_libraries(${target} ${PAM_LIBRARY})
484     endif()
485   endif()
487   if (LIBPTHREAD_LIBRARIES)
488     target_link_libraries(${target} ${LIBPTHREAD_LIBRARIES})
489   endif()
491   target_link_libraries(${target} ${TBB_LIBRARIES})
492   target_link_libraries(${target} ${OPENSSL_LIBRARIES})
493   target_link_libraries(${target} ${ZLIB_LIBRARIES})
495   target_link_libraries(${target} ${LIBXML2_LIBRARIES})
497   target_link_libraries(${target} ${LBER_LIBRARIES})
499   if (CRYPT_LIB)
500     target_link_libraries(${target} ${CRYPT_LIB})
501   endif()
503   if (LINUX OR FREEBSD)
504     target_link_libraries(${target} ${RT_LIB})
505   endif()
507   if (LIBSQLITE3_FOUND AND LIBSQLITE3_LIBRARY)
508     target_link_libraries(${target} ${LIBSQLITE3_LIBRARY})
509   else()
510     target_link_libraries(${target} sqlite3)
511   endif()
513   if (DOUBLE_CONVERSION_LIBRARY)
514     target_link_libraries(${target} ${DOUBLE_CONVERSION_LIBRARY})
515   else()
516     target_link_libraries(${target} double-conversion)
517   endif()
519   if (LZ4_LIBRARY)
520     target_link_libraries(${target} ${LZ4_LIBRARY})
521   else()
522     target_link_libraries(${target} lz4)
523   endif()
525   if (LIBZIP_LIBRARY)
526     target_link_libraries(${target} ${LIBZIP_LIBRARY})
527   else()
528     target_link_libraries(${target} zip_static)
529   endif()
531   if (PCRE_LIBRARY)
532     target_link_libraries(${target} ${PCRE_LIBRARY})
533   else()
534     target_link_libraries(${target} pcre)
535   endif()
537   if (LIBFASTLZ_LIBRARY)
538     target_link_libraries(${target} ${LIBFASTLZ_LIBRARY})
539   else()
540     target_link_libraries(${target} fastlz)
541   endif()
543   target_link_libraries(${target} timelib)
544   target_link_libraries(${target} folly)
545   target_link_libraries(${target} wangle)
546   target_link_libraries(${target} brotli_enc)
547   target_link_libraries(${target} brotli_dec)
549   if (ENABLE_MCROUTER)
550     target_link_libraries(${target} mcrouter)
551   endif()
553   if (NOT MSVC)
554     target_link_libraries(${target} afdt)
555   endif()
556   target_link_libraries(${target} mbfl)
558   if (EDITLINE_LIBRARIES)
559     target_link_libraries(${target} ${EDITLINE_LIBRARIES})
560   elseif (READLINE_LIBRARY)
561     target_link_libraries(${target} ${READLINE_LIBRARY})
562   endif()
564   if (NOT WINDOWS)
565     target_link_libraries(${target} ${LIBDWARF_LIBRARIES})
566     target_link_libraries(${target} ${LIBELF_LIBRARIES})
567   endif()
569   if (LINUX)
570     target_link_libraries(${target} -Wl,--wrap=pthread_create -Wl,--wrap=pthread_exit -Wl,--wrap=pthread_join)
571   endif()
573   if (MSVC)
574     target_link_libraries(${target} dbghelp.lib dnsapi.lib)
575   endif()
576 endmacro()