| //===- TableGenBackendSkeleton.cpp - Skeleton TableGen backend --*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // This Tablegen backend emits ... | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "llvm/ADT/StringRef.h" | |
| #include "llvm/TableGen/TableGenBackend.h" | |
| #define DEBUG_TYPE "skeleton-emitter" | |
| namespace llvm { | |
| class RecordKeeper; | |
| class raw_ostream; | |
| } // namespace llvm | |
| using namespace llvm; | |
| namespace { | |
| // Any helper data structures can be defined here. Some backends use | |
| // structs to collect information from the records. | |
| class SkeletonEmitter { | |
| private: | |
| const RecordKeeper &Records; | |
| public: | |
| SkeletonEmitter(const RecordKeeper &RK) : Records(RK) {} | |
| void run(raw_ostream &OS); | |
| }; // emitter class | |
| } // anonymous namespace | |
| void SkeletonEmitter::run(raw_ostream &OS) { | |
| emitSourceFileHeader("Skeleton data structures", OS); | |
| (void)Records; // To suppress unused variable warning; remove on use. | |
| } | |
| // Choose either option A or B. | |
| //===----------------------------------------------------------------------===// | |
| // Option A: Register the backed as class <SkeletonEmitter> | |
| static TableGen::Emitter::OptClass<SkeletonEmitter> | |
| X("gen-skeleton-class", "Generate example skeleton class"); | |
| //===----------------------------------------------------------------------===// | |
| // Option B: Register "EmitSkeleton" directly | |
| // The emitter entry may be private scope. | |
| static void EmitSkeleton(const RecordKeeper &RK, raw_ostream &OS) { | |
| // Instantiate the emitter class and invoke run(). | |
| SkeletonEmitter(RK).run(OS); | |
| } | |
| static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, | |
| "Generate example skeleton entry"); |