Creating generic term renderer.

This commit is contained in:
2025-10-28 16:48:35 -05:00
parent 358fa9a493
commit b6aab03370
27 changed files with 770 additions and 155 deletions

6
tools/CMakeLists.txt Normal file
View File

@@ -0,0 +1,6 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
add_subdirectory(embed)

View File

@@ -0,0 +1,22 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
function(embed_file TARGET_NAME INPUT_FILE_ABS OUTPUT_FILE_HEADER C_VAR_NAME)
set(OUTPUT_FILE_ABS "${CMAKE_BINARY_DIR}/generated_headers/${OUTPUT_FILE_HEADER}")
# Create a custom target
add_custom_target(
"${INPUT_FILE}_embed"
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/generated_headers"
COMMAND ${CMAKE_COMMAND} -DINPUT_FILE="${INPUT_FILE_ABS}" -DOUTPUT_FILE="${OUTPUT_FILE_ABS}" -DC_VAR_NAME="${C_VAR_NAME}" -P "${TOOLS_DIR}/embed/embed.cmake"
DEPENDS "${INPUT_FILE_ABS}"
)
# Add the generated header to the target's include directories
target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_BINARY_DIR}/generated_headers")
# Make the target depend on the custom target
add_dependencies(${TARGET_NAME} "${INPUT_FILE}_embed")
endfunction()

21
tools/embed/embed.cmake Normal file
View File

@@ -0,0 +1,21 @@
# Copyright (c) 2025 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
# We are passed -DINPUT_FILE (absolute) and -DOUTPUT_FILE (absolute) and -DC_VAR_NAME (name of the C variable to hold the data)
file(READ "${INPUT_FILE}" RAW_DATA HEX)
string(LENGTH "${RAW_DATA}" DATA_LENGTH)
set(OUTPUT_CONTENT "/* This file is auto-generated. Do not edit directly. */\n")
set(OUTPUT_CONTENT "${OUTPUT_CONTENT}#pragma once\n#include \"microrpg.h\"\n\n")
set(OUTPUT_CONTENT "${OUTPUT_CONTENT}static const uint8_t ${C_VAR_NAME}_DATA[] = {\n ")
set(INDEX 0)
while(INDEX LESS DATA_LENGTH)
string(SUBSTRING "${RAW_DATA}" ${INDEX} 2 BYTE)
set(OUTPUT_CONTENT "${OUTPUT_CONTENT}0x${BYTE}, ")
math(EXPR INDEX "${INDEX} + 2")
endwhile()
set(OUTPUT_CONTENT "${OUTPUT_CONTENT}\n};\n\n")
set(OUTPUT_CONTENT "${OUTPUT_CONTENT}#define ${C_VAR_NAME}_SIZE ${DATA_LENGTH}u\n")
file(WRITE "${OUTPUT_FILE}" "${OUTPUT_CONTENT}")