From 9b9a78524e21d4490cc4c4d194b83879e614ac45 Mon Sep 17 00:00:00 2001 From: Kolten Pearson Date: Fri, 28 Apr 2023 23:53:23 -0600 Subject: [PATCH] made initial structure for new way of handling c bindings --- build_c.sh | 12 ++++++++++++ c_bindings/main.c | 13 +++++++++++++ c_bindings/pocketpy_c.cpp | 21 +++++++++++++++++++++ c_bindings/pocketpy_c.h | 20 ++++++++++++++++++++ src/pocketpy.h | 4 +++- 5 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 build_c.sh create mode 100644 c_bindings/main.c create mode 100644 c_bindings/pocketpy_c.cpp create mode 100644 c_bindings/pocketpy_c.h diff --git a/build_c.sh b/build_c.sh new file mode 100644 index 00000000..6d7355d3 --- /dev/null +++ b/build_c.sh @@ -0,0 +1,12 @@ +python3 preprocess.py + +echo "compiling c++ lib" +clang++ -c -o pocketpy_c.o c_bindings/pocketpy_c.cpp -Wfatal-errors --std=c++17 -O2 -Wall -Wno-sign-compare -Wno-unused-variable -fno-rtti -stdlib=libc++ -I src/ +echo "compiling c executable" +clang -c -o main.o c_bindings/main.c -Wfatal-errors -O2 -Wall -Wno-sign-compare -Wno-unused-variable -I src/ +echo "linking" +clang++ -o pocketpy_c main.o pocketpy_c.o -stdlib=libc++ +echo "cleaning up" +rm pocketpy_c.o +rm main.o + diff --git a/c_bindings/main.c b/c_bindings/main.c new file mode 100644 index 00000000..04290ebf --- /dev/null +++ b/c_bindings/main.c @@ -0,0 +1,13 @@ +#include "pocketpy_c.h" + + +int main(int argc, char** argv) { + + pkpy_vm vm = pkpy_vm_create(true, true); + + pkpy_vm_exec(vm, "print('hello world!')"); + + pkpy_vm_destroy(vm); + + return 0; +} diff --git a/c_bindings/pocketpy_c.cpp b/c_bindings/pocketpy_c.cpp new file mode 100644 index 00000000..152ea532 --- /dev/null +++ b/c_bindings/pocketpy_c.cpp @@ -0,0 +1,21 @@ +#include "pocketpy.h" +#include "pocketpy_c.h" + +pkpy_vm pkpy_vm_create(bool use_stdio, bool enable_os) { + pkpy::VM* p = new pkpy::VM(use_stdio, enable_os); + + return (pkpy_vm) p; +} + +void pkpy_vm_exec(pkpy_vm vm_handle, const char* source) { + pkpy::VM* vm = (pkpy::VM*) vm_handle; + + vm->exec(source, "main.py", pkpy::EXEC_MODE); +} + +void pkpy_vm_destroy(pkpy_vm vm_handle) { + pkpy::VM* vm = (pkpy::VM*) vm_handle; + + delete vm; +} + diff --git a/c_bindings/pocketpy_c.h b/c_bindings/pocketpy_c.h new file mode 100644 index 00000000..12672495 --- /dev/null +++ b/c_bindings/pocketpy_c.h @@ -0,0 +1,20 @@ +#ifndef POCKETPY_C_H +#define POCKETPY_C_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +typedef struct pkpy_vm_handle* pkpy_vm; + +pkpy_vm pkpy_vm_create(bool use_stdio, bool enable_os); +void pkpy_vm_exec(pkpy_vm vm_handle, const char* source); +void pkpy_vm_destroy(pkpy_vm vm); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/pocketpy.h b/src/pocketpy.h index 2501c396..db49cbfa 100644 --- a/src/pocketpy.h +++ b/src/pocketpy.h @@ -975,6 +975,7 @@ inline void VM::post_init(){ } // namespace pkpy /*************************GLOBAL NAMESPACE*************************/ +/* static std::map _pk_deleter_map; extern "C" { @@ -1046,4 +1047,5 @@ extern "C" { std::string json = vm->read_output(); return strdup(json.c_str()); } -} \ No newline at end of file + +}*/