mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-29 20:14:01 +00:00
Fix std::chrono/date conflict for mac builds with C++20 (#22138)
### Description Fix usage of c++ std::chrono::operator<< in mac builds for wider range of xcode/targets. ### Motivation and Context #21033
This commit is contained in:
parent
da3bd45cdd
commit
d4692835bf
3 changed files with 36 additions and 6 deletions
|
|
@ -58,15 +58,42 @@ namespace logging {
|
|||
|
||||
using Timestamp = std::chrono::time_point<std::chrono::system_clock>;
|
||||
|
||||
// TODO: When other compilers support std::chrono::operator<<, update this.
|
||||
// TODO: Check support for other compilers' version before enable C++20 for other compilers.
|
||||
// Xcode added support for C++20's std::chrono::operator<< in SDK version 14.4.
|
||||
#if __cplusplus >= 202002L && __MAC_OS_X_VERSION_MAX_ALLOWED >= 140400L
|
||||
// C++20 has operator<< in std::chrono for Timestamp type but mac builds need additional checks
|
||||
// to ensure usage is valid.
|
||||
// TODO: As we enable C++20 on other platforms we may need similar checks.
|
||||
// define a temporary value to determine whether to use the std::chrono or date implementation.
|
||||
#define ORT_USE_CXX20_STD_CHRONO __cplusplus >= 202002L
|
||||
|
||||
// Apply constraints for mac builds
|
||||
#if __APPLE__
|
||||
#include <TargetConditionals.h>
|
||||
|
||||
// Catalyst check must be first as it has both TARGET_OS_MACCATALYST and TARGET_OS_MAC set
|
||||
#if TARGET_OS_MACCATALYST
|
||||
// maccatalyst requires version 16.3
|
||||
#if (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 160300)
|
||||
#undef ORT_USE_CXX20_STD_CHRONO
|
||||
#endif
|
||||
|
||||
#elif TARGET_OS_MAC
|
||||
// Xcode added support for C++20's std::chrono::operator<< in SDK version 14.4,
|
||||
// but the target macOS version must also be >= 13.3 for it to be used.
|
||||
#if (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && __MAC_OS_X_VERSION_MAX_ALLOWED < 140400) || \
|
||||
(defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 130300)
|
||||
#undef ORT_USE_CXX20_STD_CHRONO
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif // __APPLE__
|
||||
|
||||
#if ORT_USE_CXX20_STD_CHRONO
|
||||
namespace timestamp_ns = std::chrono;
|
||||
#else
|
||||
namespace timestamp_ns = ::date;
|
||||
#endif
|
||||
|
||||
#undef ORT_USE_CXX20_STD_CHRONO
|
||||
|
||||
#ifndef NDEBUG
|
||||
ORT_ATTRIBUTE_UNUSED static bool vlog_enabled = true; // Set directly based on your needs.
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -45,7 +45,8 @@ void OStreamSink::SendImpl(const Timestamp& timestamp, const std::string& logger
|
|||
}
|
||||
#endif
|
||||
|
||||
msg << timestamp << " [" << message.SeverityPrefix() << ":" << message.Category() << ":" << logger_id << ", "
|
||||
timestamp_ns::operator<<(msg, timestamp); // handle ambiguity with C++20 where date and std::chrono have operator<<
|
||||
msg << " [" << message.SeverityPrefix() << ":" << message.Category() << ":" << logger_id << ", "
|
||||
<< message.Location().ToString() << "] " << message.Message();
|
||||
|
||||
#ifndef ORT_MINIMAL_BUILD
|
||||
|
|
|
|||
|
|
@ -15,7 +15,9 @@ namespace logging {
|
|||
void AppleLogSink::SendImpl(const Timestamp& timestamp, const std::string& logger_id, const Capture& message) {
|
||||
using timestamp_ns::operator<<;
|
||||
std::ostringstream msg;
|
||||
msg << timestamp << " [" << message.SeverityPrefix() << ":" << message.Category() << ":" << logger_id << ", "
|
||||
|
||||
timestamp_ns::operator<<(msg, timestamp); // handle ambiguity with C++20 where date and std::chrono have operator<<
|
||||
msg << " [" << message.SeverityPrefix() << ":" << message.Category() << ":" << logger_id << ", "
|
||||
<< message.Location().ToString() << "] " << message.Message();
|
||||
NSLog(@"%s", msg.str().c_str());
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue