From 6e2a99a6f46c3139f4433d568ea54f0f8f24b333 Mon Sep 17 00:00:00 2001 From: nub31 Date: Mon, 18 Aug 2025 21:25:03 +0200 Subject: [PATCH] Fix archive issues in cli --- example/src/main.nub | 13 ++++- src/compiler/NubLang.CLI/NubLang.CLI.csproj | 6 ++- src/compiler/NubLang.CLI/Program.cs | 47 ++++++++++-------- .../assets/{libruntime_x64.a => runtime.o} | Bin 7550 -> 4928 bytes src/compiler/NubLang.CLI/assets/x64.o | Bin 0 -> 2344 bytes .../NubLang/Generation/QBE/QBEGenerator.cs | 2 +- src/runtime/.gitignore | 3 +- src/runtime/makefile | 14 +++--- 8 files changed, 51 insertions(+), 34 deletions(-) rename src/compiler/NubLang.CLI/assets/{libruntime_x64.a => runtime.o} (55%) create mode 100644 src/compiler/NubLang.CLI/assets/x64.o diff --git a/example/src/main.nub b/example/src/main.nub index 8bf7d2e..d063ee0 100644 --- a/example/src/main.nub +++ b/example/src/main.nub @@ -1,8 +1,19 @@ // c extern func puts(text: cstring) +struct Human { + name: cstring + age: u32 +} + func main(args: []cstring): i64 { - puts("Hello, World") + let x: Human = struct { + name = "Oliver" + age = 23 + } + + puts(x.name) + return 0 } diff --git a/src/compiler/NubLang.CLI/NubLang.CLI.csproj b/src/compiler/NubLang.CLI/NubLang.CLI.csproj index a686430..2f25112 100644 --- a/src/compiler/NubLang.CLI/NubLang.CLI.csproj +++ b/src/compiler/NubLang.CLI/NubLang.CLI.csproj @@ -14,8 +14,10 @@ - - + + + + diff --git a/src/compiler/NubLang.CLI/Program.cs b/src/compiler/NubLang.CLI/Program.cs index 2b9f706..3f4f122 100644 --- a/src/compiler/NubLang.CLI/Program.cs +++ b/src/compiler/NubLang.CLI/Program.cs @@ -124,32 +124,38 @@ for (var i = 0; i < typedSyntaxTrees.Count; i++) objectFiles.Add(objFilePath); } -const string runtimeName = "libruntime_x64.a"; - var resources = Assembly.GetExecutingAssembly().GetManifestResourceNames(); -var runtime = resources.First(r => r.EndsWith(runtimeName)); -await using var reader = Assembly.GetExecutingAssembly().GetManifestResourceStream(runtime); +string[] runtimeObjects = ["runtime.o", "x64.o"]; -if (reader == null) +foreach (var runtimeObject in runtimeObjects) { - Console.Error.WriteLine($"Cannot open stream to '{runtimeName}'"); - return 1; + var runtime = resources.First(r => r.EndsWith(runtimeObject)); + + await using var reader = Assembly + .GetExecutingAssembly() + .GetManifestResourceStream(runtime); + + if (reader == null) + { + Console.Error.WriteLine($"Cannot open read stream to '{runtimeObject}'"); + return 1; + } + + var runtimePath = Path.Combine("build", "runtime", runtimeObject); + var runtimeDir = Path.GetDirectoryName(runtimePath); + if (!string.IsNullOrEmpty(runtimeDir)) + { + Directory.CreateDirectory(runtimeDir); + } + + await using var writer = new FileStream(runtimePath, FileMode.Create); + + reader.CopyTo(writer); + + objectFiles.Add(runtimePath); } -var runtimePath = Path.Combine("build", "runtime", runtimeName); -var runtimeDir = Path.GetDirectoryName(runtimePath); -if (!string.IsNullOrEmpty(runtimeDir)) -{ - Directory.CreateDirectory(runtimeDir); -} - -await using var writer = new FileStream(runtimePath, FileMode.Create); - -reader.CopyTo(writer); - -objectFiles.Add(runtimePath); - var outPath = options.OutputPath ?? Path.Combine("build", "out.a"); var outDir = Path.GetDirectoryName(outPath); if (!string.IsNullOrEmpty(outDir)) @@ -163,4 +169,5 @@ if (!archiveResult) return 1; } + return 0; \ No newline at end of file diff --git a/src/compiler/NubLang.CLI/assets/libruntime_x64.a b/src/compiler/NubLang.CLI/assets/runtime.o similarity index 55% rename from src/compiler/NubLang.CLI/assets/libruntime_x64.a rename to src/compiler/NubLang.CLI/assets/runtime.o index d43a5680dbe79e118fb2c5f907a572b0754c015a..26e46783222c42d32759941cddfbcdfee24891d2 100644 GIT binary patch delta 332 zcmexobwF+7t!S3|0BgQO20UK_iy9Yg+rrAG#%5;rYz41c?-eVJLV<#+ASnT%q%HS9 z|DNHbJ~chv<20jZF@F%7^PXuuu@>_$9^5L+)U>Hlg3UY1MMBLl*!5Bk&+o&5Z%!@M zc;&iL!)505(tTRyO461Bd8R^Eiyz&vx|*N=S}j{^VkXCvUNsv|x2xOpru|=|Cf~&v zyzj-;=;Qwje%$Q0s7k5O+;4qWNOWD#OOKsF~@sG;mMad^%)H&Gjqi=T24;p za%YsCyqc?AQiTBm)EFT&7m#8DVy(&6-0vlwAc739F=U;2${C$D@8!uVivyp;In IOM)Iu0L8C$X#fBK delta 1748 zcma)5du&rx7(b`)+pV|HrK}TLP?rr{Z?|?uV1riYHXT8TOq3z(>t-8nE4JMzi&7rb zY($f~FF`bF#1SRxlHpKe)QE&Q`~#G*=pxFp7?~z08l#Cw#B=UFw;79xe#yDt^Zvfa z`OeAmzgKTtS{F^lJJ%Wo&&}kUr^@pDug9~h5D+mUgtX+meDiU*U{t^6?)G#hn#!P5 zUvH+XNAxCHqQdVa&wS)yARuK9tg5+FE+JwZZ`0)RVSc~Qa?f1FM@VBCD%;}y=Kb`y zq0$!n;TQUMOkHR@>au_L_HQ%ScUL~Sefj6-@`vmrm#zFHOm8XM6x{v%bFVIcG_Ha); za^JdVS5JM<&y1)Cf>XzjYcAfk%5#9jK|D7}K_?upKzVRonu9 z8U)-4m0UZ142HQT+zRKpU8UQ|I4PB5nbR@r$caJJcoh%8rXnYfL08c(JTNg^bVGw@ zCT1<|s=912P?$2E;D1fJ#?MCXi5T-0RmU`PI{FPsVhGug6*Ujf{Xo^`;mPL7lXXNg zYY~iT{kaw*YmotY3C9@!#hWOjRg*&mw~B}osfcWrG^rHVKin>JT$&l%ox&(QPDy7GVQT#3m-?L=KtB zU%VGvk;Q4nHnW;9<8SBfbaNRgzxkMMVLbcdg=i!ai6PAE5}s3g7b8?Ojapa%b%I>L z|E;@eL#rqJfTzYA2zY&f`DO5y&INzyd~iv(2pfo{M6E_VB-JHa3vC6CnC;j??2a6J zOg+)AURs-SRg}}luiubq8Fdm;UZ$*(Rbql-uVA{;uwqyA+6D1dild%6=){z%QIj-% z!YPm%e$qSPioQ5(r7l7Xqg}FDil&>b&=Mw46l&+eT5Q)+DG0Mg_Qi#zAr|G13fNF> zy48^qyQAKWn9U$>BASUJZ!DdLizb&VA;$VT+Pk}YMdB&QWUMKOn`$}PL^aH>0}HRm z9tiVp?0_S@8$!GW8qAK$aaO=0lAn^99GYM0Ua^i&Yg!%1@{V@gb8MCD>>yAjMA?D0j||i ArT_o{ diff --git a/src/compiler/NubLang.CLI/assets/x64.o b/src/compiler/NubLang.CLI/assets/x64.o new file mode 100644 index 0000000000000000000000000000000000000000..f4f53cd0591139fe4fa14ee096425a972817a52a GIT binary patch literal 2344 zcmb_cPfyfP5TCad1d;uNCK!pjF-kaSs|GlUSrb$YMop9iPteM9S+m)3ICzko zM-LuMym<5@5HD~v@gUzozk?<^)6R6e&n6n{@KrU<@j-u>18JxeL4d3;TQ5(JBp)PxLA-a_-z;f&!>L!X&pc{Kc3%1U7M$ z`d%C*MQmJXoGYLiO9Aat?8Uhh45wS;b5G_v1uUhU^>#};?Pep4v=iu!cIfyW?{d@i z>rNOvb%Kr`HCh@XH>m3PVw;&6DwyA8JQcpgdktVy>$NhuZ#r*_t`U?l6NwgrQ!oi!|oCzgd`+k)b67|o}g(+_2kS@i|2ggB!JT5iK9 zT&^K$iuv&~k@K{Patv4IIAAhHd-xRlGB)9hKV$F(pJSZ*mop|v-kkDS1h9;MPBLuaTbGczi)0q2WJk3&HigKyUVK zy8(Wp8p|XpDEhxh6|>O0%X}nhjg7u99I@;f6J-JyonsAGRzC2MPcc|RO|fz>1fOI) zdq*hbF+Fm`tbYkPl=ENXuVU;`T-iH;E-cdnMecdx_4*h8E*fS}wD*z;4_J#bx%0S@ zH@^dJsLO#gKRP3GeoKf^PP5N1h>^(sPrP2Q(#Lb$5L-B;M;V;Tf@qsujaXj)H9nA6 z98dkzU)Ah?6EQOApur2=$?N|U_b+p${*U95c)7o? z5u;MVLo=3bu0JmTYlhQzCf~e!L_J{QA;**oo(@f2~Pa$tPsr+vVBa!-vm;870 P;^Uzp>75W+oAJK@gWaBb literal 0 HcmV?d00001 diff --git a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs index af0acbd..4734cdc 100644 --- a/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs +++ b/src/compiler/NubLang/Generation/QBE/QBEGenerator.cs @@ -939,7 +939,7 @@ public class QBEGenerator { destination = TmpName(); var size = SizeOf(structInitializer.StructType); - _writer.Indented($"{destination} =l alloc8 {size}"); + _writer.Indented($"{destination} =l call $malloc(l {size})"); } foreach (var field in structDef.Fields) diff --git a/src/runtime/.gitignore b/src/runtime/.gitignore index 4c66b30..378eac2 100644 --- a/src/runtime/.gitignore +++ b/src/runtime/.gitignore @@ -1,2 +1 @@ -bin -bin-int \ No newline at end of file +build diff --git a/src/runtime/makefile b/src/runtime/makefile index d868586..ef774d8 100644 --- a/src/runtime/makefile +++ b/src/runtime/makefile @@ -3,14 +3,12 @@ TARGET ?= x64 CFLAGS = -Wall -Werror -Wextra -g -libruntime: bin-int/runtime.o - $(CC) $(CFLAGS) -c targets/$(TARGET).s -o bin-int/$(TARGET).o - mkdir -p bin - ar rcs bin/libruntime_$(TARGET).a bin-int/runtime.o bin-int/$(TARGET).o +libruntime: build/runtime.o + $(CC) $(CFLAGS) -c targets/$(TARGET).s -o build/$(TARGET).o -bin-int/runtime.o: runtime/runtime.c - mkdir -p bin-int - $(CC) $(CFLAGS) -c runtime/runtime.c -o bin-int/runtime.o +build/runtime.o: runtime/runtime.c + mkdir -p build + $(CC) $(CFLAGS) -c runtime/runtime.c -o build/runtime.o clean: - rm -r bin bin-int + rm -r build