Support program artifacts in exec
This commit is contained in:
parent
5438b93efd
commit
4583b1cfd3
|
|
@ -83,6 +83,7 @@ static void amduat_pel_cli_print_usage(FILE *stream) {
|
|||
"\n"
|
||||
"exec:\n"
|
||||
" amduat-pel exec --program PATH|-\n"
|
||||
" [--program-format raw|artifact]\n"
|
||||
" [--input PATH ...] [--input-format raw|artifact]\n"
|
||||
" [--output-dir DIR] [--output-format raw|artifact]\n"
|
||||
" [--result-out PATH|-] [--format text|json]\n"
|
||||
|
|
@ -657,6 +658,8 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
const char **input_paths = NULL;
|
||||
size_t input_paths_len = 0;
|
||||
amduat_asl_io_format_t input_format = AMDUAT_ASL_IO_RAW;
|
||||
amduat_asl_io_format_t program_format = AMDUAT_ASL_IO_RAW;
|
||||
bool program_format_set = false;
|
||||
amduat_asl_io_format_t output_format = AMDUAT_ASL_IO_RAW;
|
||||
amduat_format_output_t format;
|
||||
const char *output_dir = ".";
|
||||
|
|
@ -709,6 +712,16 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
fprintf(stderr, "error: invalid input-format\n");
|
||||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
} else if (strcmp(argv[i], "--program-format") == 0) {
|
||||
if (i + 1 >= argc) {
|
||||
fprintf(stderr, "error: --program-format requires a value\n");
|
||||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
if (!amduat_asl_io_format_parse(argv[++i], &program_format)) {
|
||||
fprintf(stderr, "error: invalid program-format\n");
|
||||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
program_format_set = true;
|
||||
} else if (strcmp(argv[i], "--output-dir") == 0) {
|
||||
if (i + 1 >= argc) {
|
||||
fprintf(stderr, "error: --output-dir requires a path\n");
|
||||
|
|
@ -756,6 +769,10 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
||||
}
|
||||
|
||||
if (!program_format_set && input_format == AMDUAT_ASL_IO_ARTIFACT) {
|
||||
program_format = AMDUAT_ASL_IO_ARTIFACT;
|
||||
}
|
||||
|
||||
if (!amduat_pel_cli_read_path_once(program_path,
|
||||
&stdin_used,
|
||||
&program_bytes,
|
||||
|
|
@ -808,19 +825,36 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
|||
}
|
||||
}
|
||||
|
||||
if (!amduat_pel_exec_program_artifact(
|
||||
amduat_artifact(amduat_octets(program_bytes, program_len)),
|
||||
inputs,
|
||||
input_paths_len,
|
||||
NULL,
|
||||
&outputs,
|
||||
&outputs_len,
|
||||
&result)) {
|
||||
fprintf(stderr, "error: exec failed\n");
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_STORE;
|
||||
goto exec_cleanup;
|
||||
{
|
||||
amduat_artifact_t program_artifact;
|
||||
memset(&program_artifact, 0, sizeof(program_artifact));
|
||||
if (!amduat_asl_artifact_from_bytes(amduat_octets(program_bytes,
|
||||
program_len),
|
||||
program_format,
|
||||
false,
|
||||
amduat_type_tag(0),
|
||||
&program_artifact)) {
|
||||
fprintf(stderr, "error: invalid program artifact\n");
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_CODEC;
|
||||
goto exec_cleanup;
|
||||
}
|
||||
if (!amduat_pel_exec_program_artifact(program_artifact,
|
||||
inputs,
|
||||
input_paths_len,
|
||||
NULL,
|
||||
&outputs,
|
||||
&outputs_len,
|
||||
&result)) {
|
||||
amduat_asl_artifact_free(&program_artifact);
|
||||
fprintf(stderr, "error: exec failed\n");
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
exit_code = AMDUAT_PEL_CLI_EXIT_STORE;
|
||||
goto exec_cleanup;
|
||||
}
|
||||
amduat_asl_artifact_free(&program_artifact);
|
||||
}
|
||||
free(program_bytes);
|
||||
program_bytes = NULL;
|
||||
|
|
|
|||
Loading…
Reference in a new issue