Re: [libcxx] r291466 - [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW
Ops. Fixed in r291517! On Mon, Jan 9, 2017 at 2:13 PM, Reid Kleckner wrote: > This appears to have broken the Chromium build: > https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac/builds/12620/steps/gclient%20runhooks/logs/stdio > FAILED: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o > /Applications/Xcode8.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ > -D_DEBUG -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER > -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS > -Iprojects/libcxx/lib > -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/lib -Iinclude > -I/b/c/b/ClangToTMac/src/third_party/llvm/include > -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/include > -DLLVM_FORCE_HEAD_REVISION -fPIC -fvisibility-inlines-hidden -Wall -W > -Wno-unused-parameter -Wwrite-strings -Wcast-qual > -Wmissing-field-initializers -Wno-long-long -Wcovered-switch-default > -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion > -Werror=date-time -std=c++11 -fcolor-diagnostics -O3 -isysroot > /Applications/Xcode8.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk > -mmacosx-version-min=10.11-UNDEBUG -std=c++11 -nostdinc++ > -fvisibility-inlines-hidden -Wall -Wextra -W -Wwrite-strings > -Wno-unused-parameter -Wno-long-long -Werror=return-type > -Wno-user-defined-literals -Wno-covered-switch-default -Wno-error -fPIC -MMD > -MT projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -MF > projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o.d -o > projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -c > /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp > /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp:102:5: > error: use of undeclared identifier 'gettimeofday' > gettimeofday(&tv, 0); > ^ > > The interesting flag in there is probably -mmacosx-version-min=10.11. Any > thoughts on what's going wrong? > > On Mon, Jan 9, 2017 at 11:21 AM, Bruno Cardoso Lopes via cfe-commits > wrote: >> >> Author: bruno >> Date: Mon Jan 9 13:21:48 2017 >> New Revision: 291466 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=291466&view=rev >> Log: >> [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW >> >> Use CLOCK_UPTIME_RAW in case clock_gettime is available on Darwin. >> >> On Apple platforms only CLOCK_UPTIME_RAW or mach_absolute_time are able >> to time functions in the nanosecond range. Thus, they are the only >> acceptable implementations of steady_clock. >> >> Differential Revision: https://reviews.llvm.org/D27429 >> >> rdar://problem/29449467 >> >> Modified: >> libcxx/trunk/src/chrono.cpp >> >> Modified: libcxx/trunk/src/chrono.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/chrono.cpp?rev=291466&r1=291465&r2=291466&view=diff >> >> == >> --- libcxx/trunk/src/chrono.cpp (original) >> +++ libcxx/trunk/src/chrono.cpp Mon Jan 9 13:21:48 2017 >> @@ -12,6 +12,28 @@ >> #include "system_error" // __throw_system_error >> #include // clock_gettime, CLOCK_MONOTONIC and >> CLOCK_REALTIME >> >> +#if (__APPLE__) >> +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) >> +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101200 >> +#define _LIBCXX_USE_CLOCK_GETTIME >> +#endif >> +#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) >> +#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 10 >> +#define _LIBCXX_USE_CLOCK_GETTIME >> +#endif >> +#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) >> +#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 10 >> +#define _LIBCXX_USE_CLOCK_GETTIME >> +#endif >> +#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) >> +#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 3 >> +#define _LIBCXX_USE_CLOCK_GETTIME >> +#endif >> +#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__ >> +#else >> +#define _LIBCXX_USE_CLOCK_GETTIME >> +#endif // __APPLE__ >> + >> #if defined(_LIBCPP_WIN32API) >> #define WIN32_LEAN_AND_MEAN >> #define VC_EXTRA_LEAN >> @@ -70,16 +92,16 @@ system_clock::now() _NOEXCEPT >> static_cast<__int64>(ft.dwLowDateTime)}; >>return time_point(duration_cast(d - nt_to_unix_epoch)); >> #else >> -#ifdef CLOCK_REALTIME >> +#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) >> struct timespec tp; >> if (0 != clock_gettime(CLOCK_REALTIME, &tp)) >> __throw_system_error(errno, "clock_gettime(CLOCK_REALTIME) >> failed"); >> return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec / >> 1000)); >> -#else // !CLOCK_REALTIME >> +#else >> timeval tv; >> gettimeofday(&tv, 0); >> return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec)); >> -#endif // CLOCK_REALTIME >> +#endif // _LIBCXX_USE_CLOCK_GETTIME && CLOCK_RE
Re: [libcxx] r291466 - [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW
This appears to have broken the Chromium build: https://build.chromium.org/p/chromium.fyi/builders/ClangToTMac/builds/12620/steps/gclient%20runhooks/logs/stdio FAILED: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o /Applications/Xcode8.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -D_DEBUG -D_LIBCPP_BUILDING_LIBRARY -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Iprojects/libcxx/lib -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/lib -Iinclude -I/b/c/b/ClangToTMac/src/third_party/llvm/include -I/b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/include -DLLVM_FORCE_HEAD_REVISION -fPIC -fvisibility-inlines-hidden -Wall -W -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wno-long-long -Wcovered-switch-default -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -Werror=date-time -std=c++11 -fcolor-diagnostics -O3 -isysroot /Applications/Xcode8.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -mmacosx-version-min=10.11-UNDEBUG -std=c++11 -nostdinc++ -fvisibility-inlines-hidden -Wall -Wextra -W -Wwrite-strings -Wno-unused-parameter -Wno-long-long -Werror=return-type -Wno-user-defined-literals -Wno-covered-switch-default -Wno-error -fPIC -MMD -MT projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -MF projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o.d -o projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/chrono.cpp.o -c /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp /b/c/b/ClangToTMac/src/third_party/llvm/projects/libcxx/src/chrono.cpp:102:5: error: use of undeclared identifier 'gettimeofday' gettimeofday(&tv, 0); ^ The interesting flag in there is probably -mmacosx-version-min=10.11. Any thoughts on what's going wrong? On Mon, Jan 9, 2017 at 11:21 AM, Bruno Cardoso Lopes via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: bruno > Date: Mon Jan 9 13:21:48 2017 > New Revision: 291466 > > URL: http://llvm.org/viewvc/llvm-project?rev=291466&view=rev > Log: > [Chrono][Darwin] Make steady_clock use CLOCK_UPTIME_RAW > > Use CLOCK_UPTIME_RAW in case clock_gettime is available on Darwin. > > On Apple platforms only CLOCK_UPTIME_RAW or mach_absolute_time are able > to time functions in the nanosecond range. Thus, they are the only > acceptable implementations of steady_clock. > > Differential Revision: https://reviews.llvm.org/D27429 > > rdar://problem/29449467 > > Modified: > libcxx/trunk/src/chrono.cpp > > Modified: libcxx/trunk/src/chrono.cpp > URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/ > chrono.cpp?rev=291466&r1=291465&r2=291466&view=diff > > == > --- libcxx/trunk/src/chrono.cpp (original) > +++ libcxx/trunk/src/chrono.cpp Mon Jan 9 13:21:48 2017 > @@ -12,6 +12,28 @@ > #include "system_error" // __throw_system_error > #include // clock_gettime, CLOCK_MONOTONIC and > CLOCK_REALTIME > > +#if (__APPLE__) > +#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) > +#if __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 101200 > +#define _LIBCXX_USE_CLOCK_GETTIME > +#endif > +#elif defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) > +#if __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ >= 10 > +#define _LIBCXX_USE_CLOCK_GETTIME > +#endif > +#elif defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) > +#if __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ >= 10 > +#define _LIBCXX_USE_CLOCK_GETTIME > +#endif > +#elif defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) > +#if __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ >= 3 > +#define _LIBCXX_USE_CLOCK_GETTIME > +#endif > +#endif // __ENVIRONMENT_.*_VERSION_MIN_REQUIRED__ > +#else > +#define _LIBCXX_USE_CLOCK_GETTIME > +#endif // __APPLE__ > + > #if defined(_LIBCPP_WIN32API) > #define WIN32_LEAN_AND_MEAN > #define VC_EXTRA_LEAN > @@ -70,16 +92,16 @@ system_clock::now() _NOEXCEPT > static_cast<__int64>(ft.dwLowDateTime)}; >return time_point(duration_cast(d - nt_to_unix_epoch)); > #else > -#ifdef CLOCK_REALTIME > +#if defined(_LIBCXX_USE_CLOCK_GETTIME) && defined(CLOCK_REALTIME) > struct timespec tp; > if (0 != clock_gettime(CLOCK_REALTIME, &tp)) > __throw_system_error(errno, "clock_gettime(CLOCK_REALTIME) > failed"); > return time_point(seconds(tp.tv_sec) + microseconds(tp.tv_nsec / > 1000)); > -#else // !CLOCK_REALTIME > +#else > timeval tv; > gettimeofday(&tv, 0); > return time_point(seconds(tv.tv_sec) + microseconds(tv.tv_usec)); > -#endif // CLOCK_REALTIME > +#endif // _LIBCXX_USE_CLOCK_GETTIME && CLOCK_REALTIME > #endif > } > > @@ -106,6 +128,18 @@ const bool steady_clock::is_steady; > > #if defined(__APPLE__) > > +// Darwin libc versions >= 1133 provide ns precision via CLOCK_UPTIME_RAW