| OLD | NEW |
| 1 //===- subzero/src/IceCompileServer.cpp - Compile server ------------------===// | 1 //===- subzero/src/IceCompileServer.cpp - Compile server ------------------===// |
| 2 // | 2 // |
| 3 // The Subzero Code Generator | 3 // The Subzero Code Generator |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 /// | 9 /// |
| 10 /// \file | 10 /// \file |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 (void)Written; // If something went wrong, we deliberately just give up. | 120 (void)Written; // If something went wrong, we deliberately just give up. |
| 121 | 121 |
| 122 // If we reached here, we are failing ungracefully. Run the interrupt handlers | 122 // If we reached here, we are failing ungracefully. Run the interrupt handlers |
| 123 // to make sure any special cleanups get done, in particular that we remove | 123 // to make sure any special cleanups get done, in particular that we remove |
| 124 // files registered with RemoveFileOnSignal. | 124 // files registered with RemoveFileOnSignal. |
| 125 llvm::sys::RunInterruptHandlers(); | 125 llvm::sys::RunInterruptHandlers(); |
| 126 | 126 |
| 127 exit(0); | 127 exit(0); |
| 128 } | 128 } |
| 129 | 129 |
| 130 struct { |
| 131 const char *FlagName; |
| 132 bool FlagValue; |
| 133 } ConditionalBuildAttributes[] = { |
| 134 {"dump", BuildDefs::dump()}, |
| 135 {"llvm_cl", BuildDefs::llvmCl()}, |
| 136 {"llvm_ir", BuildDefs::llvmIr()}, |
| 137 {"llvm_ir_as_input", BuildDefs::llvmIrAsInput()}, |
| 138 {"minimal_build", BuildDefs::minimal()}, |
| 139 {"browser_mode", BuildDefs::browser()}}; |
| 140 |
| 141 /// Dumps values of build attributes to Stream if Stream is non-null. |
| 142 void dumpBuildAttributes(Ostream &Str) { |
| 143 // List the supported targets. |
| 144 #define SUBZERO_TARGET(TARGET) Str << "target_" #TARGET << "\n"; |
| 145 #include "llvm/Config/SZTargets.def" |
| 146 const char *Prefix[2] = {"no", "allow"}; |
| 147 for (size_t i = 0; i < llvm::array_lengthof(ConditionalBuildAttributes); |
| 148 ++i) { |
| 149 const auto &A = ConditionalBuildAttributes[i]; |
| 150 Str << Prefix[A.FlagValue] << "_" << A.FlagName << "\n"; |
| 151 } |
| 152 } |
| 153 |
| 130 } // end of anonymous namespace | 154 } // end of anonymous namespace |
| 131 | 155 |
| 132 void CLCompileServer::run() { | 156 void CLCompileServer::run() { |
| 133 if (BuildDefs::dump()) { | 157 if (BuildDefs::dump()) { |
| 134 llvm::sys::PrintStackTraceOnErrorSignal(); | 158 llvm::sys::PrintStackTraceOnErrorSignal(); |
| 135 } | 159 } |
| 136 ClFlags::parseFlags(argc, argv); | 160 ClFlags::parseFlags(argc, argv); |
| 137 ClFlags Flags; | 161 ClFlags Flags; |
| 138 ClFlagsExtra ExtraFlags; | 162 ClFlagsExtra ExtraFlags; |
| 139 ClFlags::getParsedClFlags(Flags); | 163 ClFlags::getParsedClFlags(Flags); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 (!BuildDefs::minimal() && ExtraFlags.getBitcodeAsText()) | 215 (!BuildDefs::minimal() && ExtraFlags.getBitcodeAsText()) |
| 192 ? TextDataStreamer::create(ExtraFlags.getIRFilename(), &StrError) | 216 ? TextDataStreamer::create(ExtraFlags.getIRFilename(), &StrError) |
| 193 : llvm::getDataFileStreamer(ExtraFlags.getIRFilename(), &StrError)); | 217 : llvm::getDataFileStreamer(ExtraFlags.getIRFilename(), &StrError)); |
| 194 if (!StrError.empty() || !InputStream) { | 218 if (!StrError.empty() || !InputStream) { |
| 195 llvm::SMDiagnostic Err(ExtraFlags.getIRFilename(), | 219 llvm::SMDiagnostic Err(ExtraFlags.getIRFilename(), |
| 196 llvm::SourceMgr::DK_Error, StrError); | 220 llvm::SourceMgr::DK_Error, StrError); |
| 197 Err.print(ExtraFlags.getAppName().c_str(), *Ls); | 221 Err.print(ExtraFlags.getAppName().c_str(), *Ls); |
| 198 return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_Bitcode)); | 222 return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_Bitcode)); |
| 199 } | 223 } |
| 200 | 224 |
| 225 if (ExtraFlags.getGenerateBuildAtts()) { |
| 226 dumpBuildAttributes(*Os.get()); |
| 227 return transferErrorCode(getReturnValue(ExtraFlags, Ice::EC_None)); |
| 228 } |
| 229 |
| 201 Ctx.reset( | 230 Ctx.reset( |
| 202 new GlobalContext(Ls.get(), Os.get(), Ls.get(), ELFStr.get(), Flags)); | 231 new GlobalContext(Ls.get(), Os.get(), Ls.get(), ELFStr.get(), Flags)); |
| 203 if (Ctx->getFlags().getNumTranslationThreads() != 0) { | 232 if (Ctx->getFlags().getNumTranslationThreads() != 0) { |
| 204 std::thread CompileThread([this, &ExtraFlags, &InputStream]() { | 233 std::thread CompileThread([this, &ExtraFlags, &InputStream]() { |
| 205 Ctx->initParserThread(); | 234 Ctx->initParserThread(); |
| 206 getCompiler().run(ExtraFlags, *Ctx.get(), std::move(InputStream)); | 235 getCompiler().run(ExtraFlags, *Ctx.get(), std::move(InputStream)); |
| 207 }); | 236 }); |
| 208 CompileThread.join(); | 237 CompileThread.join(); |
| 209 } else { | 238 } else { |
| 210 getCompiler().run(ExtraFlags, *Ctx.get(), std::move(InputStream)); | 239 getCompiler().run(ExtraFlags, *Ctx.get(), std::move(InputStream)); |
| 211 } | 240 } |
| 212 transferErrorCode(getReturnValue( | 241 transferErrorCode(getReturnValue( |
| 213 ExtraFlags, static_cast<ErrorCodes>(Ctx->getErrorStatus()->value()))); | 242 ExtraFlags, static_cast<ErrorCodes>(Ctx->getErrorStatus()->value()))); |
| 214 } | 243 } |
| 215 | 244 |
| 216 } // end of namespace Ice | 245 } // end of namespace Ice |
| OLD | NEW |