@@ -31,13 +31,26 @@ if(QEMU) |
31 | 31 | endif() |
32 | 32 |
|
33 | 33 | option(ASAN "Enable AddressSanitizer (ASan)" OFF) |
34 | | -if(ASAN AND CMAKE_C_COMPILER_ID MATCHES "AppleClang|GNU|Clang") |
| 34 | +option(TSAN "Enable ThreadSanitizer (TSan)" OFF) |
| 35 | + |
| 36 | +if((ASAN OR TSAN) AND NOT (CMAKE_C_COMPILER_ID MATCHES "AppleClang|GNU|Clang")) |
| 37 | + message(SEND_ERROR "Sanitizer support requires clang or gcc. Try again with -DCMAKE_C_COMPILER.") |
| 38 | +endif() |
| 39 | + |
| 40 | +if(ASAN) |
35 | 41 | add_definitions(-D__ASAN__=1) |
36 | | - set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") |
37 | | - set (CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -fno-omit-frame-pointer -fsanitize=address") |
| 42 | + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=address") |
| 43 | + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address") |
38 | 44 | set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=address") |
39 | 45 | endif() |
40 | 46 |
|
| 47 | +if(TSAN) |
| 48 | + add_definitions(-D__TSAN__=1) |
| 49 | + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fno-omit-frame-pointer -fsanitize=thread") |
| 50 | + set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=thread") |
| 51 | + set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fno-omit-frame-pointer -fsanitize=thread") |
| 52 | +endif() |
| 53 | + |
41 | 54 | # Compiler check |
42 | 55 | string(CONCAT is-msvc $<OR: |
43 | 56 | $<C_COMPILER_ID:MSVC>, |
@@ -418,7 +431,6 @@ if(LIBUV_BUILD_TESTS) |
418 | 431 | test/benchmark-thread.c |
419 | 432 | test/benchmark-udp-pummel.c |
420 | 433 | test/blackhole-server.c |
421 | | - test/dns-server.c |
422 | 434 | test/echo-server.c |
423 | 435 | test/run-benchmarks.c |
424 | 436 | test/runner.c) |
@@ -477,6 +489,7 @@ if(LIBUV_BUILD_TESTS) |
477 | 489 | test/test-idna.c |
478 | 490 | test/test-ip4-addr.c |
479 | 491 | test/test-ip6-addr.c |
| 492 | + test/test-ip-name.c |
480 | 493 | test/test-ipc-heavy-traffic-deadlock-bug.c |
481 | 494 | test/test-ipc-send-recv.c |
482 | 495 | test/test-ipc.c |
@@ -490,7 +503,6 @@ if(LIBUV_BUILD_TESTS) |
490 | 503 | test/test-multiple-listen.c |
491 | 504 | test/test-mutexes.c |
492 | 505 | test/test-not-readable-nor-writable-on-read-error.c |
493 | | - test/test-not-readable-on-eof.c |
494 | 506 | test/test-not-writable-after-shutdown.c |
495 | 507 | test/test-osx-select.c |
496 | 508 | test/test-pass-always.c |
@@ -518,6 +530,7 @@ if(LIBUV_BUILD_TESTS) |
518 | 530 | test/test-process-title.c |
519 | 531 | test/test-queue-foreach-delete.c |
520 | 532 | test/test-random.c |
| 533 | + test/test-readable-on-eof.c |
521 | 534 | test/test-ref.c |
522 | 535 | test/test-run-nowait.c |
523 | 536 | test/test-run-once.c |
@@ -574,6 +587,7 @@ if(LIBUV_BUILD_TESTS) |
574 | 587 | test/test-udp-alloc-cb-fail.c |
575 | 588 | test/test-udp-bind.c |
576 | 589 | test/test-udp-connect.c |
| 590 | + test/test-udp-connect6.c |
577 | 591 | test/test-udp-create-socket-early.c |
578 | 592 | test/test-udp-dgram-too-big.c |
579 | 593 | test/test-udp-ipv6.c |
@@ -625,46 +639,43 @@ if(LIBUV_BUILD_TESTS) |
625 | 639 | endif() |
626 | 640 | endif() |
627 | 641 |
|
628 | | -if(UNIX OR MINGW) |
629 | | - # Now for some gibbering horrors from beyond the stars... |
630 | | - foreach(lib IN LISTS uv_libraries) |
631 | | - list(APPEND LIBS "-l${lib}") |
632 | | - endforeach() |
633 | | - string(REPLACE ";" " " LIBS "${LIBS}") |
634 | | - # Consider setting project version via project() call? |
635 | | - file(STRINGS configure.ac configure_ac REGEX ^AC_INIT) |
636 | | - string(REGEX MATCH "([0-9]+)[.][0-9]+[.][0-9]+" PACKAGE_VERSION "${configure_ac}") |
637 | | - set(UV_VERSION_MAJOR "${CMAKE_MATCH_1}") |
638 | | - # The version in the filename is mirroring the behaviour of autotools. |
639 | | - set_target_properties(uv PROPERTIES |
640 | | - VERSION ${UV_VERSION_MAJOR}.0.0 |
641 | | - SOVERSION ${UV_VERSION_MAJOR}) |
642 | | - set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) |
643 | | - set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) |
644 | | - set(prefix ${CMAKE_INSTALL_PREFIX}) |
645 | | - configure_file(libuv.pc.in libuv.pc @ONLY) |
646 | | - configure_file(libuv-static.pc.in libuv-static.pc @ONLY) |
647 | | - |
648 | | - install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
649 | | - install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) |
650 | | - install(FILES ${PROJECT_BINARY_DIR}/libuv.pc ${PROJECT_BINARY_DIR}/libuv-static.pc |
651 | | - DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |
652 | | - install(TARGETS uv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
653 | | - install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
654 | | -endif() |
| 642 | +# Now for some gibbering horrors from beyond the stars... |
| 643 | +foreach(lib IN LISTS uv_libraries) |
| 644 | + list(APPEND LIBS "-l${lib}") |
| 645 | +endforeach() |
| 646 | +string(REPLACE ";" " " LIBS "${LIBS}") |
| 647 | +# Consider setting project version via project() call? |
| 648 | +file(STRINGS configure.ac configure_ac REGEX ^AC_INIT) |
| 649 | +string(REGEX MATCH "([0-9]+)[.][0-9]+[.][0-9]+" PACKAGE_VERSION "${configure_ac}") |
| 650 | +set(UV_VERSION_MAJOR "${CMAKE_MATCH_1}") |
| 651 | +# The version in the filename is mirroring the behaviour of autotools. |
| 652 | +set_target_properties(uv PROPERTIES |
| 653 | + VERSION ${UV_VERSION_MAJOR}.0.0 |
| 654 | + SOVERSION ${UV_VERSION_MAJOR}) |
| 655 | +set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) |
| 656 | +set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) |
| 657 | +set(prefix ${CMAKE_INSTALL_PREFIX}) |
| 658 | +configure_file(libuv.pc.in libuv.pc @ONLY) |
| 659 | +configure_file(libuv-static.pc.in libuv-static.pc @ONLY) |
| 660 | + |
| 661 | +install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) |
| 662 | +install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR}) |
| 663 | +install(FILES ${PROJECT_BINARY_DIR}/libuv.pc ${PROJECT_BINARY_DIR}/libuv-static.pc |
| 664 | + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) |
| 665 | +install(TARGETS uv EXPORT libuvConfig |
| 666 | + RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 667 | + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 668 | +install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) |
| 669 | +install(EXPORT libuvConfig DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libuv) |
655 | 670 |
|
656 | 671 | if(MSVC) |
657 | | - install(DIRECTORY include/ DESTINATION include) |
658 | | - install(FILES LICENSE DESTINATION .) |
659 | | - install(TARGETS uv uv_a |
660 | | - RUNTIME DESTINATION lib/$<CONFIG> |
661 | | - ARCHIVE DESTINATION lib/$<CONFIG>) |
| 672 | + set(CMAKE_DEBUG_POSTFIX d) |
662 | 673 | endif() |
663 | 674 |
|
664 | 675 | message(STATUS "summary of build options: |
665 | 676 | Install prefix: ${CMAKE_INSTALL_PREFIX} |
666 | 677 | Target system: ${CMAKE_SYSTEM_NAME} |
667 | 678 | Compiler: |
668 | | - C compiler: ${CMAKE_C_COMPILER} |
| 679 | + C compiler: ${CMAKE_C_COMPILER} (${CMAKE_C_COMPILER_ID}) |
669 | 680 | CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS} |
670 | 681 | ") |