Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
3.8 kB · 135 lines
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136#!/usr/bin/env fish# build.fish - Build a KidLisp program for Playdate# Usage: ./build.fish examples/hello.lisp
set -l SCRIPT_DIR (realpath (dirname (status filename)))set -l SDK_PATH "$SCRIPT_DIR/sdk"
# Check for input fileif test (count $argv) -lt 1 echo "Usage: ./build.fish <source.lisp> [output-name]" echo "" echo "Examples:" echo " ./build.fish examples/hello.lisp" echo " ./build.fish examples/crank.lisp MyCrankGame" exit 1end
set -l SOURCE_FILE $argv[1]set -l OUTPUT_NAME (test (count $argv) -ge 2; and echo $argv[2]; or echo (basename $SOURCE_FILE .lisp))
# Check source existsif not test -f $SOURCE_FILE echo "❌ Source file not found: $SOURCE_FILE" exit 1end
echo "🎮 KidLisp Playdate Builder"echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━"echo "📄 Source: $SOURCE_FILE"echo "📦 Output: $OUTPUT_NAME.pdx"echo ""
# Create build directory (use absolute path)set -l BUILD_DIR "$SCRIPT_DIR/build"mkdir -p $BUILD_DIR/src
# Step 1: Compile KidLisp to Cecho "🔄 Compiling KidLisp → C..."node $SCRIPT_DIR/compiler/kidlisp-to-pd.mjs $SOURCE_FILE $BUILD_DIR/src/main.cif test $status -ne 0 echo "❌ Compilation failed!" exit 1end
# Step 2: Copy runtime filesecho "📋 Copying runtime..."cp $SCRIPT_DIR/src/kidlisp.c $BUILD_DIR/src/cp $SCRIPT_DIR/src/kidlisp.h $BUILD_DIR/src/
# Step 3: Create Makefile in build directoryecho "📝 Creating Makefile..."printf 'HEAP_SIZE = 8388208STACK_SIZE = 61800
PRODUCT = %s.pdx
SDK = %s
VPATH += src
SRC = src/main.c src/kidlisp.c
UINCDIR = src
include $(SDK)/C_API/buildsupport/common.mk' $OUTPUT_NAME $SDK_PATH > $BUILD_DIR/Makefile
# Step 4: Build with makeecho "🔨 Building..."cd $BUILD_DIRset -x PLAYDATE_SDK_PATH $SDK_PATHmake 2>&1 | tee make.log
# Check if we have the binaries even if pdc failedif test -f build/pdex.elf -a -f build/pdex.so echo "" echo "📦 Creating .pdx bundle..."
rm -rf $OUTPUT_NAME.pdx mkdir -p $OUTPUT_NAME.pdx # Simulator needs the shared library cp build/pdex.so $OUTPUT_NAME.pdx/pdex.so # Device needs pdex.bin - try to use host pdc first, fall back to manual echo "🔧 Running pdc on host to create device binary..." # Copy Source folder to host and run pdc there mkdir -p Source cp build/pdex.elf Source/ cp build/pdex.so Source/ printf 'name=%sauthor=aesthetic.computerversion=1.0.0buildNumber=1bundleID=computer.aesthetic.%s' $OUTPUT_NAME $OUTPUT_NAME > Source/pdxinfo scp -rq Source jas@172.17.0.1:~/kidlisp-build-temp/ ssh jas@172.17.0.1 "cd ~/kidlisp-build-temp && ~/PlaydateSDK/bin/pdc Source $OUTPUT_NAME.pdx" 2>/dev/null if test $status -eq 0 # Copy back the properly built pdx scp -rq jas@172.17.0.1:~/kidlisp-build-temp/$OUTPUT_NAME.pdx ./ ssh jas@172.17.0.1 "rm -rf ~/kidlisp-build-temp" 2>/dev/null echo "✅ Used host pdc for device-compatible build" else # Fallback: create pdex.bin manually from ELF echo "⚠️ Host pdc failed, creating pdex.bin manually..." arm-none-eabi-objcopy -O binary build/pdex.elf $OUTPUT_NAME.pdx/pdex.bin # Create pdxinfo printf 'name=%sauthor=aesthetic.computerversion=1.0.0buildNumber=1bundleID=computer.aesthetic.%s' $OUTPUT_NAME $OUTPUT_NAME > $OUTPUT_NAME.pdx/pdxinfo end # Cleanup rm -rf Source echo "" echo "✅ Build successful!" echo "📦 Output: $BUILD_DIR/$OUTPUT_NAME.pdx" # Show what's in the bundle echo "" echo "📋 Bundle contents:" ls -la $OUTPUT_NAME.pdx/else echo "❌ Build failed - no binaries produced" exit 1end