move pypowersim_wrapper on its own
authorKonstantinos Margaritis <konstantinos.margaritis@vectorcamp.gr>
Tue, 11 Oct 2022 09:49:24 +0000 (09:49 +0000)
committerKonstantinos Margaritis <konstantinos.margaritis@vectorcamp.gr>
Tue, 11 Oct 2022 09:51:57 +0000 (09:51 +0000)
media/pypowersim_wrapper/Makefile [new file with mode: 0644]
media/pypowersim_wrapper/pypowersim_wrapper_common.h [new file with mode: 0644]
media/pypowersim_wrapper/pypowersim_wrapper_example.c [new file with mode: 0644]
media/video/libvpx/Makefile
media/video/libvpx/pypowersim_wrapper_common.h [deleted file]
media/video/libvpx/pypowersim_wrapper_example.c [deleted file]

diff --git a/media/pypowersim_wrapper/Makefile b/media/pypowersim_wrapper/Makefile
new file mode 100644 (file)
index 0000000..7b60482
--- /dev/null
@@ -0,0 +1,21 @@
+EXAMPLE=pypowersim_wrapper_example
+
+CC=gcc
+CXX=g++
+AS=powerpc64le-linux-gnu-as
+OBJCOPY=powerpc64le-linux-gnu-objcopy
+CFLAGS= -Iinclude -O -g3 -I/usr/include/python3.7m
+CXXFLAGS= -Iinclude -O -g3
+ASFLAGS= -mlibresoc -mregnames
+LDFLAGS=-lgtest -pthread -lpython3.7m
+
+EXAMPLEC     = pypowersim_wrapper_example.c
+EXAMPLEOBJ   = ${EXAMPLEC:.c=.o}
+
+${EXAMPLE}: ${EXAMPLEOBJ}
+
+all: ${EXAMPLE}
+
+.PHONY: clean
+clean:
+       rm -f ${EXAMPLE} ${EXAMPLEOBJ}
diff --git a/media/pypowersim_wrapper/pypowersim_wrapper_common.h b/media/pypowersim_wrapper/pypowersim_wrapper_common.h
new file mode 100644 (file)
index 0000000..9a50d35
--- /dev/null
@@ -0,0 +1,133 @@
+#include <Python.h>
+#include <stdint.h>
+#include <stdio.h>
+
+static const char* PLUGIN_NAME = "pypowersim";
+static int python_initialized = 0;
+static PyObject *plugin_name = NULL;
+static PyObject *plugin_module = NULL;
+
+typedef struct pypowersim_state {
+    PyObject *binary;
+    PyObject *bigendian;
+    PyObject *prog;
+    PyObject *qemu_cosim;
+    PyObject *initial_regs;
+    PyObject *initial_sprs;
+    PyObject *svstate;
+    PyObject *mmu;
+    PyObject *initial_cr;
+    PyObject *initial_mem;
+    PyObject *initial_fprs;
+    PyObject *initial_pc;
+    PyObject *args;
+    PyObject *simulator;
+    PyObject *result_obj;
+} pypowersim_state_t;
+
+static pypowersim_state_t *pypowersim_prepare(void) {
+    // Allocate memory for state
+    pypowersim_state_t *state = malloc(sizeof(pypowersim_state_t));
+    if (!state) {
+        printf("Error creating pypowersim_state object\n");
+       exit(1);
+    }
+    memset(state, 0, sizeof(pypowersim_state_t));
+
+    // Add pypowersim directory to Python path
+    if (!python_initialized) {
+      // Initialize Python C API
+      Py_Initialize();
+
+      PyObject* sysPath = PySys_GetObject((char*)"path");
+      PyObject* curDir = PyUnicode_FromString("../../../src/openpower/decoder/isa/");
+      PyList_Append(sysPath, curDir);
+      Py_DECREF(curDir);
+
+      // Set plugin name and module
+      plugin_name = PyUnicode_FromString(PLUGIN_NAME);
+      plugin_module = PyImport_Import(plugin_name);
+      Py_DECREF(plugin_name);
+      if (!plugin_module) {
+          PyErr_Print();
+          printf("Error importing module\n");
+       exit(1);
+      }
+      python_initialized = 1;
+    }
+
+    // Set simulator object
+    state->simulator = PyObject_GetAttrString(plugin_module, "run_a_simulation");
+    if (!state->simulator) {
+        PyErr_Print();
+        printf("Error retrieving 'run_a_simulation'\n");
+       exit(1);
+    }
+
+    // Little Endian for now
+    state->bigendian = Py_False;
+    state->prog = Py_None;
+    state->qemu_cosim = Py_False;
+    // Set and clear 128 GPRs
+    state->initial_regs = PyList_New(128);
+    for (int i=0; i < 128; i++) {
+       PyList_SetItem(state->initial_regs, i, PyLong_FromLong(0));
+    }
+    // Create SPRs to all bits set
+    state->initial_sprs= PyDict_New();
+    PyDict_SetItemString(state->initial_sprs, "LR",  PyLong_FromLong(0xffffff));
+    // Set empty SVSTATE
+    state->svstate = PyLong_FromLong(0);
+    // Set no MMU
+    state->mmu = Py_None;
+    // Set no initial CR
+    state->initial_cr = PyLong_FromLong(0);
+    // Set empty initial Memory
+    state->initial_mem = PyDict_New();
+    // Set and Clear 128 FPR
+    state->initial_fprs = PyList_New(128);
+    for (int i=0; i < 128; i++) {
+       PyList_SetItem(state->initial_fprs, i, PyLong_FromLong(0));
+    }
+    // Set initial Program Counter
+    state->initial_pc= PyLong_FromLong(0x0);
+
+    return state;
+}
+
+static void pypowersim_prepareargs(pypowersim_state_t *state) {
+    // Set the tuple with the state objects
+    state->args = PyTuple_Pack(12, state->binary, state->bigendian, state->prog, state->qemu_cosim,
+                                 state->initial_regs, state->initial_sprs, state->svstate, state->mmu,
+                                 state->initial_cr, state->initial_mem, state->initial_fprs, state->initial_pc );
+    if (!state->args) {
+        PyErr_Print();
+        Py_DECREF(state->simulator);
+        printf("Error building args tuple\n");
+       exit(1);
+    }
+}
+
+static void pypowersim_finalize(pypowersim_state_t *state) {
+    if (state->simulator) Py_DECREF(state->simulator);
+    if (state->binary) Py_DECREF(state->binary);
+    if (state->bigendian) Py_DECREF(state->bigendian);
+    if (state->prog) Py_DECREF(state->prog);
+    if (state->qemu_cosim) Py_DECREF(state->qemu_cosim);
+    if (state->initial_regs) Py_DECREF(state->initial_regs);
+    if (state->initial_sprs) Py_DECREF(state->initial_sprs);
+    if (state->svstate) Py_DECREF(state->svstate);
+    if (state->mmu) Py_DECREF(state->mmu);
+    if (state->initial_cr) Py_DECREF(state->initial_cr);
+    if (state->initial_mem) Py_DECREF(state->initial_mem);
+    if (state->initial_fprs) Py_DECREF(state->initial_fprs);
+    if (state->initial_pc) Py_DECREF(state->initial_pc);
+    if (state->args) Py_DECREF(state->args);
+    if (state->result_obj) Py_DECREF(state->result_obj);
+    memset(state, 0, sizeof(pypowersim_state_t));
+    if (state) free(state);
+
+    // Finalize Python C API
+    // Py_Finalize();
+}
+
diff --git a/media/pypowersim_wrapper/pypowersim_wrapper_example.c b/media/pypowersim_wrapper/pypowersim_wrapper_example.c
new file mode 100644 (file)
index 0000000..08e88f1
--- /dev/null
@@ -0,0 +1,66 @@
+#include <Python.h>
+#include <stdint.h>
+#include <stdio.h>
+
+#include "pypowersim_wrapper_common.h"
+
+int test_function(int x) {
+    int result = 0;
+    for (int i=0; i < x; i++)
+        result += 2*i;
+    return result;
+}
+
+int test_function_wrapper(int x) {
+    // Create the pypowersim_state
+    pypowersim_state_t *state = pypowersim_prepare();
+
+    // Change the relevant elements, mandatory: body
+    //
+    state->binary = PyBytes_FromStringAndSize((const char *)&test_function, 1000);
+    // Set GPR #3 to the argument x
+    PyList_SetItem(state->initial_regs, 3, PyLong_FromLong(x));
+
+    // Prepare the args object
+    pypowersim_prepareargs(state);
+
+    // Call the function and get the resulting object
+    state->result_obj = PyObject_CallObject(state->simulator, state->args);
+    Py_DECREF(state->simulator);
+    Py_DECREF(state->args);
+    if (!state->result_obj) {
+        PyErr_Print();
+        printf("Error invoking 'run_a_simulation'\n");
+    }
+
+    // Get the GPRs from the result_obj
+    PyObject *final_regs = PyObject_GetAttrString(state->result_obj, "gpr");
+    if (!final_regs) {
+        PyErr_Print();
+        Py_DECREF(state->result_obj);
+        printf("Error getting final GPRs\n");
+    }
+
+    // GPR #3 holds the return value as an integer
+    PyObject *key = PyLong_FromLong(3);
+    PyObject *itm = PyDict_GetItem(final_regs, key);
+    PyObject *value = PyObject_GetAttrString(itm, "value");
+    uint64_t val = PyLong_AsLongLong(value);
+
+    Py_DECREF(state->result_obj);
+
+    pypowersim_finalize(state);
+
+    // Return value
+    return val;
+}
+
+int main(int argc, char* argv[]) {
+    for (int i=0; i < 20; i++) {
+       int result = test_function_wrapper(i);
+       printf("i = %d, result = %d\n", i, result);
+    }
+    return 0;
+}
+
+
index 9d16c33aaf9ab8b88a12c5362bc51ccca8be3c1c..d035095deee2b62488dbf0967360cf7ad0804ae2 100644 (file)
@@ -1,12 +1,11 @@
 VPXTARGET=libvpx_variance_test
 VP8TARGET=vp8_dct_test
-EXAMPLE=pypowersim_wrapper_example
 
 CC=gcc
 CXX=g++
 AS=powerpc64le-linux-gnu-as
 OBJCOPY=powerpc64le-linux-gnu-objcopy
-CFLAGS= -Iinclude -O -g3 -I/usr/include/python3.7m
+CFLAGS= -Iinclude -I../../pypowersim_wrapper -O -g3 -I/usr/include/python3.7m
 CXXFLAGS= -Iinclude -O -g3
 ASFLAGS= -mlibresoc -mregnames
 LDFLAGS=-lgtest -pthread -lpython3.7m
@@ -18,8 +17,6 @@ VP8_CFILES   = vp8_dct4x4_ref.c vp8_dct4x4_wrappers.c
 VPX_CFILES   = variance_ref.c  variancefuncs_svp64.c  variance_svp64_wrappers.c  vpx_mem.c
 VP8_CPPFILES = test_libvpx.cc  vp8_fdct4x4_test.cc
 VPX_CPPFILES = test_libvpx.cc  variance_test.cc
-EXAMPLEC     = pypowersim_wrapper_example.c
-EXAMPLEOBJ   = ${EXAMPLEC:.c=.o}
 VP8_OBJFILES = $(VP8_ASFILES:.s=.o) $(VP8_CFILES:.c=.o) $(VP8_CPPFILES:.cc=.o)
 VPX_OBJFILES = $(VPX_ASFILES:.s=.o) $(VPX_CFILES:.c=.o) $(VPX_CPPFILES:.cc=.o)
 
@@ -32,10 +29,8 @@ ${VP8TARGET}: ${VP8_OBJFILES}
 ${VPXTARGET}: ${VPX_OBJFILES}
        ${CXX} -o ${VPXTARGET} ${VPX_OBJFILES} ${LDFLAGS}
 
-${EXAMPLE}: ${EXAMPLEOBJ}
-
-all: ${VP8TARGET} ${VPXTARGET} ${EXAMPLE} ${BINFILES}
+all: ${VP8TARGET} ${VPXTARGET} ${BINFILES}
 
 .PHONY: clean
 clean:
-       rm -f ${VP8TARGET} ${VPXTARGET} ${VP8_OBJFILES} ${VPX_OBJFILES} ${BINFILES} ${EXAMPLE} ${EXAMPLEOBJ}
+       rm -f ${VP8TARGET} ${VPXTARGET} ${VP8_OBJFILES} ${VPX_OBJFILES} ${BINFILES}
diff --git a/media/video/libvpx/pypowersim_wrapper_common.h b/media/video/libvpx/pypowersim_wrapper_common.h
deleted file mode 100644 (file)
index de35810..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-#include <Python.h>
-#include <stdint.h>
-#include <stdio.h>
-
-static const char* PLUGIN_NAME = "pypowersim";
-static int python_initialized = 0;
-static PyObject *plugin_name = NULL;
-static PyObject *plugin_module = NULL;
-
-typedef struct pypowersim_state {
-    PyObject *binary;
-    PyObject *bigendian;
-    PyObject *prog;
-    PyObject *qemu_cosim;
-    PyObject *initial_regs;
-    PyObject *initial_sprs;
-    PyObject *svstate;
-    PyObject *mmu;
-    PyObject *initial_cr;
-    PyObject *initial_mem;
-    PyObject *initial_fprs;
-    PyObject *initial_pc;
-    PyObject *args;
-    PyObject *simulator;
-    PyObject *result_obj;
-} pypowersim_state_t;
-
-pypowersim_state_t *pypowersim_prepare(void) {
-    // Allocate memory for state
-    pypowersim_state_t *state = malloc(sizeof(pypowersim_state_t));
-    if (!state) {
-        printf("Error creating pypowersim_state object\n");
-       exit(1);
-    }
-    memset(state, 0, sizeof(pypowersim_state_t));
-
-    // Add pypowersim directory to Python path
-    if (!python_initialized) {
-      // Initialize Python C API
-      Py_Initialize();
-
-      PyObject* sysPath = PySys_GetObject((char*)"path");
-      PyObject* curDir = PyUnicode_FromString("../../../src/openpower/decoder/isa/");
-      PyList_Append(sysPath, curDir);
-      Py_DECREF(curDir);
-
-      // Set plugin name and module
-      plugin_name = PyUnicode_FromString(PLUGIN_NAME);
-      plugin_module = PyImport_Import(plugin_name);
-      Py_DECREF(plugin_name);
-      if (!plugin_module) {
-          PyErr_Print();
-          printf("Error importing module\n");
-       exit(1);
-      }
-      python_initialized = 1;
-    }
-
-    // Set simulator object
-    state->simulator = PyObject_GetAttrString(plugin_module, "run_a_simulation");
-    if (!state->simulator) {
-        PyErr_Print();
-        printf("Error retrieving 'run_a_simulation'\n");
-       exit(1);
-    }
-
-    // Little Endian for now
-    state->bigendian = Py_False;
-    state->prog = Py_None;
-    state->qemu_cosim = Py_False;
-    // Set and clear 128 GPRs
-    state->initial_regs = PyList_New(128);
-    for (int i=0; i < 128; i++) {
-       PyList_SetItem(state->initial_regs, i, PyLong_FromLong(0));
-    }
-    // Create SPRs to all bits set
-    state->initial_sprs= PyDict_New();
-    PyDict_SetItemString(state->initial_sprs, "LR",  PyLong_FromLong(0xffffff));
-    // Set empty SVSTATE
-    state->svstate = PyLong_FromLong(0);
-    // Set no MMU
-    state->mmu = Py_None;
-    // Set no initial CR
-    state->initial_cr = PyLong_FromLong(0);
-    // Set empty initial Memory
-    state->initial_mem = PyDict_New();
-    // Set and Clear 128 FPR
-    state->initial_fprs = PyList_New(128);
-    for (int i=0; i < 128; i++) {
-       PyList_SetItem(state->initial_fprs, i, PyLong_FromLong(0));
-    }
-    // Set initial Program Counter
-    state->initial_pc= PyLong_FromLong(0x0);
-
-    return state;
-}
-
-void pypowersim_prepareargs(pypowersim_state_t *state) {
-    // Set the tuple with the state objects
-    state->args = PyTuple_Pack(12, state->binary, state->bigendian, state->prog, state->qemu_cosim,
-                                 state->initial_regs, state->initial_sprs, state->svstate, state->mmu,
-                                 state->initial_cr, state->initial_mem, state->initial_fprs, state->initial_pc );
-    if (!state->args) {
-        PyErr_Print();
-        Py_DECREF(state->simulator);
-        printf("Error building args tuple\n");
-       exit(1);
-    }
-}
-
-void pypowersim_finalize(pypowersim_state_t *state) {
-    if (state->simulator) Py_DECREF(state->simulator);
-    if (state->binary) Py_DECREF(state->binary);
-    if (state->bigendian) Py_DECREF(state->bigendian);
-    if (state->prog) Py_DECREF(state->prog);
-    if (state->qemu_cosim) Py_DECREF(state->qemu_cosim);
-    if (state->initial_regs) Py_DECREF(state->initial_regs);
-    if (state->initial_sprs) Py_DECREF(state->initial_sprs);
-    if (state->svstate) Py_DECREF(state->svstate);
-    if (state->mmu) Py_DECREF(state->mmu);
-    if (state->initial_cr) Py_DECREF(state->initial_cr);
-    if (state->initial_mem) Py_DECREF(state->initial_mem);
-    if (state->initial_fprs) Py_DECREF(state->initial_fprs);
-    if (state->initial_pc) Py_DECREF(state->initial_pc);
-    if (state->args) Py_DECREF(state->args);
-    if (state->result_obj) Py_DECREF(state->result_obj);
-    memset(state, 0, sizeof(pypowersim_state_t));
-    if (state) free(state);
-
-    // Finalize Python C API
-    // Py_Finalize();
-}
-
diff --git a/media/video/libvpx/pypowersim_wrapper_example.c b/media/video/libvpx/pypowersim_wrapper_example.c
deleted file mode 100644 (file)
index 08e88f1..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#include <Python.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#include "pypowersim_wrapper_common.h"
-
-int test_function(int x) {
-    int result = 0;
-    for (int i=0; i < x; i++)
-        result += 2*i;
-    return result;
-}
-
-int test_function_wrapper(int x) {
-    // Create the pypowersim_state
-    pypowersim_state_t *state = pypowersim_prepare();
-
-    // Change the relevant elements, mandatory: body
-    //
-    state->binary = PyBytes_FromStringAndSize((const char *)&test_function, 1000);
-    // Set GPR #3 to the argument x
-    PyList_SetItem(state->initial_regs, 3, PyLong_FromLong(x));
-
-    // Prepare the args object
-    pypowersim_prepareargs(state);
-
-    // Call the function and get the resulting object
-    state->result_obj = PyObject_CallObject(state->simulator, state->args);
-    Py_DECREF(state->simulator);
-    Py_DECREF(state->args);
-    if (!state->result_obj) {
-        PyErr_Print();
-        printf("Error invoking 'run_a_simulation'\n");
-    }
-
-    // Get the GPRs from the result_obj
-    PyObject *final_regs = PyObject_GetAttrString(state->result_obj, "gpr");
-    if (!final_regs) {
-        PyErr_Print();
-        Py_DECREF(state->result_obj);
-        printf("Error getting final GPRs\n");
-    }
-
-    // GPR #3 holds the return value as an integer
-    PyObject *key = PyLong_FromLong(3);
-    PyObject *itm = PyDict_GetItem(final_regs, key);
-    PyObject *value = PyObject_GetAttrString(itm, "value");
-    uint64_t val = PyLong_AsLongLong(value);
-
-    Py_DECREF(state->result_obj);
-
-    pypowersim_finalize(state);
-
-    // Return value
-    return val;
-}
-
-int main(int argc, char* argv[]) {
-    for (int i=0; i < 20; i++) {
-       int result = test_function_wrapper(i);
-       printf("i = %d, result = %d\n", i, result);
-    }
-    return 0;
-}
-
-