aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/cli
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-04-11 21:04:02 +0100
committerMichael Williamson <mike@zwobble.org>2026-04-11 21:04:02 +0100
commit612eaf73eba92a633c4790db2e406eb0def2f6fe (patch)
tree3a7642c872228b1ffb90e562480f56c0f77be513 /src/main/java/org/shedlang/compiler/cli
parent67ddc893da418073e78109d69726e2fe188e01db (diff)
Allow explicit selection of backend
Diffstat (limited to 'src/main/java/org/shedlang/compiler/cli')
-rw-r--r--src/main/java/org/shedlang/compiler/cli/ShedCli.java18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/cli/ShedCli.java b/src/main/java/org/shedlang/compiler/cli/ShedCli.java
index 46bf9b5f..e4f98607 100644
--- a/src/main/java/org/shedlang/compiler/cli/ShedCli.java
+++ b/src/main/java/org/shedlang/compiler/cli/ShedCli.java
@@ -6,6 +6,7 @@ import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
import org.shedlang.compiler.ShedCompiler;
import org.shedlang.compiler.backends.Backends;
+import org.shedlang.compiler.backends.ShedTarget;
import org.shedlang.compiler.errors.CompilerError;
import java.io.IOException;
@@ -31,7 +32,19 @@ public class ShedCli {
switch (args.<Command>get("command")) {
case COMPILE -> {
- var backend = Backends.backendForTarget(args.getString("target"));
+ var target = ShedTarget.fromString(args.getString("target")).orElseThrow();
+ var backend = Optional.ofNullable(args.getString("backend"))
+ .map(
+ backendName ->
+ Backends
+ .backendFactory(backendName)
+ // In principle, this should be prevented by the arg parsing.
+ .orElseThrow(() -> new UnsupportedOperationException("Unrecognised backend: " + backendName))
+ .backendForTarget(target)
+ // TODO: better error
+ .orElseThrow(() -> new UnsupportedOperationException("Backend " + backendName + " does not support target " + target.targetName()))
+ )
+ .orElseGet(() -> Backends.backendForTarget(target));
var profile = Optional.ofNullable(args.getString("profile"));
compiler.compile(sourcePath, backend, profile);
}
@@ -50,7 +63,8 @@ public class ShedCli {
.addArgument("source")
.type(new PathArgumentType())
.required(true);
- compileSubParser.addArgument("--target").choices(Backends.targetNames()).required(true);
+ compileSubParser.addArgument("--backend").choices(Backends.backendNames()).required(false);
+ compileSubParser.addArgument("--target").choices(ShedTarget.targetNames()).required(true);
compileSubParser.addArgument("--profile").required(false);
try {