...
This commit is contained in:
@@ -21,7 +21,7 @@ foreach (var file in args)
|
||||
}
|
||||
|
||||
var modules = Module.Collect(syntaxTrees);
|
||||
var compilationUnits = new List<CompilationUnit?>();
|
||||
var compilationUnits = new List<List<TopLevelNode>>();
|
||||
|
||||
for (var i = 0; i < args.Length; i++)
|
||||
{
|
||||
@@ -46,16 +46,48 @@ var cPaths = new List<string>();
|
||||
|
||||
Directory.CreateDirectory(".build");
|
||||
|
||||
var typedModules = modules.Select(x => (x.Key, TypedModule.FromModule(x.Key, x.Value, modules))).ToDictionary();
|
||||
|
||||
var moduleHeaders = new List<string>();
|
||||
|
||||
var commonHeaderOut = Path.Combine(".build", "runtime.h");
|
||||
|
||||
File.WriteAllText(commonHeaderOut, """
|
||||
#include <stddef.h>
|
||||
|
||||
void *rc_alloc(size_t size, void (*destructor)(void *self));
|
||||
void rc_retain(void *obj);
|
||||
void rc_release(void *obj);
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned long long length;
|
||||
char *data;
|
||||
} nub_string;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned long long length;
|
||||
void *data;
|
||||
} nub_slice;
|
||||
""");
|
||||
|
||||
moduleHeaders.Add(commonHeaderOut);
|
||||
|
||||
foreach (var typedModule in typedModules)
|
||||
{
|
||||
var header = HeaderGenerator.Generate(typedModule.Key, typedModule.Value);
|
||||
var headerOut = Path.Combine(".build", "modules", typedModule.Key + ".h");
|
||||
Directory.CreateDirectory(Path.Combine(".build", "modules"));
|
||||
File.WriteAllText(headerOut, header);
|
||||
moduleHeaders.Add(headerOut);
|
||||
}
|
||||
|
||||
for (var i = 0; i < args.Length; i++)
|
||||
{
|
||||
var file = args[i];
|
||||
var compilationUnit = compilationUnits[i];
|
||||
|
||||
if (compilationUnit == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var generator = new Generator(compilationUnit);
|
||||
var directory = Path.GetDirectoryName(file);
|
||||
if (!string.IsNullOrWhiteSpace(directory))
|
||||
@@ -74,6 +106,7 @@ foreach (var cPath in cPaths)
|
||||
{
|
||||
var objectPath = Path.ChangeExtension(cPath, "o");
|
||||
using var compileProcess = Process.Start("clang", [
|
||||
..moduleHeaders.SelectMany(x => new[] { "-include", x }),
|
||||
"-ffreestanding", "-std=c23",
|
||||
"-g", "-c",
|
||||
"-o", objectPath,
|
||||
|
||||
Reference in New Issue
Block a user