forked from epiqc/ScaffCC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscaffold.cpp
62 lines (50 loc) · 1.85 KB
/
scaffold.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include "llvm/Support/Host.h"
#include "llvm/ADT/IntrusiveRefCntPtr.h"
#include "clang/Frontend/DiagnosticOptions.h"
#include "clang/Frontend/TextDiagnosticPrinter.h"
#include "clang/Frontend/CompilerInstance.h"
#include "clang/Basic/TargetOptions.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Basic/FileManager.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/Parse/ParseAST.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/AST/ASTContext.h"
int main(int argc, char *argv[]) {
using clang::CompilerInstance;
using clang::TargetOptions;
using clang::TargetInfo;
using clang::FileEntry;
using clang::ASTConsumer;
using clang::DiagnosticOptions;
using clang::TextDiagnosticPrinter;
CompilerInstance CI;
DiagnosticOptions diagnosticOptions;
TextDiagnosticPrinter *pTextDiagnosticPrinter =
new TextDiagnosticPrinter(
llvm::outs(), diagnosticOptions, true);
CI.createDiagnostics(0, NULL, pTextDiagnosticPrinter);
TargetOptions targetOptions;
targetOptions.Triple = llvm::sys::getDefaultTargetTriple();
TargetInfo *pTargetInfo = TargetInfo::CreateTargetInfo(
CI.getDiagnostics(), targetOptions);
CI.setTarget(pTargetInfo);
CI.createFileManager();
CI.createSourceManager(CI.getFileManager());
CI.createPreprocessor();
CI.getPreprocessorOpts().UsePredefines = false;
ASTConsumer *astConsumer = new ASTConsumer();
CI.setASTConsumer(astConsumer);
CI.createASTContext();
CI.createSema(clang::TU_Complete, NULL);
const FileEntry *pFile = CI.getFileManager().getFile(argv[1]);
CI.getSourceManager().createMainFileID(pFile);
CI.getASTContext().BuiltinInfo.InitializeBuiltins(
CI.getPreprocessor().getIdentifierTable(), CI.getLangOpts());
CI.getDiagnosticClient().BeginSourceFile(
CI.getLangOpts(), &(CI.getPreprocessor()));
clang::ParseAST(CI.getSema());
CI.getDiagnosticClient().EndSourceFile();
return 0;
}