Skip to content

Commit a7dbcdf

Browse files
committed
Add an option emit-target-qem to emit target specific payload.
This option allows a target to use its specific payload plugin when `-emit=qem` is specified by setting a target name into `qssc::payload::registry::PayloadRegistry`. If no plugin is specified, `"ZIP"` plugin is used as original does.
1 parent 3fa9592 commit a7dbcdf

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

lib/API/api.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ static llvm::cl::opt<enum Action> emitAction(
136136
"generate a quantum executable module (qem) "
137137
"for execution on hardware")));
138138

139+
static llvm::cl::opt<bool>
140+
emitTargetQem("emit-target-qem", llvm::cl::desc("Emit target-specific qem"),
141+
llvm::cl::cat(qssc::config::getQSSCCategory()));
142+
139143
namespace qss {
140144
enum FileExtension { None, AST, ASTPRETTY, QASM, QOBJ, MLIR, WMEM, QEM };
141145
} // namespace qss
@@ -542,11 +546,18 @@ compile_(int argc, char const **argv, std::string *outputString,
542546
payload = std::move(
543547
payloadInfo.getValue()->createPluginInstance(llvm::None).get());
544548
} else {
549+
const auto targetName = config.targetName.value_or("");
550+
const auto pluginName =
551+
(emitTargetQem &&
552+
qssc::payload::registry::PayloadRegistry::pluginExists(targetName))
553+
? targetName
554+
: "ZIP";
545555
const std::filesystem::path payloadPath(outputFilename.c_str());
546556
const std::string fNamePrefix = payloadPath.stem();
547557
const qssc::payload::PayloadConfig config{fNamePrefix, fNamePrefix};
548558
auto payloadInfo =
549-
qssc::payload::registry::PayloadRegistry::lookupPluginInfo("ZIP");
559+
qssc::payload::registry::PayloadRegistry::lookupPluginInfo(
560+
pluginName);
550561
payload =
551562
std::move(payloadInfo.getValue()->createPluginInstance(config).get());
552563
}

0 commit comments

Comments
 (0)