140 lines
4.0 KiB
Bash
140 lines
4.0 KiB
Bash
#!/bin/bash
|
|
|
|
# VavCore Android Build Script
|
|
# Builds VavCore library for Android using CMake and NDK
|
|
|
|
set -e # Exit on any error
|
|
|
|
# Configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BUILD_DIR="${SCRIPT_DIR}/build-android"
|
|
INSTALL_DIR="${SCRIPT_DIR}/android-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 Build Configuration"
|
|
echo "========================================="
|
|
echo "Script Directory: $SCRIPT_DIR"
|
|
echo "Build Directory: $BUILD_DIR"
|
|
echo "Install Directory: $INSTALL_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 "$INSTALL_DIR" ]; then
|
|
echo "🧹 Cleaning previous installation..."
|
|
rm -rf "$INSTALL_DIR"
|
|
fi
|
|
|
|
# Create build directory
|
|
echo "📁 Creating build directory..."
|
|
mkdir -p "$BUILD_DIR"
|
|
mkdir -p "$INSTALL_DIR"
|
|
|
|
# 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" \
|
|
-DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
|
|
-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
|
|
|
|
# Install the library
|
|
echo "📦 Installing VavCore..."
|
|
cmake --install . --config "$BUILD_TYPE"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "❌ Installation failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Verify build output
|
|
echo "🔍 Verifying build output..."
|
|
LIB_FILE="$INSTALL_DIR/lib/libVavCore.so"
|
|
|
|
if [ -f "$LIB_FILE" ]; then
|
|
echo "✅ Build successful!"
|
|
echo "📄 Library info:"
|
|
file "$LIB_FILE"
|
|
ls -lh "$LIB_FILE"
|
|
|
|
echo ""
|
|
echo "📂 Installation contents:"
|
|
find "$INSTALL_DIR" -type f -exec ls -lh {} \;
|
|
|
|
echo ""
|
|
echo "🎯 VavCore Android library ready:"
|
|
echo " Library: $LIB_FILE"
|
|
echo " Headers: $INSTALL_DIR/include/"
|
|
else
|
|
echo "❌ Build verification failed - library not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Optional: Copy to a common location for Godot integration
|
|
GODOT_LIBS_DIR="${SCRIPT_DIR}/../godot-libs"
|
|
if [ "$1" = "--copy-to-godot" ]; then
|
|
echo "📋 Copying to Godot integration directory..."
|
|
mkdir -p "$GODOT_LIBS_DIR/$ANDROID_ABI"
|
|
cp "$LIB_FILE" "$GODOT_LIBS_DIR/$ANDROID_ABI/"
|
|
cp -r "$INSTALL_DIR/include" "$GODOT_LIBS_DIR/"
|
|
echo "✅ Files copied to: $GODOT_LIBS_DIR"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎉 VavCore Android build completed successfully!"
|
|
echo " To use in Godot Android plugin:"
|
|
echo " 1. Copy libVavCore.so to your Godot Android plugin's libs/$ANDROID_ABI/ directory"
|
|
echo " 2. Copy include/ headers to your plugin's jni/ directory"
|
|
echo " 3. Add VavCore to your Android.mk or CMakeLists.txt" |