void Slang::init(const std::string &Triple, const std::string &CPU, const std::vector<std::string> &Features) { if (mInitialized) return; createDiagnostic(); llvm::install_fatal_error_handler(LLVMErrorHandler, mDiagnostics.getPtr()); createTarget(Triple, CPU, Features); createFileManager(); createSourceManager(); mInitialized = true; return; }
void Slang::init(const std::string &Triple, const std::string &CPU, const std::vector<std::string> &Features, clang::DiagnosticsEngine *DiagEngine, DiagnosticBuffer *DiagClient) { if (mInitialized) return; mDiagEngine = DiagEngine; mDiagClient = DiagClient; mDiag.reset(new clang::Diagnostic(mDiagEngine)); initDiagnostic(); llvm::install_fatal_error_handler(LLVMErrorHandler, mDiagEngine); createTarget(Triple, CPU, Features); createFileManager(); createSourceManager(); mInitialized = true; }
std::unique_ptr<CompilerInstance> BuildCompilerInstance(ArrayRef<const char *> ClangArgv) { auto Ins = llvm::make_unique<CompilerInstance>(); auto DC = llvm::make_unique<TestDiagnosticConsumer>(); const bool ShouldOwnClient = true; Ins->createDiagnostics(DC.release(), ShouldOwnClient); auto Inv = llvm::make_unique<CompilerInvocation>(); CompilerInvocation::CreateFromArgs(*Inv, ClangArgv.data(), &ClangArgv.data()[ClangArgv.size()], Ins->getDiagnostics()); Inv->getLangOpts()->CPlusPlus = true; Inv->getLangOpts()->CPlusPlus11 = true; Inv->getHeaderSearchOpts().UseLibcxx = true; Inv->getLangOpts()->Bool = true; Inv->getLangOpts()->WChar = true; Inv->getLangOpts()->Blocks = true; Inv->getLangOpts()->DebuggerSupport = true; Inv->getLangOpts()->SpellChecking = false; Inv->getLangOpts()->ThreadsafeStatics = false; Inv->getLangOpts()->AccessControl = false; Inv->getLangOpts()->DollarIdents = true; Inv->getCodeGenOpts().setDebugInfo(codegenoptions::FullDebugInfo); Inv->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple(); Ins->setInvocation(Inv.release()); TargetInfo *TI = TargetInfo::CreateTargetInfo( Ins->getDiagnostics(), Ins->getInvocation().TargetOpts); Ins->setTarget(TI); Ins->getTarget().adjust(Ins->getLangOpts()); Ins->createFileManager(); Ins->createSourceManager(Ins->getFileManager()); Ins->createPreprocessor(TU_Complete); return Ins; }