The API addition `uv_metrics_idle_time()` is a thread safe call that allows the user to retrieve the amount of time the event loop has spent in the kernel's event provider (i.e. poll). It was done this way to allow retrieving this value without needing to interrupt the execution of the event loop. This option can be enabled by passing `UV_METRICS_IDLE_TIME` to `uv_loop_configure()`. One important aspect of this change is, when enabled, to always first call the event provider with a `timeout == 0`. This allows libuv to know whether any events were waiting in the event queue when the event provider was called. The importance of this is because libuv is tracking the amount of "idle time", not "poll time". Thus the provider entry time is not recorded when `timeout == 0` (the event provider never idles in this case). While this does add a small amount of overhead, when enabled, but the overhead decreases when the event loop has a heavier load. This is because poll events will be waiting when the event provider is called. Thus never actually recording the provider entry time. Checking if `uv_loop_t` is configured with `UV_METRICS_IDLE_TIME` always happens in `uv__metrics_set_provider_entry_time()` and `uv__metrics_update_idle_time()`. Making the conditional logic wrapping each call simpler and allows for instrumentation to always hook into those two function calls. Rather than placing the fields directly on `uv__loop_internal_fields_t` add the struct `uv__loop_metrics_t` as a location for future metrics API additions. Tests and additional documentation has been included. PR-URL: https://github.com/libuv/libuv/pull/2725 Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com> Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com> Reviewed-By: Jameson Nash <vtjnash@gmail.com>
594 lines
20 KiB
CMake
594 lines
20 KiB
CMake
cmake_minimum_required(VERSION 3.4)
|
|
project(libuv LANGUAGES C)
|
|
|
|
cmake_policy(SET CMP0057 NEW) # Enable IN_LIST operator
|
|
cmake_policy(SET CMP0064 NEW) # Support if (TEST) operator
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
include(CMakeDependentOption)
|
|
include(CheckCCompilerFlag)
|
|
include(GNUInstallDirs)
|
|
include(CTest)
|
|
|
|
set(CMAKE_C_VISIBILITY_PRESET hidden)
|
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
|
set(CMAKE_C_EXTENSIONS ON)
|
|
set(CMAKE_C_STANDARD 90)
|
|
|
|
cmake_dependent_option(LIBUV_BUILD_TESTS
|
|
"Build the unit tests when BUILD_TESTING is enabled and we are the root project" ON
|
|
"BUILD_TESTING;CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR" OFF)
|
|
cmake_dependent_option(LIBUV_BUILD_BENCH
|
|
"Build the benchmarks when building unit tests and we are the root project" ON
|
|
"LIBUV_BUILD_TESTS" OFF)
|
|
|
|
# Qemu Build
|
|
option(QEMU "build for qemu" OFF)
|
|
if(QEMU)
|
|
add_definitions(-D__QEMU__=1)
|
|
endif()
|
|
|
|
# Compiler check
|
|
string(CONCAT is-msvc $<OR:
|
|
$<C_COMPILER_ID:MSVC>,
|
|
$<STREQUAL:${CMAKE_C_COMPILER_FRONTEND_VARIANT},MSVC>
|
|
>)
|
|
|
|
check_c_compiler_flag(/W4 UV_LINT_W4)
|
|
check_c_compiler_flag(/wd4100 UV_LINT_NO_UNUSED_PARAMETER_MSVC)
|
|
check_c_compiler_flag(/wd4127 UV_LINT_NO_CONDITIONAL_CONSTANT_MSVC)
|
|
check_c_compiler_flag(/wd4201 UV_LINT_NO_NONSTANDARD_MSVC)
|
|
check_c_compiler_flag(/wd4206 UV_LINT_NO_NONSTANDARD_EMPTY_TU_MSVC)
|
|
check_c_compiler_flag(/wd4210 UV_LINT_NO_NONSTANDARD_FILE_SCOPE_MSVC)
|
|
check_c_compiler_flag(/wd4232 UV_LINT_NO_NONSTANDARD_NONSTATIC_DLIMPORT_MSVC)
|
|
check_c_compiler_flag(/wd4456 UV_LINT_NO_HIDES_LOCAL)
|
|
check_c_compiler_flag(/wd4457 UV_LINT_NO_HIDES_PARAM)
|
|
check_c_compiler_flag(/wd4459 UV_LINT_NO_HIDES_GLOBAL)
|
|
check_c_compiler_flag(/wd4706 UV_LINT_NO_CONDITIONAL_ASSIGNMENT_MSVC)
|
|
check_c_compiler_flag(/wd4996 UV_LINT_NO_UNSAFE_MSVC)
|
|
|
|
check_c_compiler_flag(-Wall UV_LINT_WALL) # DO NOT use this under MSVC
|
|
|
|
# TODO: Place these into its own function
|
|
check_c_compiler_flag(-Wno-unused-parameter UV_LINT_NO_UNUSED_PARAMETER)
|
|
check_c_compiler_flag(-Wstrict-prototypes UV_LINT_STRICT_PROTOTYPES)
|
|
check_c_compiler_flag(-Wextra UV_LINT_EXTRA)
|
|
|
|
set(lint-no-unused-parameter $<$<BOOL:${UV_LINT_NO_UNUSED_PARAMETER}>:-Wno-unused-parameter>)
|
|
set(lint-strict-prototypes $<$<BOOL:${UV_LINT_STRICT_PROTOTYPES}>:-Wstrict-prototypes>)
|
|
set(lint-extra $<$<BOOL:${UV_LINT_EXTRA}>:-Wextra>)
|
|
set(lint-w4 $<$<BOOL:${UV_LINT_W4}>:/W4>)
|
|
set(lint-no-unused-parameter-msvc $<$<BOOL:${UV_LINT_NO_UNUSED_PARAMETER_MSVC}>:/wd4100>)
|
|
set(lint-no-conditional-constant-msvc $<$<BOOL:${UV_LINT_NO_CONDITIONAL_CONSTANT_MSVC}>:/wd4127>)
|
|
set(lint-no-nonstandard-msvc $<$<BOOL:${UV_LINT_NO_NONSTANDARD_MSVC}>:/wd4201>)
|
|
set(lint-no-nonstandard-empty-tu-msvc $<$<BOOL:${UV_LINT_NO_NONSTANDARD_EMPTY_TU_MSVC}>:/wd4206>)
|
|
set(lint-no-nonstandard-file-scope-msvc $<$<BOOL:${UV_LINT_NO_NONSTANDARD_FILE_SCOPE_MSVC}>:/wd4210>)
|
|
set(lint-no-nonstandard-nonstatic-dlimport-msvc $<$<BOOL:${UV_LINT_NO_NONSTANDARD_NONSTATIC_DLIMPORT_MSVC}>:/wd4232>)
|
|
set(lint-no-hides-local-msvc $<$<BOOL:${UV_LINT_NO_HIDES_LOCAL}>:/wd4456>)
|
|
set(lint-no-hides-param-msvc $<$<BOOL:${UV_LINT_NO_HIDES_PARAM}>:/wd4457>)
|
|
set(lint-no-hides-global-msvc $<$<BOOL:${UV_LINT_NO_HIDES_GLOBAL}>:/wd4459>)
|
|
set(lint-no-conditional-assignment-msvc $<$<BOOL:${UV_LINT_NO_CONDITIONAL_ASSIGNMENT_MSVC}>:/wd4706>)
|
|
set(lint-no-unsafe-msvc $<$<BOOL:${UV_LINT_NO_UNSAFE_MSVC}>:/wd4996>)
|
|
# Unfortunately, this one is complicated because MSVC and clang-cl support -Wall
|
|
# but using it is like calling -Weverything
|
|
string(CONCAT lint-default $<
|
|
$<AND:$<BOOL:${UV_LINT_WALL}>,$<NOT:${is-msvc}>>:-Wall
|
|
>)
|
|
|
|
list(APPEND uv_cflags ${lint-strict-prototypes} ${lint-extra} ${lint-default} ${lint-w4})
|
|
list(APPEND uv_cflags ${lint-no-unused-parameter})
|
|
list(APPEND uv_cflags ${lint-no-unused-parameter-msvc})
|
|
list(APPEND uv_cflags ${lint-no-conditional-constant-msvc})
|
|
list(APPEND uv_cflags ${lint-no-nonstandard-msvc})
|
|
list(APPEND uv_cflags ${lint-no-nonstandard-empty-tu-msvc})
|
|
list(APPEND uv_cflags ${lint-no-nonstandard-file-scope-msvc})
|
|
list(APPEND uv_cflags ${lint-no-nonstandard-nonstatic-dlimport-msvc})
|
|
list(APPEND uv_cflags ${lint-no-hides-local-msvc})
|
|
list(APPEND uv_cflags ${lint-no-hides-param-msvc})
|
|
list(APPEND uv_cflags ${lint-no-hides-global-msvc})
|
|
list(APPEND uv_cflags ${lint-no-conditional-assignment-msvc})
|
|
list(APPEND uv_cflags ${lint-no-unsafe-msvc})
|
|
|
|
set(uv_sources
|
|
src/fs-poll.c
|
|
src/idna.c
|
|
src/inet.c
|
|
src/random.c
|
|
src/strscpy.c
|
|
src/threadpool.c
|
|
src/timer.c
|
|
src/uv-common.c
|
|
src/uv-data-getter-setters.c
|
|
src/version.c)
|
|
|
|
if(WIN32)
|
|
list(APPEND uv_defines WIN32_LEAN_AND_MEAN _WIN32_WINNT=0x0600)
|
|
list(APPEND uv_libraries
|
|
psapi
|
|
user32
|
|
advapi32
|
|
iphlpapi
|
|
userenv
|
|
ws2_32)
|
|
list(APPEND uv_sources
|
|
src/win/async.c
|
|
src/win/core.c
|
|
src/win/detect-wakeup.c
|
|
src/win/dl.c
|
|
src/win/error.c
|
|
src/win/fs.c
|
|
src/win/fs-event.c
|
|
src/win/getaddrinfo.c
|
|
src/win/getnameinfo.c
|
|
src/win/handle.c
|
|
src/win/loop-watcher.c
|
|
src/win/pipe.c
|
|
src/win/thread.c
|
|
src/win/poll.c
|
|
src/win/process.c
|
|
src/win/process-stdio.c
|
|
src/win/signal.c
|
|
src/win/snprintf.c
|
|
src/win/stream.c
|
|
src/win/tcp.c
|
|
src/win/tty.c
|
|
src/win/udp.c
|
|
src/win/util.c
|
|
src/win/winapi.c
|
|
src/win/winsock.c)
|
|
list(APPEND uv_test_libraries ws2_32)
|
|
list(APPEND uv_test_sources src/win/snprintf.c test/runner-win.c)
|
|
else()
|
|
list(APPEND uv_defines _FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE)
|
|
if(NOT CMAKE_SYSTEM_NAME MATCHES "Android|OS390")
|
|
# TODO: This should be replaced with find_package(Threads) if possible
|
|
# Android has pthread as part of its c library, not as a separate
|
|
# libpthread.so.
|
|
list(APPEND uv_libraries pthread)
|
|
endif()
|
|
list(APPEND uv_sources
|
|
src/unix/async.c
|
|
src/unix/core.c
|
|
src/unix/dl.c
|
|
src/unix/fs.c
|
|
src/unix/getaddrinfo.c
|
|
src/unix/getnameinfo.c
|
|
src/unix/loop-watcher.c
|
|
src/unix/loop.c
|
|
src/unix/pipe.c
|
|
src/unix/poll.c
|
|
src/unix/process.c
|
|
src/unix/random-devurandom.c
|
|
src/unix/signal.c
|
|
src/unix/stream.c
|
|
src/unix/tcp.c
|
|
src/unix/thread.c
|
|
src/unix/tty.c
|
|
src/unix/udp.c)
|
|
list(APPEND uv_test_sources test/runner-unix.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "AIX")
|
|
list(APPEND uv_defines
|
|
_ALL_SOURCE
|
|
_LINUX_SOURCE_COMPAT
|
|
_THREAD_SAFE
|
|
_XOPEN_SOURCE=500
|
|
HAVE_SYS_AHAFS_EVPRODS_H)
|
|
list(APPEND uv_libraries perfstat)
|
|
list(APPEND uv_sources
|
|
src/unix/aix.c
|
|
src/unix/aix-common.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
|
list(APPEND uv_defines _GNU_SOURCE)
|
|
list(APPEND uv_libraries dl)
|
|
list(APPEND uv_sources
|
|
src/unix/android-ifaddrs.c
|
|
src/unix/linux-core.c
|
|
src/unix/linux-inotify.c
|
|
src/unix/linux-syscalls.c
|
|
src/unix/procfs-exepath.c
|
|
src/unix/pthread-fixes.c
|
|
src/unix/random-getentropy.c
|
|
src/unix/random-getrandom.c
|
|
src/unix/random-sysctl-linux.c)
|
|
endif()
|
|
|
|
if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "Android|Linux|OS390")
|
|
list(APPEND uv_sources src/unix/proctitle.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD")
|
|
list(APPEND uv_sources src/unix/freebsd.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD")
|
|
list(APPEND uv_sources src/unix/posix-hrtime.c src/unix/bsd-proctitle.c)
|
|
endif()
|
|
|
|
if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|NetBSD|OpenBSD")
|
|
list(APPEND uv_sources src/unix/bsd-ifaddrs.c src/unix/kqueue.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
list(APPEND uv_sources src/unix/random-getrandom.c)
|
|
endif()
|
|
|
|
if(APPLE OR CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
|
list(APPEND uv_sources src/unix/random-getentropy.c)
|
|
endif()
|
|
|
|
if(APPLE)
|
|
list(APPEND uv_defines _DARWIN_UNLIMITED_SELECT=1 _DARWIN_USE_64_BIT_INODE=1)
|
|
list(APPEND uv_sources
|
|
src/unix/darwin-proctitle.c
|
|
src/unix/darwin.c
|
|
src/unix/fsevents.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|
list(APPEND uv_defines _GNU_SOURCE _POSIX_C_SOURCE=200112)
|
|
list(APPEND uv_libraries dl rt)
|
|
list(APPEND uv_sources
|
|
src/unix/linux-core.c
|
|
src/unix/linux-inotify.c
|
|
src/unix/linux-syscalls.c
|
|
src/unix/procfs-exepath.c
|
|
src/unix/random-getrandom.c
|
|
src/unix/random-sysctl-linux.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
|
|
list(APPEND uv_sources src/unix/netbsd.c)
|
|
list(APPEND uv_libraries kvm)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
|
|
list(APPEND uv_sources src/unix/openbsd.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "OS390")
|
|
list(APPEND uv_defines PATH_MAX=255)
|
|
list(APPEND uv_defines _AE_BIMODAL)
|
|
list(APPEND uv_defines _ALL_SOURCE)
|
|
list(APPEND uv_defines _ISOC99_SOURCE)
|
|
list(APPEND uv_defines _LARGE_TIME_API)
|
|
list(APPEND uv_defines _OPEN_MSGQ_EXT)
|
|
list(APPEND uv_defines _OPEN_SYS_FILE_EXT)
|
|
list(APPEND uv_defines _OPEN_SYS_IF_EXT)
|
|
list(APPEND uv_defines _OPEN_SYS_SOCK_EXT3)
|
|
list(APPEND uv_defines _OPEN_SYS_SOCK_IPV6)
|
|
list(APPEND uv_defines _UNIX03_SOURCE)
|
|
list(APPEND uv_defines _UNIX03_THREADS)
|
|
list(APPEND uv_defines _UNIX03_WITHDRAWN)
|
|
list(APPEND uv_defines _XOPEN_SOURCE_EXTENDED)
|
|
list(APPEND uv_sources
|
|
src/unix/pthread-fixes.c
|
|
src/unix/os390.c
|
|
src/unix/os390-syscalls.c)
|
|
list(APPEND uv_cflags -Wc,DLL -Wc,exportall -Wc,xplink)
|
|
list(APPEND uv_libraries -Wl,xplink)
|
|
list(APPEND uv_test_libraries -Wl,xplink)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "OS400")
|
|
list(APPEND uv_defines
|
|
_ALL_SOURCE
|
|
_LINUX_SOURCE_COMPAT
|
|
_THREAD_SAFE
|
|
_XOPEN_SOURCE=500)
|
|
list(APPEND uv_sources
|
|
src/unix/aix-common.c
|
|
src/unix/ibmi.c
|
|
src/unix/no-fsevents.c
|
|
src/unix/no-proctitle.c
|
|
src/unix/posix-poll.c)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
|
list(APPEND uv_defines __EXTENSIONS__ _XOPEN_SOURCE=500)
|
|
list(APPEND uv_libraries kstat nsl sendfile socket)
|
|
list(APPEND uv_sources src/unix/no-proctitle.c src/unix/sunos.c)
|
|
endif()
|
|
|
|
if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD|Linux|NetBSD|OpenBSD")
|
|
list(APPEND uv_test_libraries util)
|
|
endif()
|
|
|
|
add_library(uv SHARED ${uv_sources})
|
|
target_compile_definitions(uv
|
|
INTERFACE
|
|
USING_UV_SHARED=1
|
|
PRIVATE
|
|
BUILDING_UV_SHARED=1
|
|
${uv_defines})
|
|
target_compile_options(uv PRIVATE ${uv_cflags})
|
|
target_include_directories(uv
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
|
PRIVATE
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
|
target_link_libraries(uv ${uv_libraries})
|
|
|
|
add_library(uv_a STATIC ${uv_sources})
|
|
target_compile_definitions(uv_a PRIVATE ${uv_defines})
|
|
target_compile_options(uv_a PRIVATE ${uv_cflags})
|
|
target_include_directories(uv_a
|
|
PUBLIC
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
|
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
|
PRIVATE
|
|
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>)
|
|
target_link_libraries(uv_a ${uv_libraries})
|
|
|
|
if(LIBUV_BUILD_TESTS)
|
|
# Small hack: use ${uv_test_sources} now to get the runner skeleton,
|
|
# before the actual tests are added.
|
|
add_executable(
|
|
uv_run_benchmarks_a
|
|
${uv_test_sources}
|
|
test/benchmark-async-pummel.c
|
|
test/benchmark-async.c
|
|
test/benchmark-fs-stat.c
|
|
test/benchmark-getaddrinfo.c
|
|
test/benchmark-loop-count.c
|
|
test/benchmark-million-async.c
|
|
test/benchmark-million-timers.c
|
|
test/benchmark-multi-accept.c
|
|
test/benchmark-ping-pongs.c
|
|
test/benchmark-ping-udp.c
|
|
test/benchmark-pound.c
|
|
test/benchmark-pump.c
|
|
test/benchmark-sizes.c
|
|
test/benchmark-spawn.c
|
|
test/benchmark-tcp-write-batch.c
|
|
test/benchmark-thread.c
|
|
test/benchmark-udp-pummel.c
|
|
test/blackhole-server.c
|
|
test/dns-server.c
|
|
test/echo-server.c
|
|
test/run-benchmarks.c
|
|
test/runner.c)
|
|
target_compile_definitions(uv_run_benchmarks_a PRIVATE ${uv_defines})
|
|
target_compile_options(uv_run_benchmarks_a PRIVATE ${uv_cflags})
|
|
target_link_libraries(uv_run_benchmarks_a uv_a ${uv_test_libraries})
|
|
|
|
list(APPEND uv_test_sources
|
|
test/blackhole-server.c
|
|
test/echo-server.c
|
|
test/run-tests.c
|
|
test/runner.c
|
|
test/test-active.c
|
|
test/test-async-null-cb.c
|
|
test/test-async.c
|
|
test/test-barrier.c
|
|
test/test-callback-order.c
|
|
test/test-callback-stack.c
|
|
test/test-close-fd.c
|
|
test/test-close-order.c
|
|
test/test-condvar.c
|
|
test/test-connect-unspecified.c
|
|
test/test-connection-fail.c
|
|
test/test-cwd-and-chdir.c
|
|
test/test-default-loop-close.c
|
|
test/test-delayed-accept.c
|
|
test/test-dlerror.c
|
|
test/test-eintr-handling.c
|
|
test/test-embed.c
|
|
test/test-emfile.c
|
|
test/test-env-vars.c
|
|
test/test-error.c
|
|
test/test-fail-always.c
|
|
test/test-fork.c
|
|
test/test-fs-copyfile.c
|
|
test/test-fs-event.c
|
|
test/test-fs-poll.c
|
|
test/test-fs.c
|
|
test/test-fs-readdir.c
|
|
test/test-fs-fd-hash.c
|
|
test/test-fs-open-flags.c
|
|
test/test-get-currentexe.c
|
|
test/test-get-loadavg.c
|
|
test/test-get-memory.c
|
|
test/test-get-passwd.c
|
|
test/test-getaddrinfo.c
|
|
test/test-gethostname.c
|
|
test/test-getnameinfo.c
|
|
test/test-getsockname.c
|
|
test/test-getters-setters.c
|
|
test/test-gettimeofday.c
|
|
test/test-handle-fileno.c
|
|
test/test-homedir.c
|
|
test/test-hrtime.c
|
|
test/test-idle.c
|
|
test/test-idna.c
|
|
test/test-ip4-addr.c
|
|
test/test-ip6-addr.c
|
|
test/test-ipc-heavy-traffic-deadlock-bug.c
|
|
test/test-ipc-send-recv.c
|
|
test/test-ipc.c
|
|
test/test-loop-alive.c
|
|
test/test-loop-close.c
|
|
test/test-loop-configure.c
|
|
test/test-loop-handles.c
|
|
test/test-loop-stop.c
|
|
test/test-loop-time.c
|
|
test/test-metrics.c
|
|
test/test-multiple-listen.c
|
|
test/test-mutexes.c
|
|
test/test-not-readable-nor-writable-on-read-error.c
|
|
test/test-not-readable-on-eof.c
|
|
test/test-not-writable-after-shutdown.c
|
|
test/test-osx-select.c
|
|
test/test-pass-always.c
|
|
test/test-ping-pong.c
|
|
test/test-pipe-bind-error.c
|
|
test/test-pipe-close-stdout-read-stdin.c
|
|
test/test-pipe-connect-error.c
|
|
test/test-pipe-connect-multiple.c
|
|
test/test-pipe-connect-prepare.c
|
|
test/test-pipe-getsockname.c
|
|
test/test-pipe-pending-instances.c
|
|
test/test-pipe-sendmsg.c
|
|
test/test-pipe-server-close.c
|
|
test/test-pipe-set-fchmod.c
|
|
test/test-pipe-set-non-blocking.c
|
|
test/test-platform-output.c
|
|
test/test-poll-close-doesnt-corrupt-stack.c
|
|
test/test-poll-close.c
|
|
test/test-poll-closesocket.c
|
|
test/test-poll-oob.c
|
|
test/test-poll.c
|
|
test/test-process-priority.c
|
|
test/test-process-title-threadsafe.c
|
|
test/test-process-title.c
|
|
test/test-queue-foreach-delete.c
|
|
test/test-random.c
|
|
test/test-ref.c
|
|
test/test-run-nowait.c
|
|
test/test-run-once.c
|
|
test/test-semaphore.c
|
|
test/test-shutdown-close.c
|
|
test/test-shutdown-eof.c
|
|
test/test-shutdown-twice.c
|
|
test/test-signal-multiple-loops.c
|
|
test/test-signal-pending-on-close.c
|
|
test/test-signal.c
|
|
test/test-socket-buffer-size.c
|
|
test/test-spawn.c
|
|
test/test-stdio-over-pipes.c
|
|
test/test-strscpy.c
|
|
test/test-tcp-alloc-cb-fail.c
|
|
test/test-tcp-bind-error.c
|
|
test/test-tcp-bind6-error.c
|
|
test/test-tcp-close-accept.c
|
|
test/test-tcp-close-while-connecting.c
|
|
test/test-tcp-close.c
|
|
test/test-tcp-close-reset.c
|
|
test/test-tcp-connect-error-after-write.c
|
|
test/test-tcp-connect-error.c
|
|
test/test-tcp-connect-timeout.c
|
|
test/test-tcp-connect6-error.c
|
|
test/test-tcp-create-socket-early.c
|
|
test/test-tcp-flags.c
|
|
test/test-tcp-oob.c
|
|
test/test-tcp-open.c
|
|
test/test-tcp-read-stop.c
|
|
test/test-tcp-read-stop-start.c
|
|
test/test-tcp-shutdown-after-write.c
|
|
test/test-tcp-try-write.c
|
|
test/test-tcp-try-write-error.c
|
|
test/test-tcp-unexpected-read.c
|
|
test/test-tcp-write-after-connect.c
|
|
test/test-tcp-write-fail.c
|
|
test/test-tcp-write-queue-order.c
|
|
test/test-tcp-write-to-half-open-connection.c
|
|
test/test-tcp-writealot.c
|
|
test/test-thread-equal.c
|
|
test/test-thread.c
|
|
test/test-threadpool-cancel.c
|
|
test/test-threadpool.c
|
|
test/test-timer-again.c
|
|
test/test-timer-from-check.c
|
|
test/test-timer.c
|
|
test/test-tmpdir.c
|
|
test/test-tty-duplicate-key.c
|
|
test/test-tty-escape-sequence-processing.c
|
|
test/test-tty.c
|
|
test/test-udp-alloc-cb-fail.c
|
|
test/test-udp-bind.c
|
|
test/test-udp-connect.c
|
|
test/test-udp-create-socket-early.c
|
|
test/test-udp-dgram-too-big.c
|
|
test/test-udp-ipv6.c
|
|
test/test-udp-mmsg.c
|
|
test/test-udp-multicast-interface.c
|
|
test/test-udp-multicast-interface6.c
|
|
test/test-udp-multicast-join.c
|
|
test/test-udp-multicast-join6.c
|
|
test/test-udp-multicast-ttl.c
|
|
test/test-udp-open.c
|
|
test/test-udp-options.c
|
|
test/test-udp-send-and-recv.c
|
|
test/test-udp-send-hang-loop.c
|
|
test/test-udp-send-immediate.c
|
|
test/test-udp-sendmmsg-error.c
|
|
test/test-udp-send-unreachable.c
|
|
test/test-udp-try-send.c
|
|
test/test-uname.c
|
|
test/test-walk-handles.c
|
|
test/test-watcher-cross-stop.c)
|
|
|
|
add_executable(uv_run_tests ${uv_test_sources} uv_win_longpath.manifest)
|
|
target_compile_definitions(uv_run_tests
|
|
PRIVATE ${uv_defines} USING_UV_SHARED=1)
|
|
target_compile_options(uv_run_tests PRIVATE ${uv_cflags})
|
|
target_link_libraries(uv_run_tests uv ${uv_test_libraries})
|
|
add_test(NAME uv_test
|
|
COMMAND uv_run_tests
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "OS390")
|
|
set_tests_properties(uv_test PROPERTIES ENVIRONMENT
|
|
"LIBPATH=${CMAKE_BINARY_DIR}:$ENV{LIBPATH}")
|
|
endif()
|
|
add_executable(uv_run_tests_a ${uv_test_sources} uv_win_longpath.manifest)
|
|
target_compile_definitions(uv_run_tests_a PRIVATE ${uv_defines})
|
|
target_compile_options(uv_run_tests_a PRIVATE ${uv_cflags})
|
|
if(QEMU)
|
|
target_link_libraries(uv_run_tests_a uv_a ${uv_test_libraries} -static)
|
|
else()
|
|
target_link_libraries(uv_run_tests_a uv_a ${uv_test_libraries})
|
|
endif()
|
|
add_test(NAME uv_test_a
|
|
COMMAND uv_run_tests_a
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
|
endif()
|
|
|
|
if(UNIX OR MINGW)
|
|
# Now for some gibbering horrors from beyond the stars...
|
|
foreach(lib IN LISTS uv_libraries)
|
|
list(APPEND LIBS "-l${lib}")
|
|
endforeach()
|
|
string(REPLACE ";" " " LIBS "${LIBS}")
|
|
# Consider setting project version via project() call?
|
|
file(STRINGS configure.ac configure_ac REGEX ^AC_INIT)
|
|
string(REGEX MATCH "([0-9]+)[.][0-9]+[.][0-9]+" PACKAGE_VERSION "${configure_ac}")
|
|
set(UV_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
|
# The version in the filename is mirroring the behaviour of autotools.
|
|
set_target_properties(uv PROPERTIES
|
|
VERSION ${UV_VERSION_MAJOR}.0.0
|
|
SOVERSION ${UV_VERSION_MAJOR})
|
|
set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
|
|
set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR})
|
|
set(prefix ${CMAKE_INSTALL_PREFIX})
|
|
configure_file(libuv.pc.in libuv.pc @ONLY)
|
|
|
|
install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
install(FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
|
|
install(FILES ${PROJECT_BINARY_DIR}/libuv.pc
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
install(TARGETS uv LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
install(TARGETS uv_a ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
endif()
|
|
|
|
if(MSVC)
|
|
install(DIRECTORY include/ DESTINATION include)
|
|
install(FILES LICENSE DESTINATION .)
|
|
install(TARGETS uv uv_a
|
|
RUNTIME DESTINATION lib/$<CONFIG>
|
|
ARCHIVE DESTINATION lib/$<CONFIG>)
|
|
endif()
|
|
|
|
message(STATUS "summary of build options:
|
|
Install prefix: ${CMAKE_INSTALL_PREFIX}
|
|
Target system: ${CMAKE_SYSTEM_NAME}
|
|
Compiler:
|
|
C compiler: ${CMAKE_C_COMPILER}
|
|
CFLAGS: ${CMAKE_C_FLAGS_${_build_type}} ${CMAKE_C_FLAGS}
|
|
")
|