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 |