12#define DETRAY_EMPTY_LOG() \
16#if DETRAY_LOG_LVL >= 0
19#include "detray/definitions/detail/qualifiers.hpp"
20#include "detray/utils/type_list.hpp"
27#include <source_location>
30namespace detray::log::detail {
35constexpr const char *source_file_name(
const char *path) {
36 const char *file = path;
47inline std::string_view process_typename() {
48 static const std::string type_name = [] {
51 s = detray::types::demangle_type_name<T>();
53 return std::string{
"unknown"};
57 return std::string{
"unknown"};
60 std::regex re{
"detray::"};
61 s = std::regex_replace(s, re,
"");
65 std::regex re_list{R
"(^types::list<(.*)>$)"};
67 if (std::smatch match; std::regex_match(s, match, re_list)) {
68 s =
"[" + std::string{match[1]} +
"]";
80#if defined(__CUDACC__) || defined(__HIP__) || \
81 defined(CL_SYCL_LANGUAGE_VERSION) || defined(SYCL_LANGUAGE_VERSION)
82#define __DEVICE_LOGGING__
86#if defined(__CUDACC__)
87#define __BACKEND__ "CUDA"
89#define __BACKEND__ "HIP"
90#elif defined(CL_SYCL_LANGUAGE_VERSION) || defined(SYCL_LANGUAGE_VERSION)
91#define __BACKEND__ "SYCL"
93#define __BACKEND__ "HOST"
97#ifdef __DEVICE_LOGGING__
98#define DETRAY_TYPENAME(type) "unknown type"
100#define DETRAY_TYPENAME(type) detray::log::detail::process_typename<type>()
104#ifdef __DEVICE_LOGGING__
105#define __FILENAME__ detray::log::detail::source_file_name(__FILE__)
107#define __FILENAME__ \
108 (std::strrchr(__FILE__, '/') ? std::strrchr(__FILE__, '/') + 1 : __FILE__)
112#ifdef __DEVICE_LOGGING__
113#define DETRAY_LOG_VECTOR(x) ""
115#define DETRAY_LOG_VECTOR(x) \
117 std::stringstream _vec_os; \
118 std::size_t _vec_i = 0; \
119 for (const auto &_vec_elem : x) { \
123 _vec_os << _vec_elem; \
126 return _vec_os.str(); \
131#ifndef __DEVICE_LOGGING__
133#define DETRAY_LOG_STREAM(stream, lib, lvl, x) \
134 std::stream << lib << " " << std::left << std::setw(7) << lvl << std::left \
135 << std::setw(9) << " (HOST):" << std::left << std::setw(29) \
136 << __FILENAME__ << "l." << std::left << std::setw(5) \
137 << std::source_location::current().line() << x << std::endl
140#define DETRAY_LOG_STREAM_STDOUT(lib, lvl, x) \
141 DETRAY_LOG_STREAM(cout, lib, lvl, x)
144#define DETRAY_LOG_STREAM_STDERR(lib, lvl, x) \
145 DETRAY_LOG_STREAM(clog, lib, lvl, x)
148#define DETRAY_LOG_STREAM_STDOUT(lib, lvl, x) DETRAY_EMPTY_LOG()
149#define DETRAY_LOG_STREAM_STDERR(lib, lvl, x) DETRAY_EMPTY_LOG()
156#if !defined(CL_SYCL_LANGUAGE_VERSION) && !defined(SYCL_LANGUAGE_VERSION)
158#ifdef __DEVICE_LOGGING__
160#define DETRAY_LOG_PRINTF(lib, lvl, x, ...) \
161 printf("%s %-7s (%s): %-29sl.%-5d" x "\n", lib, lvl, __BACKEND__, \
162 __FILENAME__, __LINE__ __VA_OPT__(, ) __VA_ARGS__)
164#define DETRAY_LOG_PRINTF_STDOUT(lib, lvl, x, ...) \
165 DETRAY_LOG_PRINTF(lib, lvl, x, __VA_ARGS__)
167#define DETRAY_LOG_PRINTF_STDERR(lib, lvl, x, ...) \
168 DETRAY_LOG_PRINTF(lib, lvl, x, __VA_ARGS__)
172#define DETRAY_LOG_PRINTF(stream, lib, lvl, x, ...) \
173 fprintf(stream, "%s %-7s (%s): %-29sl.%-5d" x "\n", lib, lvl, __BACKEND__, \
174 __FILENAME__, __LINE__ __VA_OPT__(, ) __VA_ARGS__)
176#define DETRAY_LOG_PRINTF_STDOUT(lib, lvl, x, ...) \
177 DETRAY_LOG_PRINTF(stdout, lib, lvl, x, __VA_ARGS__)
179#define DETRAY_LOG_PRINTF_STDERR(lib, lvl, x, ...) \
180 DETRAY_LOG_PRINTF(stderr, lib, lvl, x, __VA_ARGS__)
185#define DETRAY_LOG_PRINTF_STDOUT(lib, lvl, x, ...) DETRAY_EMPTY_LOG()
186#define DETRAY_LOG_PRINTF_STDERR(lib, lvl, x, ...) DETRAY_EMPTY_LOG()
190#define DETRAY_LOG_STREAM_STDOUT(lib, lvl, x) DETRAY_EMPTY_LOG()
191#define DETRAY_LOG_STREAM_STDERR(lib, lvl, x) DETRAY_EMPTY_LOG()
192#define DETRAY_LOG_PRINTF_STDOUT(lib, lvl, x, ...) DETRAY_EMPTY_LOG()
193#define DETRAY_LOG_PRINTF_STDERR(lib, lvl, x, ...) DETRAY_EMPTY_LOG()
194#define DETRAY_TYPENAME(type) DETRAY_EMPTY_LOG()
202#define DETRAY_FATAL_STREAM(lib, x) DETRAY_LOG_STREAM_STDERR(lib, "FATAL", x)
203#define DETRAY_ERROR_STREAM(lib, x) DETRAY_LOG_STREAM_STDERR(lib, "ERROR", x)
204#define DETRAY_WARN_STREAM(lib, x) DETRAY_LOG_STREAM_STDERR(lib, "WARNING", x)
206#define DETRAY_FATAL_PRINTF(lib, x, ...) \
207 DETRAY_LOG_PRINTF_STDERR(lib, "FATAL", x, __VA_ARGS__)
208#define DETRAY_ERROR_PRINTF(lib, x, ...) \
209 DETRAY_LOG_PRINTF_STDERR(lib, "ERROR", x, __VA_ARGS__)
210#define DETRAY_WARN_PRINTF(lib, x, ...) \
211 DETRAY_LOG_PRINTF_STDERR(lib, "WARNING", x, __VA_ARGS__)
214#if DETRAY_LOG_LVL > 0
215#define DETRAY_INFO_STREAM(lib, x) DETRAY_LOG_STREAM_STDOUT(lib, "INFO", x)
216#define DETRAY_INFO_PRINTF(lib, x, ...) \
217 DETRAY_LOG_PRINTF_STDOUT(lib, "INFO", x, __VA_ARGS__)
219#define DETRAY_INFO_STREAM(lib, x) DETRAY_EMPTY_LOG()
220#define DETRAY_INFO_PRINTF(lib, x, ...) DETRAY_EMPTY_LOG()
224#if DETRAY_LOG_LVL > 1
225#define DETRAY_VERBOSE_STREAM(lib, x) \
226 DETRAY_LOG_STREAM_STDERR(lib, "VERBOSE", x)
227#define DETRAY_VERBOSE_PRINTF(lib, x, ...) \
228 DETRAY_LOG_PRINTF_STDERR(lib, "VERBOSE", x, __VA_ARGS__)
230#define DETRAY_VERBOSE_STREAM(lib, x) DETRAY_EMPTY_LOG()
231#define DETRAY_VERBOSE_PRINTF(lib, x, ...) DETRAY_EMPTY_LOG()
235#if DETRAY_LOG_LVL > 2
236#define DETRAY_DEBUG_STREAM(lib, x) DETRAY_LOG_STREAM_STDERR(lib, "DEBUG", x)
237#define DETRAY_DEBUG_PRINTF(lib, x, ...) \
238 DETRAY_LOG_PRINTF_STDERR(lib, "DEBUG", x, __VA_ARGS__)
240#define DETRAY_DEBUG_STREAM(lib, x) DETRAY_EMPTY_LOG()
241#define DETRAY_DEBUG_PRINTF(lib, x, ...) DETRAY_EMPTY_LOG()
constexpr double s
Definition Units.hpp:120