From 44a102b2a116adeb520534e203601779a3d9fbdc Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Sat, 28 Mar 2015 21:16:48 -0400 Subject: [PATCH] Initial commit --- .gitmodules | 3 +++ Gemfile | 4 ++++ Gemfile.lock | 28 ++++++++++++++++++++++++++++ build.rb | 28 ++++++++++++++++++++++++++++ modules/build-system | 1 + source/runtime/gc.c | 37 +++++++++++++++++++++++++++++++++++++ source/runtime/gc.h | 19 +++++++++++++++++++ source/runtime/main.c | 11 +++++++++++ 8 files changed, 131 insertions(+) create mode 100644 .gitmodules create mode 100644 Gemfile create mode 100644 Gemfile.lock create mode 100755 build.rb create mode 160000 modules/build-system create mode 100644 source/runtime/gc.c create mode 100644 source/runtime/gc.h create mode 100644 source/runtime/main.c diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..234e012 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "modules/build-system"] + path = modules/build-system + url = https://github.com/mikedlowis/build-system.git diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..894906d --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' +gem 'rake', '>= 0' +gem 'rscons', '>= 0' +gem 'rspec', '>= 0' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..22e438c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,28 @@ +GEM + remote: https://rubygems.org/ + specs: + diff-lcs (1.2.5) + json (1.8.1) + rake (10.3.2) + rscons (1.8.1) + json (~> 1.0) + rspec (3.1.0) + rspec-core (~> 3.1.0) + rspec-expectations (~> 3.1.0) + rspec-mocks (~> 3.1.0) + rspec-core (3.1.7) + rspec-support (~> 3.1.0) + rspec-expectations (3.1.2) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.1.0) + rspec-mocks (3.1.3) + rspec-support (~> 3.1.0) + rspec-support (3.1.2) + +PLATFORMS + ruby + +DEPENDENCIES + rake + rscons + rspec diff --git a/build.rb b/build.rb new file mode 100755 index 0000000..da49bfb --- /dev/null +++ b/build.rb @@ -0,0 +1,28 @@ +#!/usr/bin/ruby + +require_relative 'modules/build-system/setup' + +#------------------------------------------------------------------------------ +# Environment Definitions +#------------------------------------------------------------------------------ +# Define the default compiler environment +base_env = BuildEnv.new do |env| + # Move the object files to the build dir + env.build_dir('source','build/obj/source') +end + +#------------------------------------------------------------------------------ +# Release Build Targets +#------------------------------------------------------------------------------ +base_env.Library('build/libatc.a', Dir['source/runtime/*.c']) + +#------------------------------------------------------------------------------ +# Test Build Targets +#------------------------------------------------------------------------------ +#if Opts[:profile].include? "test" +# compiler_libs = ['build/lib/libparse-test.a'] + runtime_libs +# test_env.Library('build/lib/libparse-test.a', FileList['source/libparse/*.c']) +# test_env.Program('build/bin/sclpl-test', FileList['source/sclpl/*.c'] + compiler_libs) +# test_env.Command('RSpec', [], 'CMD' => [ +# 'rspec', '--pattern', 'spec/**{,/*/**}/*_spec.rb', '--format', 'documentation']) +#end diff --git a/modules/build-system b/modules/build-system new file mode 160000 index 0000000..f1a522b --- /dev/null +++ b/modules/build-system @@ -0,0 +1 @@ +Subproject commit f1a522b4aed7c58ce3c8467ff8a00f00c3e27e64 diff --git a/source/runtime/gc.c b/source/runtime/gc.c new file mode 100644 index 0000000..541d26b --- /dev/null +++ b/source/runtime/gc.c @@ -0,0 +1,37 @@ +#include "gc.h" +#include + +/*****************************************************************************/ + +typedef struct { + uint64_t objmap; + uint8_t data[]; +} obj_t; + +void gc_init(void* stack_bottom) +{ +} + +void* gc_alloc(uint64_t objmap, size_t num_slots) +{ + obj_t* obj; + if (num_slots <= (sizeof(uint64_t) - 1u)) { + obj = (void*)malloc(sizeof(obj_t) + (num_slots * sizeof(uintptr_t))); + } else { + obj = (void*)malloc(sizeof(obj_t) + (num_slots * sizeof(uintptr_t))); + } + obj->objmap = objmap; + obj++; + return (void*)obj; +} + +void gc_collect(void) +{ +} + +void gc_shutdown(void) +{ +} + +/*****************************************************************************/ + diff --git a/source/runtime/gc.h b/source/runtime/gc.h new file mode 100644 index 0000000..dd14cc4 --- /dev/null +++ b/source/runtime/gc.h @@ -0,0 +1,19 @@ +/** + @file gc.h + @brief TODO: Describe this file +*/ +#ifndef GC_H +#define GC_H + +#include +#include + +void gc_init(void* stack_bottom); + +void* gc_alloc(uint64_t objmap, size_t size); + +void gc_collect(void); + +void gc_shutdown(void); + +#endif /* GC_H */ diff --git a/source/runtime/main.c b/source/runtime/main.c new file mode 100644 index 0000000..c232333 --- /dev/null +++ b/source/runtime/main.c @@ -0,0 +1,11 @@ +#include "gc.h" + +int main(int argc, char** argv) { + extern int ATC_Main(int argc, char** argv); + int ret_code; + gc_init(&ret_code); + ret_code = ATC_Main(argc, argv); + gc_shutdown(); + return ret_code; +} + -- 2.54.0