Skip to content

M

M #46

Workflow file for this run

name: Build Roblox Executor iOS Dynamic Library
on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
jobs:
build:
runs-on: macos-latest # Use macOS for iOS compatible builds
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Install dependencies
run: |
echo "Installing dependencies..."
# Install essential build tools
brew install pkg-config
# Create required directories
mkdir -p external/dobby/include
mkdir -p external/dobby/lib
mkdir -p output/Resources/AIData
mkdir -p build
# Remove any CI_BUILD definitions from source files
echo "Removing CI_BUILD definitions from source files..."
find source -type f \( -name "*.h" -o -name "*.hpp" -o -name "*.cpp" -o -name "*.mm" \) | xargs sed -i '' 's/#define CI_BUILD//g' 2>/dev/null || true
# Verify and fix VM folder structure if needed
echo "Verifying VM folder structure..."
if [ -d "VM" ] && [ -d "VM/include" ] && [ -d "VM/src" ]; then
echo "✅ VM folder structure verified"
ls -la VM/include/
ls -la VM/src/ | head -n 5
# Make sure VM files are readable
echo "Ensuring VM files have correct permissions..."
chmod -R 755 VM
# Count source files to verify
VM_SRC_COUNT=$(find VM/src -name "*.cpp" | wc -l)
VM_INCLUDE_COUNT=$(find VM/include -name "*.h" | wc -l)
echo "Found $VM_SRC_COUNT .cpp files and $VM_INCLUDE_COUNT .h files in VM directory"
else
echo "⚠️ VM folder structure has issues, creating required directories..."
mkdir -p VM/include VM/src
fi
- name: Setup Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- name: Install Dobby (Required)
id: install-dobby
run: |
echo "Building Dobby from source (required dependency)..."
git clone --depth=1 https://github.com/jmpews/Dobby.git
cd Dobby
mkdir -p build && cd build
# Configure and build Dobby
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DDOBBY_BUILD_SHARED_LIBRARY=OFF \
-DDOBBY_BUILD_STATIC_LIBRARY=ON
cmake --build . --config Release
# Copy Dobby files to expected location
mkdir -p $GITHUB_WORKSPACE/external/dobby/lib
mkdir -p $GITHUB_WORKSPACE/external/dobby/include
cp libdobby.a $GITHUB_WORKSPACE/external/dobby/lib/
cp -r ../include/* $GITHUB_WORKSPACE/external/dobby/include/
echo "Dobby successfully built and installed to external/dobby"
cd $GITHUB_WORKSPACE
- name: Build Dynamic Library with Makefile
run: |
echo "Building the iOS dynamic library using Makefile instead of CMake..."
# Make sure VM files are accessible
echo "Preparing VM files for inclusion..."
find VM -name "*.cpp" -o -name "*.h" | xargs ls -la || true
# Test VM file access
echo "Testing VM file access..."
VM_SOURCE_COUNT=$(find VM/src -name "*.cpp" | wc -l)
VM_HEADER_COUNT=$(find VM/include -name "*.h" | wc -l)
echo "Found $VM_SOURCE_COUNT C++ files in VM/src and $VM_HEADER_COUNT headers in VM/include"
# Set iOS-specific build settings for the Makefile
echo "Setting up iOS build environment..."
export SDK=$(xcrun --sdk iphoneos --show-sdk-path)
export ARCHS="arm64"
export MIN_IOS_VERSION="15.0"
# Build using Makefile with verbose output
echo "Building with Makefile instead of CMake..."
make info # Show build information
make clean # Clean any previous build artifacts
make -j4 # Build using Makefile with parallel jobs
make install # Install to output directory
# Check the build result
if [ -f "output/libmylibrary.dylib" ]; then
echo "✅ Successfully built libmylibrary.dylib with Makefile"
ls -la output/libmylibrary.dylib
# Create config if it doesn't exist
mkdir -p output/Resources/AIData
if [ ! -f "output/Resources/AIData/config.json" ]; then
echo '{"version":"1.0.0","led_effects":true,"ai_features":true,"memory_optimization":true}' > output/Resources/AIData/config.json
fi
echo "== Built files =="
ls -la output/
else
echo "❌ Failed to build libmylibrary.dylib"
echo "== Build directory contents =="
find build -name "*.dylib" -o -name "*.a"
exit 1
fi
- name: Verify Library
run: |
echo "Verifying built dylib..."
if [ -f "output/libmylibrary.dylib" ]; then
echo "✅ libmylibrary.dylib exists"
# Check for exported symbols
echo "Exported symbols:"
nm -g output/libmylibrary.dylib | grep -E "luaopen_|ExecuteScript" || echo "No key symbols found!"
# Check library type
file output/libmylibrary.dylib
# Check library dependencies
otool -L output/libmylibrary.dylib || true
else
echo "❌ libmylibrary.dylib not found in output directory"
exit 1
fi
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: ios-dylib
path: |
output/libmylibrary.dylib
output/Resources/**