1b8e80941Smrg/*
2b8e80941Smrg * Copyright © 2017 Google, Inc.
3b8e80941Smrg *
4b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a
5b8e80941Smrg * copy of this software and associated documentation files (the "Software"),
6b8e80941Smrg * to deal in the Software without restriction, including without limitation
7b8e80941Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8b8e80941Smrg * and/or sell copies of the Software, and to permit persons to whom the
9b8e80941Smrg * Software is furnished to do so, subject to the following conditions:
10b8e80941Smrg *
11b8e80941Smrg * The above copyright notice and this permission notice (including the next
12b8e80941Smrg * paragraph) shall be included in all copies or substantial portions of the
13b8e80941Smrg * Software.
14b8e80941Smrg *
15b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16b8e80941Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17b8e80941Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18b8e80941Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19b8e80941Smrg * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20b8e80941Smrg * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21b8e80941Smrg * IN THE SOFTWARE.
22b8e80941Smrg */
23b8e80941Smrg
24b8e80941Smrg#include <stdarg.h>
25b8e80941Smrg
26b8e80941Smrg#ifdef ANDROID
27b8e80941Smrg#include <android/log.h>
28b8e80941Smrg#else
29b8e80941Smrg#include <stdio.h>
30b8e80941Smrg#endif
31b8e80941Smrg
32b8e80941Smrg#include "intel_log.h"
33b8e80941Smrg
34b8e80941Smrg#ifdef ANDROID
35b8e80941Smrgstatic inline android_LogPriority
36b8e80941Smrglevel_to_android(enum intel_log_level l)
37b8e80941Smrg{
38b8e80941Smrg   switch (l) {
39b8e80941Smrg   case INTEL_LOG_ERROR: return ANDROID_LOG_ERROR;
40b8e80941Smrg   case INTEL_LOG_WARN: return ANDROID_LOG_WARN;
41b8e80941Smrg   case INTEL_LOG_INFO: return ANDROID_LOG_INFO;
42b8e80941Smrg   case INTEL_LOG_DEBUG: return ANDROID_LOG_DEBUG;
43b8e80941Smrg   }
44b8e80941Smrg
45b8e80941Smrg   unreachable("bad intel_log_level");
46b8e80941Smrg}
47b8e80941Smrg#endif
48b8e80941Smrg
49b8e80941Smrg#ifndef ANDROID
50b8e80941Smrgstatic inline const char *
51b8e80941Smrglevel_to_str(enum intel_log_level l)
52b8e80941Smrg{
53b8e80941Smrg   switch (l) {
54b8e80941Smrg   case INTEL_LOG_ERROR: return "error";
55b8e80941Smrg   case INTEL_LOG_WARN: return "warning";
56b8e80941Smrg   case INTEL_LOG_INFO: return "info";
57b8e80941Smrg   case INTEL_LOG_DEBUG: return "debug";
58b8e80941Smrg   }
59b8e80941Smrg
60b8e80941Smrg   unreachable("bad intel_log_level");
61b8e80941Smrg}
62b8e80941Smrg#endif
63b8e80941Smrg
64b8e80941Smrgvoid
65b8e80941Smrgintel_log(enum intel_log_level level, const char *tag, const char *format, ...)
66b8e80941Smrg{
67b8e80941Smrg   va_list va;
68b8e80941Smrg
69b8e80941Smrg   va_start(va, format);
70b8e80941Smrg   intel_log_v(level, tag, format, va);
71b8e80941Smrg   va_end(va);
72b8e80941Smrg}
73b8e80941Smrg
74b8e80941Smrgvoid
75b8e80941Smrgintel_log_v(enum intel_log_level level, const char *tag, const char *format,
76b8e80941Smrg            va_list va)
77b8e80941Smrg{
78b8e80941Smrg#ifdef ANDROID
79b8e80941Smrg   __android_log_vprint(level_to_android(level), tag, format, va);
80b8e80941Smrg#else
81b8e80941Smrg   flockfile(stderr);
82b8e80941Smrg   fprintf(stderr, "%s: %s: ", tag, level_to_str(level));
83b8e80941Smrg   vfprintf(stderr, format, va);
84b8e80941Smrg   fprintf(stderr, "\n");
85b8e80941Smrg   funlockfile(stderr);
86b8e80941Smrg#endif
87b8e80941Smrg}
88