@@ -152,6 +152,44 @@ const ContentWriter = struct {
152
152
}
153
153
},
154
154
155
+ .gpt_part_table = > | data | {
156
+ try cw .code .writeAll ("gpt-part\n " );
157
+
158
+ if (data .legacy_bootable ) {
159
+ try cw .code .writeAll (" legacy-bootable\n " );
160
+ }
161
+
162
+ for (data .partitions ) | part | {
163
+ try cw .code .writeAll (" part\n " );
164
+ try cw .code .writeAll (" type " );
165
+ switch (part .type ) {
166
+ .name = > | name | {
167
+ try cw .code .writeAll (@tagName (name ));
168
+ },
169
+ .guid = > | guid_text | {
170
+ try cw .code .writeAll (& guid_text );
171
+ },
172
+ }
173
+ try cw .code .writeByte ('\n ' );
174
+
175
+ if (part .name ) | name | {
176
+ try cw .code .print (" name {s}\n " , .{name });
177
+ }
178
+ if (part .offset ) | offset | {
179
+ try cw .code .print (" offset {d}\n " , .{offset });
180
+ }
181
+ if (part .size ) | size | {
182
+ try cw .code .print (" size {d}\n " , .{size });
183
+ }
184
+ try cw .code .writeAll (" contains" );
185
+ try cw .render (part .data );
186
+ try cw .code .writeAll ("\n " );
187
+ try cw .code .writeAll (" endpart\n " );
188
+ }
189
+
190
+ try cw .code .writeAll ("endgpt" );
191
+ },
192
+
155
193
.vfat = > | data | {
156
194
try cw .code .print ("vfat {s}\n " , .{
157
195
@tagName (data .format ),
@@ -291,6 +329,7 @@ pub const Content = union(enum) {
291
329
fill : u8 ,
292
330
paste_file : std.Build.LazyPath ,
293
331
mbr_part_table : MbrPartTable ,
332
+ gpt_part_table : GptPartTable ,
294
333
vfat : FatFs ,
295
334
};
296
335
@@ -317,6 +356,35 @@ pub const MbrPartTable = struct {
317
356
};
318
357
};
319
358
359
+ pub const GptPartTable = struct {
360
+ legacy_bootable : bool = false ,
361
+ partitions : []const Partition ,
362
+
363
+ pub const Partition = struct {
364
+ type : union (enum ) {
365
+ name : enum {
366
+ unused ,
367
+ @"efi-system" ,
368
+ @"legacy-mbr" ,
369
+ @"bios-boot" ,
370
+ @"microsoft-basic-data" ,
371
+ @"microsoft-reserved" ,
372
+ @"windows-recovery" ,
373
+ @"plan9" ,
374
+ @"linux-swap" ,
375
+ @"linux-fs" ,
376
+ @"linux-reserved" ,
377
+ @"linux-lvm" ,
378
+ },
379
+ guid : [36 ]u8 ,
380
+ },
381
+ name : ? []const u8 = null ,
382
+ size : ? u64 = null ,
383
+ offset : ? u64 = null ,
384
+ data : Content ,
385
+ };
386
+ };
387
+
320
388
pub const FatFs = struct {
321
389
format : enum {
322
390
fat12 ,
0 commit comments