xref: /aosp_15_r20/external/swiftshader/third_party/SPIRV-Tools/source/print.cpp (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
1*03ce13f7SAndroid Build Coastguard Worker // Copyright (c) 2015-2016 The Khronos Group Inc.
2*03ce13f7SAndroid Build Coastguard Worker //
3*03ce13f7SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*03ce13f7SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*03ce13f7SAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*03ce13f7SAndroid Build Coastguard Worker //
7*03ce13f7SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
8*03ce13f7SAndroid Build Coastguard Worker //
9*03ce13f7SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*03ce13f7SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*03ce13f7SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*03ce13f7SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*03ce13f7SAndroid Build Coastguard Worker // limitations under the License.
14*03ce13f7SAndroid Build Coastguard Worker 
15*03ce13f7SAndroid Build Coastguard Worker #include "source/print.h"
16*03ce13f7SAndroid Build Coastguard Worker 
17*03ce13f7SAndroid Build Coastguard Worker #if defined(SPIRV_ANDROID) || defined(SPIRV_LINUX) || defined(SPIRV_MAC) || \
18*03ce13f7SAndroid Build Coastguard Worker     defined(SPIRV_IOS) || defined(SPIRV_TVOS) || defined(SPIRV_FREEBSD) ||  \
19*03ce13f7SAndroid Build Coastguard Worker     defined(SPIRV_OPENBSD) || defined(SPIRV_EMSCRIPTEN) ||                  \
20*03ce13f7SAndroid Build Coastguard Worker     defined(SPIRV_FUCHSIA) || defined(SPIRV_GNU) || defined(SPIRV_QNX)
21*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
22*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()23*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() { return "\x1b[0m"; }
24*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()25*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() { return "\x1b[1;30m"; }
26*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()27*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() { return "\x1b[31m"; }
28*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()29*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() { return "\x1b[32m"; }
30*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()31*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() { return "\x1b[33m"; }
32*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()33*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() { return "\x1b[34m"; }
34*03ce13f7SAndroid Build Coastguard Worker 
35*03ce13f7SAndroid Build Coastguard Worker }  // namespace spvtools
36*03ce13f7SAndroid Build Coastguard Worker #elif defined(SPIRV_WINDOWS)
37*03ce13f7SAndroid Build Coastguard Worker #include <windows.h>
38*03ce13f7SAndroid Build Coastguard Worker 
39*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
40*03ce13f7SAndroid Build Coastguard Worker 
SetConsoleForegroundColorPrimary(HANDLE hConsole,WORD color)41*03ce13f7SAndroid Build Coastguard Worker static void SetConsoleForegroundColorPrimary(HANDLE hConsole, WORD color) {
42*03ce13f7SAndroid Build Coastguard Worker   // Get screen buffer information from console handle
43*03ce13f7SAndroid Build Coastguard Worker   CONSOLE_SCREEN_BUFFER_INFO bufInfo;
44*03ce13f7SAndroid Build Coastguard Worker   GetConsoleScreenBufferInfo(hConsole, &bufInfo);
45*03ce13f7SAndroid Build Coastguard Worker 
46*03ce13f7SAndroid Build Coastguard Worker   // Get background color
47*03ce13f7SAndroid Build Coastguard Worker   color = WORD(color | (bufInfo.wAttributes & 0xfff0));
48*03ce13f7SAndroid Build Coastguard Worker 
49*03ce13f7SAndroid Build Coastguard Worker   // Set foreground color
50*03ce13f7SAndroid Build Coastguard Worker   SetConsoleTextAttribute(hConsole, color);
51*03ce13f7SAndroid Build Coastguard Worker }
52*03ce13f7SAndroid Build Coastguard Worker 
SetConsoleForegroundColor(WORD color)53*03ce13f7SAndroid Build Coastguard Worker static void SetConsoleForegroundColor(WORD color) {
54*03ce13f7SAndroid Build Coastguard Worker   SetConsoleForegroundColorPrimary(GetStdHandle(STD_OUTPUT_HANDLE), color);
55*03ce13f7SAndroid Build Coastguard Worker   SetConsoleForegroundColorPrimary(GetStdHandle(STD_ERROR_HANDLE), color);
56*03ce13f7SAndroid Build Coastguard Worker }
57*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()58*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() {
59*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
60*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(0xf);
61*03ce13f7SAndroid Build Coastguard Worker     return "";
62*03ce13f7SAndroid Build Coastguard Worker   }
63*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[0m";
64*03ce13f7SAndroid Build Coastguard Worker }
65*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()66*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() {
67*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
68*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(FOREGROUND_INTENSITY);
69*03ce13f7SAndroid Build Coastguard Worker     return "";
70*03ce13f7SAndroid Build Coastguard Worker   }
71*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[1;30m";
72*03ce13f7SAndroid Build Coastguard Worker }
73*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()74*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() {
75*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
76*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(FOREGROUND_RED);
77*03ce13f7SAndroid Build Coastguard Worker     return "";
78*03ce13f7SAndroid Build Coastguard Worker   }
79*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[31m";
80*03ce13f7SAndroid Build Coastguard Worker }
81*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()82*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() {
83*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
84*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(FOREGROUND_GREEN);
85*03ce13f7SAndroid Build Coastguard Worker     return "";
86*03ce13f7SAndroid Build Coastguard Worker   }
87*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[32m";
88*03ce13f7SAndroid Build Coastguard Worker }
89*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()90*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() {
91*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
92*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(FOREGROUND_RED | FOREGROUND_GREEN);
93*03ce13f7SAndroid Build Coastguard Worker     return "";
94*03ce13f7SAndroid Build Coastguard Worker   }
95*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[33m";
96*03ce13f7SAndroid Build Coastguard Worker }
97*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()98*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() {
99*03ce13f7SAndroid Build Coastguard Worker   // Blue all by itself is hard to see against a black background (the
100*03ce13f7SAndroid Build Coastguard Worker   // default on command shell), or a medium blue background (the default
101*03ce13f7SAndroid Build Coastguard Worker   // on PowerShell).  So increase its intensity.
102*03ce13f7SAndroid Build Coastguard Worker 
103*03ce13f7SAndroid Build Coastguard Worker   if (isPrint) {
104*03ce13f7SAndroid Build Coastguard Worker     SetConsoleForegroundColor(FOREGROUND_BLUE | FOREGROUND_INTENSITY);
105*03ce13f7SAndroid Build Coastguard Worker     return "";
106*03ce13f7SAndroid Build Coastguard Worker   }
107*03ce13f7SAndroid Build Coastguard Worker   return "\x1b[94m";
108*03ce13f7SAndroid Build Coastguard Worker }
109*03ce13f7SAndroid Build Coastguard Worker 
110*03ce13f7SAndroid Build Coastguard Worker }  // namespace spvtools
111*03ce13f7SAndroid Build Coastguard Worker #else
112*03ce13f7SAndroid Build Coastguard Worker namespace spvtools {
113*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()114*03ce13f7SAndroid Build Coastguard Worker clr::reset::operator const char*() { return ""; }
115*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()116*03ce13f7SAndroid Build Coastguard Worker clr::grey::operator const char*() { return ""; }
117*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()118*03ce13f7SAndroid Build Coastguard Worker clr::red::operator const char*() { return ""; }
119*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()120*03ce13f7SAndroid Build Coastguard Worker clr::green::operator const char*() { return ""; }
121*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()122*03ce13f7SAndroid Build Coastguard Worker clr::yellow::operator const char*() { return ""; }
123*03ce13f7SAndroid Build Coastguard Worker 
operator const char*()124*03ce13f7SAndroid Build Coastguard Worker clr::blue::operator const char*() { return ""; }
125*03ce13f7SAndroid Build Coastguard Worker 
126*03ce13f7SAndroid Build Coastguard Worker }  // namespace spvtools
127*03ce13f7SAndroid Build Coastguard Worker #endif
128