From d9d1a8a51ea7cd7e7076724918008b6adb1302ca Mon Sep 17 00:00:00 2001 From: Indrajith K L Date: Mon, 10 Nov 2025 01:58:00 +0530 Subject: Add flexible module loading and complete file embedding - Support any folder structure (no hard-coded folders) - Embed all file types recursively from any folder - Fix require() dot-to-slash conversion for embedded modules - Clean build folder for fresh builds every time - Generate empty headers for Lua-only projects Backward compatible with existing projects. --- scripts/embed_lua.py | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) (limited to 'scripts/embed_lua.py') diff --git a/scripts/embed_lua.py b/scripts/embed_lua.py index 9562354..0d20921 100644 --- a/scripts/embed_lua.py +++ b/scripts/embed_lua.py @@ -27,7 +27,17 @@ def embed_files(output_file, input_files): data = inf.read() var_name = sanitize_name(input_file) - f.write(f'/* Embedded file: {input_file} */\n') + # Get relative path for better module loading + # Try to extract path relative to common directories + relative_name = input_file + for prefix in ['build/', 'build\\']: + if prefix in input_file: + parts = input_file.split(prefix, 1) + if len(parts) > 1: + relative_name = parts[1] + break + + f.write(f'/* Embedded file: {relative_name} */\n') f.write(f'static const unsigned char embedded_lua_{idx}_{var_name}[] = {{\n') for i, byte in enumerate(data): @@ -55,18 +65,32 @@ def embed_files(output_file, input_files): f.write('static const EmbeddedLuaFile embedded_lua_files[] = {\n') for idx, input_file in enumerate(input_files): var_name = sanitize_name(input_file) - # Store both original filename and basename for require compatibility - basename = os.path.basename(input_file) - f.write(f' {{ "{basename}", embedded_lua_{idx}_{var_name}, embedded_lua_{idx}_{var_name}_len }},\n') + # Store relative path for proper require() support + relative_name = input_file + for prefix in ['build/', 'build\\']: + if prefix in input_file: + parts = input_file.split(prefix, 1) + if len(parts) > 1: + relative_name = parts[1] + break + # Normalize path separators + relative_name = relative_name.replace('\\', '/') + f.write(f' {{ "{relative_name}", embedded_lua_{idx}_{var_name}, embedded_lua_{idx}_{var_name}_len }},\n') f.write('};\n\n') f.write(f'static const int embedded_lua_file_count = {len(input_files)};\n\n') - # Main entry point (first file) - var_name = sanitize_name(input_files[0]) + # Main entry point (first file with 'main.lua' in name, or first file) + main_idx = 0 + for idx, input_file in enumerate(input_files): + if 'main.lua' in input_file.lower(): + main_idx = idx + break + + var_name = sanitize_name(input_files[main_idx]) f.write('/* Main entry point */\n') - f.write(f'#define embedded_main_lua embedded_lua_0_{var_name}\n') - f.write(f'#define embedded_main_lua_len embedded_lua_0_{var_name}_len\n\n') + f.write(f'#define embedded_main_lua embedded_lua_{main_idx}_{var_name}\n') + f.write(f'#define embedded_main_lua_len embedded_lua_{main_idx}_{var_name}_len\n\n') f.write('#endif /* EMBEDDED_MAIN_H */\n') -- cgit v1.2.3