Index: include/__config =================================================================== --- include/__config +++ include/__config @@ -639,6 +639,11 @@ # define _LIBCPP_TRIVIAL_PAIR_COPY_CTOR 1 #endif +#if (defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0) && \ + (defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK > 0) +#define _LIBCPP_HAS_MONOTONIC_CLOCK 1 +#endif + #ifndef _LIBCPP_STD_VER # if __cplusplus <= 201103L # define _LIBCPP_STD_VER 11 Index: include/chrono =================================================================== --- include/chrono +++ include/chrono @@ -926,6 +926,7 @@ static time_point from_time_t(time_t __t) _NOEXCEPT; }; +#if _LIBCPP_HAS_MONOTONIC_CLOCK class _LIBCPP_TYPE_VIS steady_clock { public: @@ -939,6 +940,9 @@ }; typedef steady_clock high_resolution_clock; +#else +typedef system_clock high_resolution_clock; +#endif } // chrono Index: libcxx/test/lit.site.cfg =================================================================== --- libcxx/test/lit.site.cfg +++ libcxx/test/lit.site.cfg @@ -8,7 +8,7 @@ config.cxx_abi = "libcxxabi" config.use_system_lib = "False" config.target_triple = "arm-none-eabi" -config.available_features = ['newlib'] +config.available_features = ['newlib', 'no-monotonic-clock'] # Let the main config do the real work. lit_config.load_config(config, "/Users/jroelofs/workdir/mentor/cs-llvm/libcxx/test/lit.cfg") Index: libcxx/test/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp =================================================================== --- libcxx/test/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp +++ libcxx/test/utilities/time/time.clock/time.clock.steady/consistency.pass.cpp @@ -11,6 +11,7 @@ // darwin11 and darwin12: // XFAIL: with_system_lib=x86_64-apple-darwin11 // XFAIL: with_system_lib=x86_64-apple-darwin12 +// XFAIL: no-monotonic-clock // Index: libcxx/test/utilities/time/time.clock/time.clock.steady/now.pass.cpp =================================================================== --- libcxx/test/utilities/time/time.clock/time.clock.steady/now.pass.cpp +++ libcxx/test/utilities/time/time.clock/time.clock.steady/now.pass.cpp @@ -6,6 +6,8 @@ // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// +// +// XFAIL: no-monotonic-clock // Index: src/chrono.cpp =================================================================== --- src/chrono.cpp +++ src/chrono.cpp @@ -46,6 +46,7 @@ return system_clock::time_point(seconds(t)); } +#if _LIBCPP_HAS_MONOTONIC_CLOCK // steady_clock const bool steady_clock::is_steady; @@ -108,11 +109,6 @@ } #else // __APPLE__ -// FIXME: We assume that clock_gettime(CLOCK_MONOTONIC) works on -// non-apple systems. Instead, we should check _POSIX_TIMERS and -// _POSIX_MONOTONIC_CLOCK and fall back to something else if those -// don't exist. - // Warning: If this is not truly steady, then it is non-conforming. It is // better for it to not exist and have the rest of libc++ use system_clock // instead. @@ -127,6 +123,8 @@ } #endif // __APPLE__ +#endif // _LIBCPP_HAS_MONOTONIC_CLOCK + } _LIBCPP_END_NAMESPACE_STD