luajitos

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

repack_lua.sh (5292B)


      1 #!/bin/bash
      2 
      3 # Fast Lua-only rebuild script
      4 # Recompiles Lua files (excluding manifest.lua and /scripts/*), repacks ramdisk, and creates ISO
      5 # Much faster than full build.sh since it skips C compilation
      6 
      7 set -e  # Exit on error
      8 
      9 echo "=== LuajitOS Fast Lua Repack ==="
     10 
     11 # Check if we have the required compiled objects
     12 if [ ! -f "build/kernel.o" ]; then
     13     echo "ERROR: build/kernel.o not found!"
     14     echo "Please run ./build.sh first to compile C code."
     15     exit 1
     16 fi
     17 
     18 # Configuration for linking
     19 CROSS_COMPILE=i686-elf-
     20 LD="${CROSS_COMPILE}ld"
     21 OBJCOPY="${CROSS_COMPILE}objcopy"
     22 
     23 # Check if cross-compiler exists, fallback to native
     24 if ! command -v ${LD} &> /dev/null; then
     25     LD="ld"
     26     OBJCOPY="objcopy"
     27 fi
     28 
     29 LDFLAGS="-m elf_i386 -nostdlib -static"
     30 
     31 # Step 1: Recompile Lua files (excluding manifest.lua and scripts/*)
     32 echo "Step 1: Recompiling Lua files..."
     33 if command -v luajit &> /dev/null; then
     34     find iso_includes -name "*.lua" | while read lua_file; do
     35         # Skip manifest.lua files
     36         if [[ "$lua_file" == */manifest.lua ]]; then
     37             continue
     38         fi
     39         # Skip scripts directory
     40         if [[ "$lua_file" == iso_includes/scripts/* ]]; then
     41             continue
     42         fi
     43 
     44         luac_file="${lua_file}c"
     45         # Only recompile if .lua is newer than .luac or .luac doesn't exist
     46         if [ ! -f "$luac_file" ] || [ "$lua_file" -nt "$luac_file" ]; then
     47             echo "  Compiling: $lua_file"
     48             luajit -bW "$lua_file" "$luac_file" 2>/dev/null || true
     49         fi
     50     done
     51     echo "  Bytecode compilation complete"
     52 else
     53     echo "ERROR: luajit not found!"
     54     exit 1
     55 fi
     56 
     57 # Step 2: Generate ramdisk
     58 echo "Step 2: Generating ramdisk..."
     59 if [ -d iso_includes ]; then
     60     # Remove any previously embedded kernel to prevent recursive embedding
     61     rm -rf iso_includes/os/boot
     62 
     63     # If we have a kernel for install, include it
     64     if [ -f build/kernel_install.bin ]; then
     65         mkdir -p iso_includes/os/boot
     66         cp build/kernel_install.bin iso_includes/os/boot/kernel.bin
     67         echo "  Including install kernel ($(stat -c%s build/kernel_install.bin 2>/dev/null || stat -f%z build/kernel_install.bin 2>/dev/null || echo '?') bytes)"
     68     fi
     69 
     70     luajit pack_ramdisk.lua iso_includes packed.bin
     71     if [ $? -ne 0 ]; then
     72         echo "Error: Failed to generate ramdisk"
     73         exit 1
     74     fi
     75 else
     76     echo "ERROR: iso_includes directory not found!"
     77     exit 1
     78 fi
     79 
     80 # Step 3: Convert packed.bin to object file
     81 echo "Step 3: Converting packed.bin to object file..."
     82 ${OBJCOPY} -I binary -O elf32-i386 -B i386 \
     83     --rename-section .data=.rodata,alloc,load,readonly,data,contents \
     84     packed.bin build/packed.o
     85 echo "  Embedded packed.bin ($(stat -c%s packed.bin 2>/dev/null || stat -f%z packed.bin 2>/dev/null || echo '?') bytes)"
     86 
     87 # Step 4: Re-link kernel
     88 echo "Step 4: Linking kernel..."
     89 
     90 # Find LuaJIT static library
     91 LUAJIT_LIB=""
     92 if [ -f "lib/libluajit-5.1-32bit.a" ]; then
     93     LUAJIT_LIB="lib/libluajit-5.1-32bit.a"
     94 elif [ -f "/usr/lib/i386-linux-gnu/libluajit-5.1.a" ]; then
     95     LUAJIT_LIB="/usr/lib/i386-linux-gnu/libluajit-5.1.a"
     96 else
     97     echo "ERROR: Could not find 32-bit LuaJIT static library!"
     98     exit 1
     99 fi
    100 
    101 # Find libgcc
    102 CC="gcc"
    103 if command -v i686-elf-gcc &> /dev/null; then
    104     CC="i686-elf-gcc"
    105 fi
    106 LIBGCC_PATH=$(${CC} -m32 -print-libgcc-file-name 2>/dev/null)
    107 LIBGCC=""
    108 if [ -f "$LIBGCC_PATH" ]; then
    109     LIBGCC="$LIBGCC_PATH"
    110 fi
    111 
    112 # Link all objects together
    113 ${LD} ${LDFLAGS} -T linker.ld -o build/kernel.bin \
    114     build/boot.o build/syscall.o build/exceptions.o build/libc.o build/paging.o build/graphics.o build/vesa.o build/mouse.o build/usb_uhci.o build/keyboard.o build/ata.o build/fde.o build/diskfs.o build/partition.o build/fat16.o build/grub.o \
    115     build/decoder.o build/decoder_BMP.o build/decoder_PNG.o build/decoder_JPEG.o build/encoder_JPEG.o build/splash.o \
    116     build/compression.o build/deflate_impl.o build/Deflate.o build/LZMA.o build/GZip.o build/zlib.o \
    117     build/ramdisk.o build/luajit_init.o build/kernel.o \
    118     build/crypto_baremetal.o build/CSPRNG.o build/Ed25519.o build/X25519.o build/Curve25519.o \
    119     build/AES-256-GCM.o build/AES-128-GCM.o build/ChaCha20-Poly1305.o build/XChaCha20-Poly1305.o \
    120     build/Serpent-256-GCM.o build/Twofish-256-GCM.o build/Salsa20-Poly1305.o \
    121     build/PBKDF2.o build/Argon2.o build/HKDF.o build/stubs.o build/RSA.o build/P256.o \
    122     build/Kyber.o build/Dilithium.o \
    123     build/hash.o build/MD5.o build/SHA1.o build/SHA256.o build/SHA3.o build/BLAKE2.o \
    124     build/CSPRNG_Lua.o build/Ed25519_Lua.o build/X25519_Lua.o build/Hash_Lua.o \
    125     build/PBKDF2_Lua.o build/RSA_Lua.o build/P256_Lua.o \
    126     build/Kyber_Lua.o build/Dilithium_Lua.o \
    127     build/crypto.o \
    128     build/packed.o ${LUAJIT_LIB} ${LIBGCC}
    129 
    130 # Step 5: Create ISO
    131 echo "Step 5: Creating ISO..."
    132 cp build/kernel.bin isodir/boot/kernel.bin
    133 
    134 if command -v grub-mkrescue &> /dev/null; then
    135     grub-mkrescue -o luajitos.iso isodir 2>&1
    136 elif command -v grub2-mkrescue &> /dev/null; then
    137     grub2-mkrescue -o luajitos.iso isodir 2>&1
    138 else
    139     echo "ERROR: grub-mkrescue not found!"
    140     exit 1
    141 fi
    142 
    143 echo ""
    144 echo "=== Repack complete! ==="
    145 echo "ISO updated: luajitos.iso"
    146 echo ""
    147 echo "To test with QEMU, run:"
    148 echo "  qemu-system-x86_64 -cdrom luajitos.iso -m 512 -serial stdio -vga std -display sdl"