diff options
author | Brad King <brad.king@kitware.com> | 2017-09-13 18:33:38 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-09-17 15:10:18 (GMT) |
commit | 714ce728828c267da9a5c0d9f2e48eb5f88a8336 (patch) | |
tree | 6b7857ad6dddef5f691ebb609c1d43e695e21d58 /Utilities/cmlibuv/src/unix/posix-hrtime.c | |
parent | 6a2d967de07a52f0460089999349e31741b402f8 (diff) | |
download | CMake-714ce728828c267da9a5c0d9f2e48eb5f88a8336.zip CMake-714ce728828c267da9a5c0d9f2e48eb5f88a8336.tar.gz CMake-714ce728828c267da9a5c0d9f2e48eb5f88a8336.tar.bz2 |
bootstrap: Make libuv available during bootstrap
On UNIX, build only the parts of libuv we need for the filesystem,
process, and poll abstractions using the POSIX poll() backend. This
avoids many platform-specific conditions. On Windows, build all of
libuv; there are no conditional alternatives anyway.
Diffstat (limited to 'Utilities/cmlibuv/src/unix/posix-hrtime.c')
-rw-r--r-- | Utilities/cmlibuv/src/unix/posix-hrtime.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Utilities/cmlibuv/src/unix/posix-hrtime.c b/Utilities/cmlibuv/src/unix/posix-hrtime.c index 323dfc2..a264250 100644 --- a/Utilities/cmlibuv/src/unix/posix-hrtime.c +++ b/Utilities/cmlibuv/src/unix/posix-hrtime.c @@ -22,6 +22,29 @@ #include "uv.h" #include "internal.h" +#if defined(__APPLE__) +/* Special case for CMake bootstrap: no clock_gettime on macOS < 10.12 */ + +#ifndef CMAKE_BOOTSTRAP +#error "This code path meant only for use during CMake bootstrap." +#endif + +#include <mach/mach.h> +#include <mach/mach_time.h> + +uint64_t uv__hrtime(uv_clocktype_t type) { + static mach_timebase_info_data_t info; + + if ((ACCESS_ONCE(uint32_t, info.numer) == 0 || + ACCESS_ONCE(uint32_t, info.denom) == 0) && + mach_timebase_info(&info) != KERN_SUCCESS) + abort(); + + return mach_absolute_time() * info.numer / info.denom; +} + +#else + #include <stdint.h> #include <time.h> @@ -33,3 +56,5 @@ uint64_t uv__hrtime(uv_clocktype_t type) { clock_gettime(CLOCK_MONOTONIC, &ts); return (((uint64_t) ts.tv_sec) * NANOSEC + ts.tv_nsec); } + +#endif |