From 17d0b7bb2bc05b6c697862345783303d8e7a607b Mon Sep 17 00:00:00 2001 From: Hunter Stasonis Date: Sat, 5 Apr 2025 11:31:10 -0400 Subject: [PATCH] work on compile command generation --- README.md | 23 ++++++++++++ kettle | Bin 23744 -> 17968 bytes kettle.c | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ded4192 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Kettle +Kettle is a zero dependency build system for HLSL, and GLSL shaders. + +## About +Kettle is a build system for shaders. It takes in a build script, compiles the shaders, and prints a "registry" to standard error +This registry file contains information on how to find the compiled shaders, relative to the build folder. + +## Usage +``` +# Pipe stdout to /dev/null and stderr to Shaders.krg +./kettle kettle.in > /dev/null 2> Shaders.krg + +cat Shaders.krg +// Kettle shader registry file + +$Format SPIRV + +$ShaderList Vertex + $Shader HDR.bin + $Shader Shadows.bin + $Shader WorldShader.bin +$EndShaderList +``` diff --git a/kettle b/kettle index 22f7444e59288d52a00b135d09abd92a44334355..2a750131cbf32583a1488be2d43d5890e85ca907 100755 GIT binary patch literal 17968 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 literal 23744 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 X)w1-M&Jq!;-da@L +#include #include #include #include #include +#include /** * Kettle - Build system for HLSL and GLSL shaders @@ -11,7 +13,11 @@ */ /// Type of file -typedef enum { e_kettle_file_hlsl, e_kettle_file_glsl } kettle_file; +typedef enum { + e_kettle_file_hlsl, + e_kettle_file_glsl, + e_kettle_file_unknown +} kettle_file; typedef enum { e_kettle_compiler_dxc, e_kettle_compiler_glslc } kettle_compiler; @@ -64,6 +70,16 @@ typedef struct { char **pArgs; } kettle_arg_list_t; +kettle_file kettle_get_file_type(const char *pFileName) { + if (strstr(pFileName, ".glsl") != NULL) { + return e_kettle_file_glsl; + } else if (strstr(pFileName, ".hlsl") != NULL) { + return e_kettle_file_hlsl; + } else { + return e_kettle_file_unknown; + } +} + void kettle_help() { printf("Kettle Build System\n"); printf("Description: Compiles kettle information files and prints the result " @@ -111,6 +127,23 @@ char *kettle_pop_index(const char *pInput, int index) { return newStr; } +/** + * Concat the contents of pInput with pInput2, automatically reallocating the + * memory of pInput + * @param pInput Input string buffer + * @param pInput2 Input to append to pInput + */ +char *kettle_str_concat(char *pInput, const char *pInput2) { + int newSize = strlen(pInput) + strlen(pInput2) + 1; // +1 for null byte + newSize *= sizeof(char); + + pInput = realloc(pInput, newSize); + + strcat(pInput, pInput2); + + return pInput; +} + kettle_arg_list_t kettle_make_arg_list(const char *pInput) { int size = strlen(pInput); @@ -237,6 +270,30 @@ void kettle_handle_cmd(kettle_arg_list_t argList, kettle_input_t *pInput) { printf("> Error: Cannot add shader when no compiler batch is active!\n"); exit(EXIT_FAILURE); } + + const char *pFileName = argList.pArgs[1]; + + kettle_file_info_t fileInf; + memset(&fileInf, 0, sizeof(fileInf)); + fileInf.eFileType = kettle_get_file_type(pFileName); + + if (fileInf.eFileType == e_kettle_file_unknown) { + printf("> Error: Cannot determine file type of path '%s'!\n", pFileName); + exit(EXIT_FAILURE); + } + + fileInf.pFileName = pFileName; + + // Allocate a new file + + pInput->pCurrentCompilerBatch->numFiles++; + + pInput->pCurrentCompilerBatch->pFiles = (kettle_file_info_t *)realloc( + pInput->pCurrentCompilerBatch->pFiles, + sizeof(kettle_file_info_t) * pInput->pCurrentCompilerBatch->numFiles); + + pInput->pCurrentCompilerBatch + ->pFiles[pInput->pCurrentCompilerBatch->numFiles - 1] = fileInf; } else { printf("> Warning: Cannot process unknown compiler command '%s'\n", pCmd); } @@ -284,6 +341,22 @@ kettle_input_t kettle_read_input(const char *pInput) { return input; } +const char *kettle_hlsl_compile(const kettle_compiler_t *pCompiler, + const kettle_compiler_batch_t *pBatch, + const kettle_file_info_t *pFileInfo) { + char *pCommand = + (char *)malloc((strlen(pCompiler->pCompilerPath) + 1) * sizeof(char)); + + strcpy(pCommand, pCompiler->pCompilerPath); + + // This might be a little slow, but we need to create the command + + // We force the DXC compiler to output spirv, this could change later + pCommand = kettle_str_concat(pCommand, " -spirv"); + + return pCommand; +} + int main(int argc, char **argv) { if (argc <= 1) { kettle_help(); @@ -294,5 +367,34 @@ int main(int argc, char **argv) { printf("> Will process input file: %s\n", inFile); - kettle_read_input(inFile); + kettle_input_t inputProcessed = kettle_read_input(inFile); + + printf("> Will process %i compiler batche(s)...\n", + inputProcessed.numCompilerBatches); + + for (int i = 0; i < inputProcessed.numCompilerBatches; ++i) { + const kettle_compiler_batch_t batch = inputProcessed.pCompilerBatches[i]; + + printf("> Change directory to: %s\n", batch.pWorkingDir); + + if (chdir(batch.pWorkingDir) != 0) { + printf("> Error: Failed to chdir into new directory: %s\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + for (int x = 0; x < batch.numFiles; ++x) { + kettle_file_info_t file = batch.pFiles[x]; + + kettle_compiler_t *pCompiler = + kettle_input_get_compiler(&inputProcessed, e_kettle_compiler_dxc); + + if (pCompiler == NULL) { + printf("> Error: Failed to find compatible DXC compiler!\n"); + exit(EXIT_FAILURE); + } + + printf("> %s\n", kettle_hlsl_compile(pCompiler, &batch, &file)); + } + } }