From 612eaf73eba92a633c4790db2e406eb0def2f6fe Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 11 Apr 2026 21:04:02 +0100 Subject: Allow explicit selection of backend --- src/main/java/org/shedlang/compiler/cli/ShedCli.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/main/java/org/shedlang/compiler/cli') 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.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 { -- cgit v1.2.3