From 672a67837f446d78892ef5ac05befbf7ea2de40e Mon Sep 17 00:00:00 2001 From: Nicolas Date: Fri, 3 Oct 2025 22:49:07 +0200 Subject: [PATCH] python c model skeleton added --- build.sh | 2 +- pyproject.toml | 5 +++- src/coparun/coparun.c | 0 src/coparun/coparun_module.c | 31 ++++++++++++++++++++++ src/{runner/runmem2.c => coparun/runmem.c} | 0 src/coparun/runmem.h | 0 test.sh | 4 +-- tests/test_compile.py | 2 +- 8 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 src/coparun/coparun.c create mode 100644 src/coparun/coparun_module.c rename src/{runner/runmem2.c => coparun/runmem.c} (100%) create mode 100644 src/coparun/runmem.h diff --git a/build.sh b/build.sh index 22740fb..e759040 100644 --- a/build.sh +++ b/build.sh @@ -9,5 +9,5 @@ gcc -c src/copapy/stencils.c -O2 -o src/copapy/obj/stencils_x86_64_O2.o gcc -c src/copapy/stencils.c -O3 -o src/copapy/obj/stencils_x86_64_O3.o mkdir bin -p -gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/runner/runmem2.c -o bin/runmem2 +gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/coparun/coparun.c src/coparun/runmem.c -o bin/coparun #x86_64-w64-mingw32-gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror src/runner/runmem2.c -Wall -O3 -o bin/runmem2.exe \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index f8ee4b0..0b32bc6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,10 @@ build-backend = "setuptools.build_meta" where = ["src"] [tool.setuptools.package-data] -copapy = ["*.c", "*.o"] +copapy = ["*.o"] + +[tool.setuptools.ext_modules] +coparun = { sources = ["src/coparun/coparun_module.c"] } [project.optional-dependencies] dev = [ diff --git a/src/coparun/coparun.c b/src/coparun/coparun.c new file mode 100644 index 0000000..e69de29 diff --git a/src/coparun/coparun_module.c b/src/coparun/coparun_module.c new file mode 100644 index 0000000..99f1535 --- /dev/null +++ b/src/coparun/coparun_module.c @@ -0,0 +1,31 @@ +#define PY_SSIZE_T_CLEAN +#include + +// A simple C function exposed to Python +static PyObject* my_function(PyObject* self, PyObject* args) { + int a, b; + if (!PyArg_ParseTuple(args, "ii", &a, &b)) { + return NULL; // Error if arguments aren't two integers + } + return PyLong_FromLong(a + b); // Return sum as Python integer +} + +// Method definitions +static PyMethodDef MyMethods[] = { + {"add", my_function, METH_VARARGS, "Adds two numbers"}, + {NULL, NULL, 0, NULL} // Sentinel +}; + +// Module definition +static struct PyModuleDef my_module = { + PyModuleDef_HEAD_INIT, + "my_module", // Module name + NULL, // Documentation + -1, // Size of per-interpreter state (-1 for global) + MyMethods +}; + +// Module initialization function +PyMODINIT_FUNC PyInit_my_module(void) { + return PyModule_Create(&my_module); +} \ No newline at end of file diff --git a/src/runner/runmem2.c b/src/coparun/runmem.c similarity index 100% rename from src/runner/runmem2.c rename to src/coparun/runmem.c diff --git a/src/coparun/runmem.h b/src/coparun/runmem.h new file mode 100644 index 0000000..e69de29 diff --git a/test.sh b/test.sh index 6f742de..141de02 100644 --- a/test.sh +++ b/test.sh @@ -5,5 +5,5 @@ python tests/test_compile.py echo "Run..." echo "-----------------------------------" mkdir bin -p -gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/runner/runmem2.c -o bin/runmem2 -./bin/runmem2 test.copapy \ No newline at end of file +gcc -Wall -Wextra -Wconversion -Wsign-conversion -Wshadow -Wstrict-overflow -Werror -g src/coparun/runmem.c src/coparun/coparun.c -o bin/coparun +./bin/coparun test.copapy \ No newline at end of file diff --git a/tests/test_compile.py b/tests/test_compile.py index fa99c8a..4d7541e 100644 --- a/tests/test_compile.py +++ b/tests/test_compile.py @@ -72,7 +72,7 @@ def test_compile(): il.to_file('test.copapy') - result = run_command(['./bin/runmem2', 'test.copapy']) + result = run_command(['./bin/coparun', 'test.copapy']) print('* Output from runner:') print(result)