Browse Source

made initial structure for new way of handling c bindings

Kolten Pearson 2 years ago
parent
commit
9b9a78524e
5 changed files with 69 additions and 1 deletions
  1. 12 0
      build_c.sh
  2. 13 0
      c_bindings/main.c
  3. 21 0
      c_bindings/pocketpy_c.cpp
  4. 20 0
      c_bindings/pocketpy_c.h
  5. 3 1
      src/pocketpy.h

+ 12 - 0
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
+

+ 13 - 0
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;
+}

+ 21 - 0
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;
+}
+

+ 20 - 0
c_bindings/pocketpy_c.h

@@ -0,0 +1,20 @@
+#ifndef POCKETPY_C_H 
+#define POCKETPY_C_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdbool.h>
+
+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

+ 3 - 1
src/pocketpy.h

@@ -975,6 +975,7 @@ inline void VM::post_init(){
 }   // namespace pkpy
 
 /*************************GLOBAL NAMESPACE*************************/
+/*
 static std::map<void*, void(*)(void*)> _pk_deleter_map;
 
 extern "C" {
@@ -1046,4 +1047,5 @@ extern "C" {
         std::string json = vm->read_output();
         return strdup(json.c_str());
     }
-}
+
+}*/