diff options
| -rw-r--r-- | BUILD_SCRIPTS.md | 213 | ||||
| -rw-r--r-- | CMakeLists.txt | 5 | ||||
| -rw-r--r-- | build_dev.bat | 100 | ||||
| -rw-r--r-- | build_dev.sh | 96 | ||||
| -rw-r--r-- | build_release.bat | 144 | ||||
| -rw-r--r-- | build_release.sh | 150 | ||||
| -rw-r--r-- | icon.ico | bin | 0 -> 204862 bytes | |||
| -rw-r--r-- | resources.rc | 30 |
8 files changed, 738 insertions, 0 deletions
diff --git a/BUILD_SCRIPTS.md b/BUILD_SCRIPTS.md new file mode 100644 index 0000000..013f5a5 --- /dev/null +++ b/BUILD_SCRIPTS.md @@ -0,0 +1,213 @@ +# Build Scripts Documentation + +ReiLua includes automated build scripts for easy development and release builds. + +## Available Scripts + +### Development Build Scripts +- **Windows**: `build_dev.bat` +- **Linux/Unix**: `build_dev.sh` + +### Release Build Scripts +- **Windows**: `build_release.bat` +- **Linux/Unix**: `build_release.sh` + +## Development Build + +### Purpose +Fast iteration during game development with external Lua files and assets. + +### Usage + +**Windows:** +```cmd +build_dev.bat +``` + +**Linux/Unix:** +```bash +chmod +x build_dev.sh +./build_dev.sh +``` + +### Features +- ✅ No embedding - loads Lua and assets from file system +- ✅ Fast build times +- ✅ Edit code and assets without rebuilding +- ✅ Automatic cleanup of embedded files +- ✅ Warns if Lua files or assets are in build directory +- ✅ Optional clean build: `build_dev.bat clean` or `./build_dev.sh clean` + +### Output +- Development executable: `build/ReiLua.exe` +- Run your game: `cd your_game && path/to/build/ReiLua.exe` +- Debug mode: `path/to/build/ReiLua.exe --log` + +## Release Build + +### Purpose +Create a single-file executable for distribution with all code and assets embedded. + +### Preparation + +Before running the release build, prepare your files: + +```bash +cd build + +# Copy all Lua files +copy ..\your_game\*.lua . +# Or: cp ../your_game/*.lua . + +# Copy assets +mkdir assets +copy ..\your_game\assets\* assets\ +# Or: cp -r ../your_game/assets/* assets/ +``` + +### Usage + +**Windows:** +```cmd +build_release.bat +``` + +**Linux/Unix:** +```bash +chmod +x build_release.sh +./build_release.sh +``` + +### Features +- ✅ Embeds all Lua files from `build/` directory +- ✅ Embeds all assets from `build/assets/` folder +- ✅ Creates single-file executable +- ✅ Release optimization enabled +- ✅ Verifies Lua files and assets before building +- ✅ Shows summary of embedded files after build +- ✅ Interactive confirmation before building + +### Output +- Release executable: `build/ReiLua.exe` +- Ready for distribution - no external dependencies +- Can be renamed to your game name + +### Build Configuration + +The release build automatically configures: +- `EMBED_MAIN=ON` - Embeds all Lua files +- `EMBED_ASSETS=ON` - Embeds all assets (if assets folder exists) +- `CMAKE_BUILD_TYPE=Release` - Optimized build + +## Customizing Your Executable + +### Adding Custom Icon + +1. Replace `icon.ico` with your own icon file +2. Keep the same filename or update `resources.rc` +3. Rebuild + +### Changing Executable Properties + +Edit `resources.rc` to customize: + +```rc +VALUE "CompanyName", "Your Studio Name" +VALUE "FileDescription", "Your Game Description" +VALUE "ProductName", "Your Game Name" +VALUE "LegalCopyright", "Copyright (C) Your Name, 2025" +``` + +### Renaming the Executable + +Edit `CMakeLists.txt`: +```cmake +project( YourGameName ) # Line 6 +``` + +After building, the executable will be named `YourGameName.exe`. + +## Workflow Examples + +### Development Workflow + +```bash +# Initial setup +build_dev.bat + +# Edit your Lua files in your game directory +# ... make changes ... + +# Just run - no rebuild needed! +cd your_game +path\to\build\ReiLua.exe + +# If you modify C code, rebuild +build_dev.bat +``` + +### Release Workflow + +```bash +# 1. Prepare files +cd build +copy ..\your_game\*.lua . +mkdir assets +copy ..\your_game\assets\* assets\ + +# 2. Build release +cd .. +build_release.bat + +# 3. Test +cd build +ReiLua.exe --log + +# 4. Distribute +# Copy build\ReiLua.exe to your distribution folder +``` + +## Troubleshooting + +### "CMake configuration failed" +- Ensure CMake is installed and in PATH +- Ensure MinGW is installed and in PATH +- Check `CMakeLists.txt` exists in parent directory + +### "No Lua files found" +- Copy your Lua files to `build/` directory before release build +- Ensure `main.lua` exists (required entry point) + +### "Build failed" +- Check compiler errors in output +- Ensure all dependencies are installed +- Try clean build: `build_dev.bat clean` + +### Development build embedding warning +- The dev build script warns if it finds Lua files or assets in build/ +- These should be removed for development builds +- The script offers to remove them automatically + +## Script Features + +### Safety Features +- Checks for correct directory before running +- Validates required files exist +- Warns about potential issues +- Interactive confirmations for release builds +- Automatic cleanup of old embedded files + +### User Friendly +- Clear progress messages +- Colored output (where supported) +- Helpful error messages +- Pause at end to review results +- Quick reference commands shown after build + +## Notes + +- Development builds are **much faster** than release builds +- Release builds may take longer due to embedding and optimization +- Always test your release build before distribution +- The scripts work on both Windows (CMD/PowerShell) and Unix shells +- On Unix, make scripts executable: `chmod +x build_*.sh` diff --git a/CMakeLists.txt b/CMakeLists.txt index 2df11ad..61d96d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -62,6 +62,11 @@ set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DEMBED_FONT" ) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) include_directories( include ) +# Add Windows resource file for icon and exe details +if( WIN32 ) + list( APPEND SOURCES ${CMAKE_SOURCE_DIR}/resources.rc ) +endif() + # Embed Lua files if EMBED_MAIN is ON if( EMBED_MAIN ) file( GLOB LUA_FILES "${CMAKE_CURRENT_BINARY_DIR}/*.lua" ) diff --git a/build_dev.bat b/build_dev.bat new file mode 100644 index 0000000..c1d79d2 --- /dev/null +++ b/build_dev.bat @@ -0,0 +1,100 @@ +@echo off +REM ReiLua Development Build Script +REM Run this from w64devkit shell or CMD with MinGW in PATH + +echo ================================ +echo ReiLua - Development Build +echo ================================ +echo. + +REM Navigate to build directory +cd build +if errorlevel 1 ( + echo ERROR: Cannot access build directory + exit /b 1 +) + +REM Clean old embedded files (important for dev builds!) +echo Cleaning old embedded files... +del /Q embedded_main.h embedded_assets.h 2>nul + +REM Warn about Lua files in build directory +dir /b *.lua >nul 2>&1 +if not errorlevel 1 ( + echo. + echo WARNING: Found Lua files in build directory! + echo Development builds should load from file system, not embed. + echo. + dir /b *.lua + echo. + set /p REMOVE="Remove these files from build directory? (Y/n): " + if /i not "%REMOVE%"=="n" ( + del /Q *.lua + echo Lua files removed. + ) + echo. +) + +REM Warn about assets folder in build directory +if exist "assets" ( + echo. + echo WARNING: Found assets folder in build directory! + echo Development builds should load from file system, not embed. + echo. + set /p REMOVE="Remove assets folder from build directory? (Y/n): " + if /i not "%REMOVE%"=="n" ( + rmdir /S /Q assets + echo Assets folder removed. + ) + echo. +) + +REM Clean old configuration if requested +if "%1"=="clean" ( + echo Cleaning build directory... + del /Q CMakeCache.txt *.o *.a 2>nul + rmdir /S /Q CMakeFiles 2>nul + echo Clean complete! + echo. +) + +REM Configure with MinGW +echo Configuring CMake for development... +cmake -G "MinGW Makefiles" .. + +if errorlevel 1 ( + echo. + echo ERROR: CMake configuration failed! + exit /b 1 +) + +echo. +echo Building ReiLua... +mingw32-make + +if errorlevel 1 ( + echo. + echo ERROR: Build failed! + exit /b 1 +) + +echo. +echo ================================ +echo Build Complete! +echo ================================ +echo. +echo Development build created successfully! +echo. +echo To run your game: +echo cd \path\to\your\game +echo \path\to\ReiLua\build\ReiLua.exe +echo. +echo To run with console logging: +echo \path\to\ReiLua\build\ReiLua.exe --log +echo. +echo Features: +echo - Lua files load from file system +echo - Assets load from file system +echo - Fast iteration - edit and reload +echo. +pause diff --git a/build_dev.sh b/build_dev.sh new file mode 100644 index 0000000..4383d36 --- /dev/null +++ b/build_dev.sh @@ -0,0 +1,96 @@ +#!/bin/bash +# ReiLua Development Build Script +# Run this from w64devkit shell + +echo "================================" +echo "ReiLua - Development Build" +echo "================================" +echo "" + +# Navigate to build directory +cd build || exit 1 + +# Clean old embedded files (important for dev builds!) +echo "Cleaning old embedded files..." +rm -f embedded_main.h embedded_assets.h + +# Warn about Lua files in build directory +LUA_COUNT=$(ls *.lua 2>/dev/null | wc -l) +if [ "$LUA_COUNT" -gt 0 ]; then + echo "" + echo "WARNING: Found Lua files in build directory!" + echo "Development builds should load from file system, not embed." + echo "" + ls -1 *.lua + echo "" + read -p "Remove these files from build directory? (Y/n): " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Nn]$ ]]; then + rm -f *.lua + echo "Lua files removed." + fi + echo "" +fi + +# Warn about assets folder in build directory +if [ -d "assets" ]; then + echo "" + echo "WARNING: Found assets folder in build directory!" + echo "Development builds should load from file system, not embed." + echo "" + read -p "Remove assets folder from build directory? (Y/n): " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Nn]$ ]]; then + rm -rf assets + echo "Assets folder removed." + fi + echo "" +fi + +# Clean old configuration if requested +if [ "$1" == "clean" ]; then + echo "Cleaning build directory..." + rm -rf CMakeCache.txt CMakeFiles/ *.o *.a + echo "Clean complete!" + echo "" +fi + +# Configure with MinGW +echo "Configuring CMake for development..." +cmake -G "MinGW Makefiles" .. + +if [ $? -ne 0 ]; then + echo "" + echo "ERROR: CMake configuration failed!" + exit 1 +fi + +echo "" +echo "Building ReiLua..." +make + +if [ $? -ne 0 ]; then + echo "" + echo "ERROR: Build failed!" + exit 1 +fi + +echo "" +echo "================================" +echo "Build Complete!" +echo "================================" +echo "" +echo "Development build created successfully!" +echo "" +echo "To run your game:" +echo " cd /path/to/your/game" +echo " /path/to/ReiLua/build/ReiLua.exe" +echo "" +echo "To run with console logging:" +echo " /path/to/ReiLua/build/ReiLua.exe --log" +echo "" +echo "Features:" +echo " - Lua files load from file system" +echo " - Assets load from file system" +echo " - Fast iteration - edit and reload" +echo "" diff --git a/build_release.bat b/build_release.bat new file mode 100644 index 0000000..17b76c1 --- /dev/null +++ b/build_release.bat @@ -0,0 +1,144 @@ +@echo off +REM ReiLua Release Build Script +REM Run this from w64devkit shell or CMD with MinGW in PATH + +echo ================================ +echo ReiLua - Release Build +echo ================================ +echo. + +REM Check if we're in the right directory +if not exist "CMakeLists.txt" ( + echo ERROR: Please run this script from the ReiLua root directory + exit /b 1 +) + +REM Navigate to build directory +cd build +if errorlevel 1 ( + echo ERROR: Cannot access build directory + exit /b 1 +) + +REM Clean old embedded files +echo Cleaning old embedded files... +del /Q embedded_main.h embedded_assets.h 2>nul + +REM Check for Lua files +echo. +echo Checking for Lua files... +dir /b *.lua >nul 2>&1 +if errorlevel 1 ( + echo. + echo WARNING: No Lua files found in build directory! + echo. + echo Please copy your Lua files: + echo cd build + echo copy ..\your_game\*.lua . + echo. + set /p CONTINUE="Do you want to continue anyway? (y/N): " + if /i not "%CONTINUE%"=="y" exit /b 1 +) else ( + echo Found Lua files: + dir /b *.lua +) + +REM Check for assets folder +echo. +echo Checking for assets... +if not exist "assets" ( + echo. + echo WARNING: No assets folder found! + echo. + echo To embed assets, create the folder and copy files: + echo cd build + echo mkdir assets + echo copy ..\your_game\assets\* assets\ + echo. + set /p CONTINUE="Do you want to continue without assets? (y/N): " + if /i not "%CONTINUE%"=="y" exit /b 1 + set EMBED_ASSETS=OFF +) else ( + echo Found assets folder + set EMBED_ASSETS=ON +) + +echo. +echo ================================ +echo Build Configuration +echo ================================ +echo Lua Embedding: ON +echo Asset Embedding: %EMBED_ASSETS% +echo Build Type: Release +echo ================================ +echo. +pause + +REM Clean CMake cache +echo. +echo Cleaning CMake cache... +del /Q CMakeCache.txt 2>nul +rmdir /S /Q CMakeFiles 2>nul + +REM Configure with embedding enabled +echo. +echo Configuring CMake for release... +cmake -G "MinGW Makefiles" .. -DEMBED_MAIN=ON -DEMBED_ASSETS=%EMBED_ASSETS% -DCMAKE_BUILD_TYPE=Release + +if errorlevel 1 ( + echo. + echo ERROR: CMake configuration failed! + pause + exit /b 1 +) + +REM Build +echo. +echo Building ReiLua Release... +mingw32-make + +if errorlevel 1 ( + echo. + echo ERROR: Build failed! + pause + exit /b 1 +) + +REM Show summary +echo. +echo ================================ +echo Embedded Files Summary +echo ================================ + +if exist "embedded_main.h" ( + echo. + echo Embedded Lua files: + findstr /C:"Embedded file:" embedded_main.h +) + +if exist "embedded_assets.h" ( + echo. + echo Embedded assets: + findstr /C:"Embedded asset:" embedded_assets.h +) + +echo. +echo ================================ +echo Build Complete! +echo ================================ +echo. +echo Executable: ReiLua.exe +echo Location: %CD%\ReiLua.exe +echo. +echo Your game is ready for distribution! +echo. +echo To test the release build: +echo ReiLua.exe --log (with console) +echo ReiLua.exe (production mode) +echo. +echo To distribute: +echo - Copy ReiLua.exe to your distribution folder +echo - Rename it to your game name (optional) +echo - That's it! Single file distribution! +echo. +pause diff --git a/build_release.sh b/build_release.sh new file mode 100644 index 0000000..758ce34 --- /dev/null +++ b/build_release.sh @@ -0,0 +1,150 @@ +#!/bin/bash +# ReiLua Release Build Script +# Run this from w64devkit shell + +echo "================================" +echo "ReiLua - Release Build" +echo "================================" +echo "" + +# Check if we're in the right directory +if [ ! -f "CMakeLists.txt" ]; then + echo "ERROR: Please run this script from the ReiLua root directory" + exit 1 +fi + +# Navigate to build directory +cd build || exit 1 + +# Clean old embedded files +echo "Cleaning old embedded files..." +rm -f embedded_main.h embedded_assets.h + +# Check for Lua files +echo "" +echo "Checking for Lua files..." +LUA_FILES=$(ls *.lua 2>/dev/null | wc -l) + +if [ "$LUA_FILES" -eq 0 ]; then + echo "" + echo "WARNING: No Lua files found in build directory!" + echo "" + echo "Please copy your Lua files:" + echo " cd build" + echo " cp ../your_game/*.lua ." + echo "" + read -p "Do you want to continue anyway? (y/N): " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +else + echo "Found $LUA_FILES Lua file(s):" + ls -1 *.lua +fi + +# Check for assets folder +echo "" +echo "Checking for assets..." +if [ ! -d "assets" ]; then + echo "" + echo "WARNING: No assets folder found!" + echo "" + echo "To embed assets, create the folder and copy files:" + echo " cd build" + echo " mkdir assets" + echo " cp ../your_game/assets/* assets/" + echo "" + read -p "Do you want to continue without assets? (y/N): " -n 1 -r + echo "" + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi + EMBED_ASSETS="OFF" +else + ASSET_FILES=$(find assets -type f 2>/dev/null | wc -l) + echo "Found $ASSET_FILES asset file(s) in assets folder" + EMBED_ASSETS="ON" +fi + +echo "" +echo "================================" +echo "Build Configuration" +echo "================================" +echo "Lua Embedding: ON" +echo "Asset Embedding: $EMBED_ASSETS" +echo "Build Type: Release" +echo "================================" +echo "" +read -p "Press Enter to continue or Ctrl+C to cancel..." + +# Clean CMake cache to ensure fresh configuration +echo "" +echo "Cleaning CMake cache..." +rm -rf CMakeCache.txt CMakeFiles/ + +# Configure with embedding enabled +echo "" +echo "Configuring CMake for release..." +cmake -G "MinGW Makefiles" .. -DEMBED_MAIN=ON -DEMBED_ASSETS=$EMBED_ASSETS -DCMAKE_BUILD_TYPE=Release + +if [ $? -ne 0 ]; then + echo "" + echo "ERROR: CMake configuration failed!" + exit 1 +fi + +# Build +echo "" +echo "Building ReiLua Release..." +make + +if [ $? -ne 0 ]; then + echo "" + echo "ERROR: Build failed!" + exit 1 +fi + +# Show embedded file info +echo "" +echo "================================" +echo "Embedded Files Summary" +echo "================================" + +if [ -f "embedded_main.h" ]; then + echo "" + echo "Embedded Lua files:" + grep 'Embedded file:' embedded_main.h | sed 's/.*Embedded file: / - /' +else + echo "No Lua files embedded" +fi + +if [ -f "embedded_assets.h" ]; then + echo "" + echo "Embedded assets:" + grep 'Embedded asset:' embedded_assets.h | sed 's/.*Embedded asset: / - /' | sed 's/ (.*//' +else + echo "No assets embedded" +fi + +# Get executable size +echo "" +echo "================================" +echo "Build Complete!" +echo "================================" +EXESIZE=$(du -h ReiLua.exe | cut -f1) +echo "" +echo "Executable: ReiLua.exe ($EXESIZE)" +echo "Location: $(pwd)/ReiLua.exe" +echo "" +echo "Your game is ready for distribution!" +echo "" +echo "To test the release build:" +echo " ./ReiLua.exe --log (with console)" +echo " ./ReiLua.exe (production mode)" +echo "" +echo "To distribute:" +echo " - Copy ReiLua.exe to your distribution folder" +echo " - Rename it to your game name (optional)" +echo " - That's it! Single file distribution!" +echo "" diff --git a/icon.ico b/icon.ico Binary files differnew file mode 100644 index 0000000..6fcfafa --- /dev/null +++ b/icon.ico diff --git a/resources.rc b/resources.rc new file mode 100644 index 0000000..89a74df --- /dev/null +++ b/resources.rc @@ -0,0 +1,30 @@ +IDI_ICON1 ICON "icon.ico" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEFLAGSMASK 0x3fL +FILEFLAGS 0x0L +FILEOS 0x40004L +FILETYPE 0x1L +FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Reilua and Indrajith K L" + VALUE "FileDescription", "Made using ReiLua" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "ReiLua" + VALUE "LegalCopyright", "Copyright (C) ReiLua and Indrajith K L, 2025" + VALUE "OriginalFilename", "ReiLua.exe" + VALUE "ProductName", "My Awesome Game" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END |
