1*0fca6ea1SDimitry Andric //===- DiagnosticBuilderWrappers.cpp ----------------------------*- C++-*-===// 2*0fca6ea1SDimitry Andric // 3*0fca6ea1SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0fca6ea1SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0fca6ea1SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0fca6ea1SDimitry Andric // 7*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 8*0fca6ea1SDimitry Andric 9*0fca6ea1SDimitry Andric #include "DiagnosticBuilderWrappers.h" 10*0fca6ea1SDimitry Andric #include "llvm/ADT/STLExtras.h" 11*0fca6ea1SDimitry Andric #include "llvm/ADT/SmallString.h" 12*0fca6ea1SDimitry Andric #include "llvm/Support/raw_ostream.h" 13*0fca6ea1SDimitry Andric #include "llvm/TextAPI/Platform.h" 14*0fca6ea1SDimitry Andric 15*0fca6ea1SDimitry Andric using clang::DiagnosticBuilder; 16*0fca6ea1SDimitry Andric 17*0fca6ea1SDimitry Andric namespace llvm { 18*0fca6ea1SDimitry Andric namespace MachO { 19*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 20*0fca6ea1SDimitry Andric const Architecture &Arch) { 21*0fca6ea1SDimitry Andric DB.AddString(getArchitectureName(Arch)); 22*0fca6ea1SDimitry Andric return DB; 23*0fca6ea1SDimitry Andric } 24*0fca6ea1SDimitry Andric 25*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 26*0fca6ea1SDimitry Andric const ArchitectureSet &ArchSet) { 27*0fca6ea1SDimitry Andric DB.AddString(std::string(ArchSet)); 28*0fca6ea1SDimitry Andric return DB; 29*0fca6ea1SDimitry Andric } 30*0fca6ea1SDimitry Andric 31*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 32*0fca6ea1SDimitry Andric const PlatformType &Platform) { 33*0fca6ea1SDimitry Andric DB.AddString(getPlatformName(Platform)); 34*0fca6ea1SDimitry Andric return DB; 35*0fca6ea1SDimitry Andric } 36*0fca6ea1SDimitry Andric 37*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 38*0fca6ea1SDimitry Andric const PlatformVersionSet &Platforms) { 39*0fca6ea1SDimitry Andric std::string PlatformAsString; 40*0fca6ea1SDimitry Andric raw_string_ostream Stream(PlatformAsString); 41*0fca6ea1SDimitry Andric 42*0fca6ea1SDimitry Andric Stream << "[ "; 43*0fca6ea1SDimitry Andric llvm::interleaveComma( 44*0fca6ea1SDimitry Andric Platforms, Stream, 45*0fca6ea1SDimitry Andric [&Stream](const std::pair<PlatformType, VersionTuple> &PV) { 46*0fca6ea1SDimitry Andric Stream << getPlatformName(PV.first); 47*0fca6ea1SDimitry Andric if (!PV.second.empty()) 48*0fca6ea1SDimitry Andric Stream << PV.second.getAsString(); 49*0fca6ea1SDimitry Andric }); 50*0fca6ea1SDimitry Andric Stream << " ]"; 51*0fca6ea1SDimitry Andric DB.AddString(PlatformAsString); 52*0fca6ea1SDimitry Andric return DB; 53*0fca6ea1SDimitry Andric } 54*0fca6ea1SDimitry Andric 55*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 56*0fca6ea1SDimitry Andric const FileType &Type) { 57*0fca6ea1SDimitry Andric switch (Type) { 58*0fca6ea1SDimitry Andric case FileType::MachO_Bundle: 59*0fca6ea1SDimitry Andric DB.AddString("mach-o bundle"); 60*0fca6ea1SDimitry Andric return DB; 61*0fca6ea1SDimitry Andric case FileType::MachO_DynamicLibrary: 62*0fca6ea1SDimitry Andric DB.AddString("mach-o dynamic library"); 63*0fca6ea1SDimitry Andric return DB; 64*0fca6ea1SDimitry Andric case FileType::MachO_DynamicLibrary_Stub: 65*0fca6ea1SDimitry Andric DB.AddString("mach-o dynamic library stub"); 66*0fca6ea1SDimitry Andric return DB; 67*0fca6ea1SDimitry Andric case FileType::TBD_V1: 68*0fca6ea1SDimitry Andric DB.AddString("tbd-v1"); 69*0fca6ea1SDimitry Andric return DB; 70*0fca6ea1SDimitry Andric case FileType::TBD_V2: 71*0fca6ea1SDimitry Andric DB.AddString("tbd-v2"); 72*0fca6ea1SDimitry Andric return DB; 73*0fca6ea1SDimitry Andric case FileType::TBD_V3: 74*0fca6ea1SDimitry Andric DB.AddString("tbd-v3"); 75*0fca6ea1SDimitry Andric return DB; 76*0fca6ea1SDimitry Andric case FileType::TBD_V4: 77*0fca6ea1SDimitry Andric DB.AddString("tbd-v4"); 78*0fca6ea1SDimitry Andric return DB; 79*0fca6ea1SDimitry Andric case FileType::TBD_V5: 80*0fca6ea1SDimitry Andric DB.AddString("tbd-v5"); 81*0fca6ea1SDimitry Andric return DB; 82*0fca6ea1SDimitry Andric case FileType::Invalid: 83*0fca6ea1SDimitry Andric case FileType::All: 84*0fca6ea1SDimitry Andric break; 85*0fca6ea1SDimitry Andric } 86*0fca6ea1SDimitry Andric llvm_unreachable("Unexpected file type for diagnostics."); 87*0fca6ea1SDimitry Andric } 88*0fca6ea1SDimitry Andric 89*0fca6ea1SDimitry Andric const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, 90*0fca6ea1SDimitry Andric const PackedVersion &Version) { 91*0fca6ea1SDimitry Andric std::string VersionString; 92*0fca6ea1SDimitry Andric raw_string_ostream OS(VersionString); 93*0fca6ea1SDimitry Andric OS << Version; 94*0fca6ea1SDimitry Andric DB.AddString(VersionString); 95*0fca6ea1SDimitry Andric return DB; 96*0fca6ea1SDimitry Andric } 97*0fca6ea1SDimitry Andric 98*0fca6ea1SDimitry Andric const clang::DiagnosticBuilder & 99*0fca6ea1SDimitry Andric operator<<(const clang::DiagnosticBuilder &DB, 100*0fca6ea1SDimitry Andric const StringMapEntry<ArchitectureSet> &LibAttr) { 101*0fca6ea1SDimitry Andric std::string IFAsString; 102*0fca6ea1SDimitry Andric raw_string_ostream OS(IFAsString); 103*0fca6ea1SDimitry Andric 104*0fca6ea1SDimitry Andric OS << LibAttr.getKey() << " [ " << LibAttr.getValue() << " ]"; 105*0fca6ea1SDimitry Andric DB.AddString(IFAsString); 106*0fca6ea1SDimitry Andric return DB; 107*0fca6ea1SDimitry Andric } 108*0fca6ea1SDimitry Andric 109*0fca6ea1SDimitry Andric } // namespace MachO 110*0fca6ea1SDimitry Andric } // namespace llvm 111