134 lines
3.7 KiB
Bash
134 lines
3.7 KiB
Bash
#!/bin/bash
|
|
|
|
# VavCore Android Platform Build Script
|
|
# Builds VavCore library specifically for Android platform integration
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BUILD_DIR="${SCRIPT_DIR}/build"
|
|
OUTPUT_DIR="${SCRIPT_DIR}/libs"
|
|
|
|
# Android configuration
|
|
ANDROID_ABI="${ANDROID_ABI:-arm64-v8a}" # Default to arm64-v8a
|
|
ANDROID_PLATFORM="${ANDROID_PLATFORM:-android-29}" # Android 10+
|
|
BUILD_TYPE="${BUILD_TYPE:-Release}"
|
|
|
|
# Check if Android NDK is available
|
|
if [ -z "$ANDROID_NDK_ROOT" ] && [ -z "$ANDROID_NDK" ]; then
|
|
echo "❌ Error: ANDROID_NDK_ROOT or ANDROID_NDK environment variable not set"
|
|
echo "Please set one of these variables to point to your Android NDK installation"
|
|
echo "Example: export ANDROID_NDK_ROOT=/path/to/android-ndk-r25"
|
|
exit 1
|
|
fi
|
|
|
|
# Use ANDROID_NDK_ROOT if available, otherwise use ANDROID_NDK
|
|
NDK_PATH="${ANDROID_NDK_ROOT:-$ANDROID_NDK}"
|
|
|
|
if [ ! -d "$NDK_PATH" ]; then
|
|
echo "❌ Error: Android NDK not found at: $NDK_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
echo "🚀 VavCore Android Platform Build"
|
|
echo "=================================="
|
|
echo "Script Directory: $SCRIPT_DIR"
|
|
echo "Build Directory: $BUILD_DIR"
|
|
echo "Output Directory: $OUTPUT_DIR"
|
|
echo "Android NDK: $NDK_PATH"
|
|
echo "Android ABI: $ANDROID_ABI"
|
|
echo "Android Platform: $ANDROID_PLATFORM"
|
|
echo "Build Type: $BUILD_TYPE"
|
|
echo "=================================="
|
|
|
|
# Clean previous build
|
|
if [ -d "$BUILD_DIR" ]; then
|
|
echo "🧹 Cleaning previous build..."
|
|
rm -rf "$BUILD_DIR"
|
|
fi
|
|
|
|
if [ -d "$OUTPUT_DIR" ]; then
|
|
echo "🧹 Cleaning previous output..."
|
|
rm -rf "$OUTPUT_DIR"
|
|
fi
|
|
|
|
# Create directories
|
|
echo "📁 Creating directories..."
|
|
mkdir -p "$BUILD_DIR"
|
|
mkdir -p "$OUTPUT_DIR/$ANDROID_ABI"
|
|
|
|
# Configure with CMake
|
|
echo "⚙️ Configuring VavCore for Android..."
|
|
cd "$BUILD_DIR"
|
|
|
|
cmake \
|
|
-DCMAKE_TOOLCHAIN_FILE="$NDK_PATH/build/cmake/android.toolchain.cmake" \
|
|
-DANDROID_ABI="$ANDROID_ABI" \
|
|
-DANDROID_PLATFORM="$ANDROID_PLATFORM" \
|
|
-DANDROID_NDK="$NDK_PATH" \
|
|
-DCMAKE_BUILD_TYPE="$BUILD_TYPE" \
|
|
-DANDROID_STL=c++_shared \
|
|
-DANDROID_CPP_FEATURES="rtti exceptions" \
|
|
-DCMAKE_ANDROID_ARCH_ABI="$ANDROID_ABI" \
|
|
-DCMAKE_SYSTEM_NAME=Android \
|
|
-DCMAKE_ANDROID_API_MIN=29 \
|
|
"$SCRIPT_DIR"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ CMake configuration failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Build the library
|
|
echo "🔨 Building VavCore..."
|
|
cmake --build . --config "$BUILD_TYPE" -j$(nproc)
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Build failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy output to platform-specific directory
|
|
echo "📦 Copying build output..."
|
|
if [ -f "libVavCore.so" ]; then
|
|
cp "libVavCore.so" "$OUTPUT_DIR/$ANDROID_ABI/"
|
|
echo "✅ Library copied to: $OUTPUT_DIR/$ANDROID_ABI/libVavCore.so"
|
|
else
|
|
echo "❌ Build output not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy headers for Godot plugin integration
|
|
HEADERS_DIR="$OUTPUT_DIR/include"
|
|
VAVCORE_HEADERS="../../../VavCore/include"
|
|
|
|
if [ -d "$VAVCORE_HEADERS" ]; then
|
|
echo "📄 Copying headers..."
|
|
cp -r "$VAVCORE_HEADERS" "$OUTPUT_DIR/"
|
|
echo "✅ Headers copied to: $HEADERS_DIR"
|
|
fi
|
|
|
|
# Verify build output
|
|
echo "🔍 Verifying build output..."
|
|
LIB_FILE="$OUTPUT_DIR/$ANDROID_ABI/libVavCore.so"
|
|
|
|
if [ -f "$LIB_FILE" ]; then
|
|
echo "✅ Build successful!"
|
|
echo "📄 Library info:"
|
|
file "$LIB_FILE"
|
|
ls -lh "$LIB_FILE"
|
|
|
|
echo ""
|
|
echo "📂 Platform output structure:"
|
|
find "$OUTPUT_DIR" -type f -exec ls -lh {} \;
|
|
else
|
|
echo "❌ Build verification failed - library not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎉 VavCore Android platform build completed!"
|
|
echo " 📁 Output: $OUTPUT_DIR"
|
|
echo " 📱 Ready for Godot Android plugin integration"
|
|
echo " 🔗 Use this in platforms/android/godot-plugin/" |