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"
|
"\n"
|
||||||
"exec:\n"
|
"exec:\n"
|
||||||
" amduat-pel exec --program PATH|-\n"
|
" amduat-pel exec --program PATH|-\n"
|
||||||
|
" [--program-format raw|artifact]\n"
|
||||||
" [--input PATH ...] [--input-format raw|artifact]\n"
|
" [--input PATH ...] [--input-format raw|artifact]\n"
|
||||||
" [--output-dir DIR] [--output-format raw|artifact]\n"
|
" [--output-dir DIR] [--output-format raw|artifact]\n"
|
||||||
" [--result-out PATH|-] [--format text|json]\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;
|
const char **input_paths = NULL;
|
||||||
size_t input_paths_len = 0;
|
size_t input_paths_len = 0;
|
||||||
amduat_asl_io_format_t input_format = AMDUAT_ASL_IO_RAW;
|
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_asl_io_format_t output_format = AMDUAT_ASL_IO_RAW;
|
||||||
amduat_format_output_t format;
|
amduat_format_output_t format;
|
||||||
const char *output_dir = ".";
|
const char *output_dir = ".";
|
||||||
|
|
@ -709,6 +712,16 @@ static int amduat_pel_cli_cmd_exec(int argc,
|
||||||
fprintf(stderr, "error: invalid input-format\n");
|
fprintf(stderr, "error: invalid input-format\n");
|
||||||
return AMDUAT_PEL_CLI_EXIT_USAGE;
|
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) {
|
} else if (strcmp(argv[i], "--output-dir") == 0) {
|
||||||
if (i + 1 >= argc) {
|
if (i + 1 >= argc) {
|
||||||
fprintf(stderr, "error: --output-dir requires a path\n");
|
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;
|
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,
|
if (!amduat_pel_cli_read_path_once(program_path,
|
||||||
&stdin_used,
|
&stdin_used,
|
||||||
&program_bytes,
|
&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)),
|
amduat_artifact_t program_artifact;
|
||||||
inputs,
|
memset(&program_artifact, 0, sizeof(program_artifact));
|
||||||
input_paths_len,
|
if (!amduat_asl_artifact_from_bytes(amduat_octets(program_bytes,
|
||||||
NULL,
|
program_len),
|
||||||
&outputs,
|
program_format,
|
||||||
&outputs_len,
|
false,
|
||||||
&result)) {
|
amduat_type_tag(0),
|
||||||
fprintf(stderr, "error: exec failed\n");
|
&program_artifact)) {
|
||||||
free(program_bytes);
|
fprintf(stderr, "error: invalid program artifact\n");
|
||||||
program_bytes = NULL;
|
free(program_bytes);
|
||||||
exit_code = AMDUAT_PEL_CLI_EXIT_STORE;
|
program_bytes = NULL;
|
||||||
goto exec_cleanup;
|
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);
|
free(program_bytes);
|
||||||
program_bytes = NULL;
|
program_bytes = NULL;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue