add nn-cli example (#4373)
an example application with flexible cli options which aims to allow us to perform any wasi-nn operations. eg. ``` --load-graph=file=fixture/model.xml,file=fixture/model.bin,id=graph --init-execution-context=graph-id=graph,id=ctx --set-input=file=fixture/tensor.bgr,context-id=ctx,dim=1,dim=3,dim=224,dim=224 --compute=context-id=ctx --get-output=context-id=ctx,file=output.bin ```
This commit is contained in:
73
wamr-wasi-extensions/samples/nn-cli/fileio.c
Normal file
73
wamr-wasi-extensions/samples/nn-cli/fileio.c
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright (C) 2025 Midokura Japan KK. All rights reserved.
|
||||
* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
*/
|
||||
|
||||
/*
|
||||
* modified copy-and-paste from:
|
||||
* https://github.com/yamt/toywasm/blob/0eaad8cacd0cc7692946ff19b25994f106113be8/lib/fileio.c
|
||||
*/
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "fileio.h"
|
||||
|
||||
int
|
||||
map_file(const char *path, void **pp, size_t *sizep)
|
||||
{
|
||||
void *p;
|
||||
size_t size;
|
||||
ssize_t ssz;
|
||||
int fd;
|
||||
int ret;
|
||||
|
||||
fd = open(path, O_RDONLY);
|
||||
if (fd == -1) {
|
||||
ret = errno;
|
||||
assert(ret != 0);
|
||||
return ret;
|
||||
}
|
||||
struct stat st;
|
||||
ret = fstat(fd, &st);
|
||||
if (ret == -1) {
|
||||
ret = errno;
|
||||
assert(ret != 0);
|
||||
close(fd);
|
||||
return ret;
|
||||
}
|
||||
size = st.st_size;
|
||||
if (size > 0) {
|
||||
p = malloc(size);
|
||||
}
|
||||
else {
|
||||
/* Avoid a confusing error */
|
||||
p = malloc(1);
|
||||
}
|
||||
if (p == NULL) {
|
||||
close(fd);
|
||||
return ENOMEM;
|
||||
}
|
||||
ssz = read(fd, p, size);
|
||||
if (ssz != size) {
|
||||
ret = errno;
|
||||
assert(ret != 0);
|
||||
close(fd);
|
||||
return ret;
|
||||
}
|
||||
close(fd);
|
||||
*pp = p;
|
||||
*sizep = size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
unmap_file(void *p, size_t sz)
|
||||
{
|
||||
free(p);
|
||||
}
|
||||
Reference in New Issue
Block a user