COMPILES TO EXE

This commit is contained in:
Pasha Bibko
2025-05-03 21:48:16 +01:00
parent 3386272f2a
commit 8d9c850206
8 changed files with 92 additions and 184 deletions

View File

@@ -1,16 +1,57 @@
using System;
using System.Diagnostics;
namespace LX_Build
{
class Program
{
static void Main(string[] args)
static void CompileToObj(string inPath, string outPath)
{
// Initalises the CPP interface //
// The command to compile the IR to .obj //
string command = $"llc -filetype=obj -o \"{outPath}\" \"{inPath}\"";
// Runs the command //
CommandProcess process = new(command);
if (process.ExitCode() == 0)
{
Console.WriteLine(inPath + " -> " + outPath);
return;
}
Console.WriteLine(process.Error());
}
static void LinkToExe(string objectFile)
{
// The command to link the object file to an .exe //
string command = $"lld-link /OUT:example/Main.exe {objectFile} /ENTRY:main";
// Runs the command //
CommandProcess process = new(command);
if (process.ExitCode() == 0)
{
Console.WriteLine(objectFile + " -> " + "Main.exe");
return;
}
Console.WriteLine(process.Error());
}
static void Main()
{
// Initalises the CPP interface, MUST ALWAYS BE CALLED FIRST //
LX_API.Init();
// Generates LLVM IR with the example files //
_ = LX_API.GenIR("example/main.lx", "example/main.ll", "example/log");
// Compilers the LLVM IR to an object file using the command line //
CompileToObj("example/main.ll", "example/main.obj");
// Links the object file to an .exe //
LinkToExe("example/main.obj");
}
}
}