Fixed duskdefs
Some checks failed
Build Dusk / build-linux (push) Has been cancelled
Build Dusk / build-psp (push) Has been cancelled
Build Dusk / run-tests (push) Has been cancelled

This commit is contained in:
2026-01-26 00:18:43 -06:00
parent 9897dbe031
commit 2c9d0c6cff
12 changed files with 111 additions and 102 deletions

View File

@@ -5,6 +5,7 @@
add_subdirectory(run_python)
add_subdirectory(env_to_h)
add_subdirectory(csv_to_enum)
# Function that adds an asset to be compiled
function(add_asset ASSET_TYPE ASSET_PATH)

View File

@@ -0,0 +1,35 @@
# Copyright (c) 2026 Dominic Masters
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT
function(dusk_csv_to_enum INPUT_PATH OUTPUT_NAME_RELATIVE TYPEDEF PREFIX TAKE_COLUMN)
set(NULL_ENTRY TRUE)
set(COUNT_ENTRY TRUE)
# Take NULL_ENTRY and COUNT_ENTRY from ARGN
foreach(ARG IN LISTS ARGN)
if(ARG STREQUAL "NO_NULL_ENTRY")
set(NULL_ENTRY FALSE)
elseif(ARG STREQUAL "NO_COUNT_ENTRY")
set(COUNT_ENTRY FALSE)
endif()
endforeach()
set(DUSK_DEFS_TARGET_NAME "DUSK_DEFS_${OUTPUT_NAME_RELATIVE}")
string(REPLACE "." "_" DUSK_DEFS_TARGET_NAME ${DUSK_DEFS_TARGET_NAME})
string(REPLACE "/" "_" DUSK_DEFS_TARGET_NAME ${DUSK_DEFS_TARGET_NAME})
dusk_run_python(
${DUSK_DEFS_TARGET_NAME}
tools.csv_to_enum
--csv ${INPUT_PATH}
--output ${DUSK_GENERATED_HEADERS_DIR}/${OUTPUT_NAME_RELATIVE}
--typedef ${TYPEDEF}
--prefix ${PREFIX}
--take-column ${TAKE_COLUMN}
--null-entry ${NULL_ENTRY}
--count-entry ${COUNT_ENTRY}
)
add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${DUSK_DEFS_TARGET_NAME})
endfunction()

View File

@@ -0,0 +1,50 @@
import argparse
import os
import csv
parser = argparse.ArgumentParser(description="Convert CSV to .h defines")
parser.add_argument("--csv", required=True, help="Path to CSV file")
parser.add_argument("--output", required=True, help="Path to output .h file")
parser.add_argument("--prefix", default="", help="Prefix for each define")
parser.add_argument("--typedef", required=True, help="Typedef name for the enum")
parser.add_argument("--take-column", required=True, help="Column name to take the values for the enum for")
parser.add_argument("--null-entry", default=None, help="Optional name for a NULL/INVALID entry")
parser.add_argument("--count-entry", default=None, help="Optional name for a COUNT entry")
args = parser.parse_args()
outHeader = ""
outHeader += "#include \"dusk.h\"\n\n"
with open(args.csv, newline='') as csvfile:
reader = csv.reader(csvfile)
headers = next(reader)
if args.take_column not in headers:
raise ValueError(f"Column '{args.take_column}' not found in CSV headers")
take_column_index = headers.index(args.take_column)
# Extract entries
entries = []
for row in reader:
value = row[take_column_index]
clean_define_name = value.replace(" ", "_").upper()
if clean_define_name in entries:
continue # Avoid duplicates
entries.append(clean_define_name)
# Gen enum.
outHeader += f"typedef enum {{\n"
if args.null_entry == "TRUE":
outHeader += f" {args.prefix}_NULL = 0,\n\n"
for entry in entries:
outHeader += f" {args.prefix}_{entry},\n"
if args.count_entry == "TRUE":
outHeader += f"\n {args.prefix}_COUNT,\n"
outHeader += f"}} {args.typedef};\n\n"
# Write to output file (mkdirp if needed)
os.makedirs(os.path.dirname(args.output), exist_ok=True)
with open(args.output, 'w') as outFile:
outFile.write(outHeader)

View File

@@ -8,8 +8,8 @@ function(dusk_env_to_h INPUT_PATH OUTPUT_NAME_RELATIVE)
dusk_run_python(
${DUSK_DEFS_TARGET_NAME}
tools.env_to_h
--env ${INPUT_PATH}
--output ${DUSK_BUILT_ASSETS_DIR}/${OUTPUT_NAME_RELATIVE}
--env "${CMAKE_CURRENT_LIST_DIR}/${INPUT_PATH}"
--output ${DUSK_GENERATED_HEADERS_DIR}/${OUTPUT_NAME_RELATIVE}
)
add_dependencies(${DUSK_LIBRARY_TARGET_NAME} ${DUSK_DEFS_TARGET_NAME})
endfunction()

View File

@@ -11,7 +11,6 @@ args = parser.parse_args()
load_dotenv(dotenv_path=args.env)
fileDefs = dotenv_values(dotenv_path=args.env)
outHeader = ""
outHeader += "#include \"dusk.h\"\n\n"
for key, value in fileDefs.items():