9f2455796f
Code references other objects via object pools. In bare instructions mode individual objects pool are merged together into a global object pool, which means that we no longer can clearly see which objects are referenced by each individual code object. This CL adds logic into snapshot writer to include these implicit references into the snapshot profile. We achieve this by keeping individual object pools around (but avoiding writing them into the snapshot itself). R=sjindel@google.com Change-Id: I35b48fcfc26c0a8c0b66593139fa7ac8e627da6c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/136626 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Samir Jindel <sjindel@google.com>
126 lines
3.6 KiB
Bash
Executable File
126 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
|
|
# for details. All rights reserved. Use of this source code is governed by a
|
|
# BSD-style license that can be found in the LICENSE file.
|
|
|
|
# Script for generating AOT snapshot using Dart 2 pipeline: Fasta with
|
|
# strong mode enabled, AOT specific Kernel-to-Kernel transformations and
|
|
# Dart VM precompiler with strong mode semantics and reified generics.
|
|
|
|
# Parse incoming arguments and extract the value of --packages option if any
|
|
# was passed. Split options (--xyz) and non-options into two separate arrays.
|
|
# All options will be passed to gen_snapshot, while --packages will be
|
|
# passed to Fasta.
|
|
|
|
set -e
|
|
|
|
OPTIONS=()
|
|
GEN_KERNEL_OPTIONS=()
|
|
PACKAGES=
|
|
BUILD_ASM=0
|
|
|
|
ARGV=()
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--packages=*)
|
|
PACKAGES="$arg"
|
|
;;
|
|
--enable-asserts | \
|
|
--enable-experiment=*)
|
|
GEN_KERNEL_OPTIONS+=("$arg")
|
|
OPTIONS+=("$arg")
|
|
;;
|
|
--tfa | \
|
|
--no-tfa | \
|
|
--null-safety | \
|
|
--no-null-safety | \
|
|
--gen-bytecode | \
|
|
--no-gen-bytecode | \
|
|
-D* )
|
|
GEN_KERNEL_OPTIONS+=("$arg")
|
|
;;
|
|
--build-assembly)
|
|
BUILD_ASM=1
|
|
;;
|
|
-v*)
|
|
set -x
|
|
;;
|
|
--*)
|
|
OPTIONS+=("$arg")
|
|
;;
|
|
*)
|
|
ARGV+=("$arg")
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ "${#ARGV[@]}" -ne 2 ]; then
|
|
echo "Usage: $0 [options] <source> <snapshot>"
|
|
exit 1
|
|
fi
|
|
|
|
SOURCE_FILE="${ARGV[0]}"
|
|
SNAPSHOT_FILE="${ARGV[1]}"
|
|
|
|
if [ $BUILD_ASM -eq 1 ]; then
|
|
GEN_SNAPSHOT_OPTION="--snapshot-kind=app-aot-assembly"
|
|
GEN_SNAPSHOT_FILENAME="--assembly=${SNAPSHOT_FILE}.S"
|
|
else
|
|
GEN_SNAPSHOT_OPTION="--snapshot-kind=app-aot-elf"
|
|
GEN_SNAPSHOT_FILENAME="--elf=${SNAPSHOT_FILE}"
|
|
fi
|
|
|
|
function follow_links() {
|
|
file="$1"
|
|
while [ -h "$file" ]; do
|
|
# On Mac OS, readlink -f doesn't work.
|
|
file="$(readlink "$file")"
|
|
done
|
|
echo "$file"
|
|
}
|
|
|
|
# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
|
|
PROG_NAME="$(follow_links "$BASH_SOURCE")"
|
|
|
|
# Handle the case where dart-sdk/bin has been symlinked to.
|
|
CUR_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"
|
|
|
|
SDK_DIR="$CUR_DIR/../../.."
|
|
|
|
if [[ `uname` == 'Darwin' ]]; then
|
|
OUT_DIR="$SDK_DIR/xcodebuild"
|
|
else
|
|
OUT_DIR="$SDK_DIR/out"
|
|
fi
|
|
|
|
export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
|
|
BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"
|
|
|
|
DART="tools/sdks/dart-sdk/bin/dart"
|
|
if [ ! -f "$DART" ]; then
|
|
DART="$BIN_DIR/dart"
|
|
fi
|
|
|
|
# Step 1: Generate Kernel binary from the input Dart source.
|
|
$DART \
|
|
${DART_VM_FLAGS} \
|
|
"${SDK_DIR}/pkg/vm/bin/gen_kernel.dart" \
|
|
--platform "${BIN_DIR}/vm_platform_strong.dill" \
|
|
--aot \
|
|
"${GEN_KERNEL_OPTIONS[@]}" \
|
|
$PACKAGES \
|
|
-o "$SNAPSHOT_FILE.dill" \
|
|
"$SOURCE_FILE"
|
|
|
|
# Step 2: Generate snapshot from the Kernel binary.
|
|
"$BIN_DIR"/gen_snapshot \
|
|
"$GEN_SNAPSHOT_OPTION" \
|
|
"$GEN_SNAPSHOT_FILENAME" \
|
|
"${OPTIONS[@]}" \
|
|
"$SNAPSHOT_FILE.dill"
|
|
|
|
# Step 3: Assemble the assembly file into an ELF object.
|
|
if [ $BUILD_ASM -eq 1 ]; then
|
|
gcc -shared -o "$SNAPSHOT_FILE" "${SNAPSHOT_FILE}.S"
|
|
fi
|