made initial structure for new way of handling c bindings

This commit is contained in:
Kolten Pearson 2023-04-28 23:53:23 -06:00
parent 46b1b1b900
commit 9b9a78524e
5 changed files with 69 additions and 1 deletions

12
build_c.sh Normal file
View File

@ -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
c_bindings/main.c Normal file
View File

@ -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
c_bindings/pocketpy_c.cpp Normal file
View File

@ -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
c_bindings/pocketpy_c.h Normal file
View File

@ -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

View File

@ -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());
}
}
}*/