kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

api_context_arena.c (2030B)


      1 #include <kit/compile.h>
      2 #include <kit/target.h>
      3 
      4 typedef struct AuditArena {
      5   unsigned char* data;
      6   size_t capacity;
      7   size_t used;
      8 } AuditArena;
      9 
     10 static void* audit_alloc(KitHeap* heap, size_t size, size_t align) {
     11   AuditArena* arena = heap->user;
     12   size_t mask = align - 1;
     13   size_t start = (arena->used + mask) & ~mask;
     14   if (size > arena->capacity - start) return NULL;
     15   arena->used = start + size;
     16   return arena->data + start;
     17 }
     18 
     19 static void* audit_realloc(KitHeap* heap, void* ptr, size_t old_size,
     20                            size_t new_size, size_t align) {
     21   unsigned char* out = audit_alloc(heap, new_size, align);
     22   const unsigned char* old = ptr;
     23   size_t copy_size = old_size < new_size ? old_size : new_size;
     24   size_t i;
     25   if (!out) return NULL;
     26   for (i = 0; old && i < copy_size; ++i) out[i] = old[i];
     27   return out;
     28 }
     29 
     30 static void audit_free(KitHeap* heap, void* ptr, size_t size) {
     31   (void)heap;
     32   (void)ptr;
     33   (void)size;
     34 }
     35 
     36 static void audit_diag(KitDiagSink* sink, KitDiagKind kind, KitSrcLoc loc,
     37                        const char* fmt, va_list ap) {
     38   (void)sink;
     39   (void)kind;
     40   (void)loc;
     41   (void)fmt;
     42   (void)ap;
     43 }
     44 
     45 int main(void) {
     46   unsigned char storage[4u * 1024u * 1024u];
     47   AuditArena arena = {storage, sizeof(storage), 0};
     48   KitHeap heap = {audit_alloc, audit_realloc, audit_free, &arena};
     49   KitDiagSink diag = {audit_diag, NULL, 0, 0};
     50   KitContext context = {&heap, NULL, &diag, NULL, -1};
     51   KitTargetSpec spec;
     52   KitTargetOptions options = {0};
     53   KitTarget* target = NULL;
     54   KitCompiler* compiler = NULL;
     55 
     56   if (!kit_target_from_triple("aarch64-apple-darwin", &spec)) return 10;
     57   options.spec = spec;
     58   if (kit_target_new(&context, &options, &target) != KIT_OK) return 11;
     59   if (kit_compiler_new(target, &context, &compiler) != KIT_OK) {
     60     kit_target_free(target);
     61     return 12;
     62   }
     63   if (!kit_language_name(compiler, KIT_LANG_C)) {
     64     kit_compiler_free(compiler);
     65     kit_target_free(target);
     66     return 13;
     67   }
     68   kit_compiler_free(compiler);
     69   kit_target_free(target);
     70   return 0;
     71 }