Files
sdk/pkg/vm/tool/precompiler2
T
Vyacheslav Egorov 9f2455796f [vm/snapshot] Make references between code and pool entries explicit in snapshot profile.
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>
2020-02-28 10:40:33 +00:00

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