2025-09-10 01:44:09 +03:00
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
2025-09-10 04:09:26 +03:00
|
|
|
using System.Linq;
|
2025-09-10 01:44:09 +03:00
|
|
|
|
|
|
|
|
class Program {
|
2025-09-10 04:09:26 +03:00
|
|
|
static void Main(string[] args) {
|
|
|
|
|
// Resolve vk.xml path
|
|
|
|
|
string vkXml =
|
|
|
|
|
args.FirstOrDefault(a => a.EndsWith("vk.xml", StringComparison.OrdinalIgnoreCase))
|
|
|
|
|
?? GuessVkXmlFromEnv()
|
|
|
|
|
?? @"C:\VulkanSDK\1.4.313.0\share\vulkan\registry\vk.xml";
|
2025-09-10 01:44:09 +03:00
|
|
|
|
2025-09-10 04:09:26 +03:00
|
|
|
if (!File.Exists(vkXml)) {
|
|
|
|
|
Console.Error.WriteLine($"vk.xml not found: {vkXml}");
|
|
|
|
|
Environment.Exit(1);
|
2025-09-10 01:44:09 +03:00
|
|
|
}
|
|
|
|
|
|
2025-09-10 04:09:26 +03:00
|
|
|
// Output dir (.../out/VulkanPP)
|
|
|
|
|
string outRoot = args.FirstOrDefault(a => a.StartsWith("--out="))?.Substring("--out=".Length)
|
|
|
|
|
?? Path.Combine(Environment.CurrentDirectory, "out");
|
|
|
|
|
string outDir = Path.Combine(outRoot, "VulkanPP");
|
2025-09-10 01:44:09 +03:00
|
|
|
Directory.CreateDirectory(outDir);
|
|
|
|
|
|
2025-09-10 04:09:26 +03:00
|
|
|
Console.WriteLine($"Parsing: {vkXml}");
|
|
|
|
|
var spec = VkSpec.Load(vkXml);
|
|
|
|
|
|
|
|
|
|
// Optional sugar methods (empty by default)
|
|
|
|
|
var sugar = Array.Empty<SugarClassSpec>();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine($"Generating to: {outDir}");
|
2025-09-10 01:44:09 +03:00
|
|
|
var gen = new Generator(spec, outDir, sugar);
|
|
|
|
|
gen.GenerateAll();
|
|
|
|
|
|
2025-09-10 04:09:26 +03:00
|
|
|
Console.WriteLine("Done.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static string? GuessVkXmlFromEnv() {
|
|
|
|
|
var sdk = Environment.GetEnvironmentVariable("VULKAN_SDK");
|
|
|
|
|
if (string.IsNullOrWhiteSpace(sdk)) return null;
|
|
|
|
|
string candidate = Path.Combine(sdk, "share", "vulkan", "registry", "vk.xml");
|
|
|
|
|
return File.Exists(candidate) ? candidate : null;
|
2025-09-10 01:44:09 +03:00
|
|
|
}
|
|
|
|
|
}
|