blob: e955739ee80e90218321f8140058db3fc31d5d12 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*!
* \file runtime/crt/logging.h
* \brief A replacement of the dmlc logging system that avoids
* the usage of GLOG and C++ headers
*/
#ifndef TVM_RUNTIME_CRT_LOGGING_H_
#define TVM_RUNTIME_CRT_LOGGING_H_
#include <tvm/runtime/crt/platform.h>
#define TVM_CRT_LOG_LEVEL_DEBUG 3
#define TVM_CRT_LOG_LEVEL_INFO 2
#define TVM_CRT_LOG_LEVEL_WARN 1
#define TVM_CRT_LOG_LEVEL_ERROR 0
#ifdef __cplusplus
extern "C" {
#endif
void __attribute__((format(printf, 1, 2))) TVMLogf(const char* fmt, ...);
#define LOG(level, x, ...) \
if (TVM_CRT_LOG_LEVEL >= level) { \
TVMLogf(x, ##__VA_ARGS__); \
}
#define LOG_ERROR(x, ...) LOG(TVM_CRT_LOG_LEVEL_ERROR, x, ##__VA_ARGS__)
#define LOG_WARN(x, ...) LOG(TVM_CRT_LOG_LEVEL_WARN, x, ##__VA_ARGS__)
#define LOG_INFO(x, ...) LOG(TVM_CRT_LOG_LEVEL_INFO, x, ##__VA_ARGS__)
#define LOG_DEBUG(x, ...) LOG(TVM_CRT_LOG_LEVEL_DEBUG, x, ##__VA_ARGS__)
#ifndef CHECK
#define CHECK(x) \
do { \
if (!(x)) { \
LOG_ERROR(__FILE__ ":%d: Check failed: %s\n", __LINE__, #x); \
TVMPlatformAbort(kTvmErrorPlatformCheckFailure); \
} \
} while (0)
#endif
#ifndef CHECK_BINARY_OP
#define CHECK_BINARY_OP(op, x, y, fmt, ...) \
do { \
if (!(x op y)) { \
LOG_ERROR(__FILE__ ":%d: Check failed: %s %s %s: " fmt "\n", __LINE__, #x, #op, #y, \
##__VA_ARGS__); \
TVMPlatformAbort(kTvmErrorPlatformCheckFailure); \
} \
} while (0)
#endif
#ifndef CHECK_LT
#define CHECK_LT(x, y, fmt, ...) CHECK_BINARY_OP(<, x, y, fmt, ##__VA_ARGS__)
#endif
#ifndef CHECK_GT
#define CHECK_GT(x, y, fmt, ...) CHECK_BINARY_OP(>, x, y, fmt, ##__VA_ARGS__)
#endif
#ifndef CHECK_LE
#define CHECK_LE(x, y, fmt, ...) CHECK_BINARY_OP(<=, x, y, fmt, ##__VA_ARGS__)
#endif
#ifndef CHECK_GE
#define CHECK_GE(x, y, fmt, ...) CHECK_BINARY_OP(>=, x, y, fmt, ##__VA_ARGS__)
#endif
#ifndef CHECK_EQ
#define CHECK_EQ(x, y, fmt, ...) CHECK_BINARY_OP(==, x, y, fmt, ##__VA_ARGS__)
#endif
#ifndef CHECK_NE
#define CHECK_NE(x, y, fmt, ...) CHECK_BINARY_OP(!=, x, y, fmt, ##__VA_ARGS__)
#endif
#ifdef __cplusplus
} // extern "C"
#endif
#endif // TVM_RUNTIME_CRT_LOGGING_H_