experiments/c-embedding/main.c
2024-05-27 21:30:27 +12:00

45 lines
1 KiB
C

#include <stdio.h>
#include <assert.h>
#include <libtcc.h>
#include <unistd.h>
#define SL_IMPLEMENTATION
#include <slibs/slibs.h>
#define ASSERT(x) assert(x == 0)
void symbol_cb(void* ctx, const char* name, const void* val) {
printf("%s\n", name);
}
int main() {
TCCState* state = tcc_new();
ASSERT(tcc_set_output_type(state, TCC_OUTPUT_MEMORY));
ASSERT(tcc_add_include_path(state, "runtime/include"));
ASSERT(tcc_add_include_path(state, "env/include"));
sl_string file = { 0 };
printf("file: ");
char path[512];
scanf("%s", path);
sl_read_file(path, &file);
ASSERT(tcc_compile_string(state, sl_c_str(file)));
ASSERT(tcc_add_library_path(state, "runtime/lib"));
ASSERT(tcc_add_library_path(state, "env/lib"));
// dumb testing shit
ASSERT(tcc_add_library_path(state, "lib"));
ASSERT(tcc_add_library(state, "tcc"));
ASSERT(tcc_relocate(state));
int (*entry)() = tcc_get_symbol(state, "main");
//tcc_list_symbols(state, NULL, symbol_cb);
entry();
tcc_delete(state);
}