blob: 955ce1fca040481c13f3fd6b140188fb82019eb5 [file] [edit]
#!/bin/bash
# Exit on error
set -e
# Create a temporary directory for all build artifacts
BUILD_DIR=$(mktemp -d -t dart_dyn_mod_build_XXXXXX)
echo "Created temporary build directory: $BUILD_DIR"
# Create a temporary directory for application data (system temp)
APP_DATA_DIR=$(mktemp -d -t dart_dyn_mod_app_XXXXXX)
echo "Created temporary app data directory: $APP_DATA_DIR"
# Ensure cleanup on exit (even on error)
cleanup() {
rm -rf "$BUILD_DIR"
rm -rf "$APP_DATA_DIR"
echo "Cleaned up temporary directories."
}
trap cleanup EXIT
echo "Building Dart SDK artifacts with dynamic modules support"
./tools/build.py -m release --dart-dynamic-modules \
runtime runtime_precompiled utils/gen_kernel
# Define paths
SDK_OUT="out/ReleaseX64"
GEN_KERNEL="$SDK_OUT/gen/gen_kernel_aot.dart.snapshot"
GEN_SNAPSHOT="$SDK_OUT/gen_snapshot_product"
DART2BYTECODE="$SDK_OUT/gen/dart2bytecode.dart.snapshot"
AOT_RUNTIME="$SDK_OUT/dartaotruntime_product"
VM_PLATFORM="$SDK_OUT/vm_platform.dill"
EXAMPLE_DIR="pkg/dynamic_modules/example"
HOST_DIR="$EXAMPLE_DIR/host"
MODULES_DIR="$EXAMPLE_DIR/modules"
COMMON_DIR="$EXAMPLE_DIR/common"
INTERFACE_YAML="$EXAMPLE_DIR/dynamic_interface.yaml"
echo "Compiling host application (non-AOT)..."
$AOT_RUNTIME $GEN_KERNEL \
--target vm \
--packages .dart_tool/package_config.json \
-Ddart.vm.profile=false \
-Ddart.vm.product=true \
-Ddynamic.modules.test.mode=aot \
--no-aot \
--no-embed-sources \
--platform $VM_PLATFORM \
--output $BUILD_DIR/main_no_aot.dill \
--dynamic-interface $INTERFACE_YAML \
$HOST_DIR/main.dart
echo "Compiling host application (AOT)..."
$AOT_RUNTIME $GEN_KERNEL \
--target vm \
--packages .dart_tool/package_config.json \
-Ddart.vm.profile=false \
-Ddart.vm.product=true \
-Ddynamic.modules.test.mode=aot \
--aot \
--no-embed-sources \
--platform $VM_PLATFORM \
--output $BUILD_DIR/main_aot.dill \
--dynamic-interface $INTERFACE_YAML \
$HOST_DIR/main.dart
echo "Generating host AOT snapshot..."
$GEN_SNAPSHOT \
--snapshot-kind=app-aot-elf \
--elf=$BUILD_DIR/main.snapshot \
$BUILD_DIR/main_aot.dill
echo "Compiling dynamic modules..."
for module in basic exponent trigonometry; do
echo " Compiling module: $module"
$AOT_RUNTIME $DART2BYTECODE \
--platform $VM_PLATFORM \
--target vm \
--packages .dart_tool/package_config.json \
-Ddart.vm.profile=false \
-Ddart.vm.product=true \
-Ddynamic.modules.test.mode=aot \
--import-dill $BUILD_DIR/main_no_aot.dill \
--validate $INTERFACE_YAML \
--bytecode-options=source-positions \
--allow-dynamic-calls-in-dynamic-modules \
--extra-selectors-allowed-in-dynamic-calls=m5,m6,m7,m10,m11,m15,m16,call \
--output $APP_DATA_DIR/$module.bytecode \
--prefix-library-uris import/prefix \
$MODULES_DIR/$module.dart
done
echo "Launching application..."
echo "To exit, type 'exit'."
echo "To load basic operations, type: load basic"
echo "To load exponent operations, type: load exponent"
echo "To load trigonometry operations, type: load trigonometry"
echo "To use addition: + 1 2 3"
echo "To use subtraction (after load basic): - 10 3"
echo "To use exponent (after load exponent): ^ 2 3"
echo "To use trigonometry (after load trigonometry): sin 1.57079"
$AOT_RUNTIME $BUILD_DIR/main.snapshot "$APP_DATA_DIR"