7a2c8b3f90
This change adds support for types with different nullabilities to TFA, and adjusts subtyping checks in TFA to take nullability into account. This change assumes that NNBD strong mode is sound and there are no opted-out libraries. Fixes: https://github.com/dart-lang/sdk/issues/40717 Change-Id: I739b6ae317f218ced07636c09cfdbb277e1f81a8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140375 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com> Reviewed-by: Régis Crelier <regis@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 | \
|
|
--null-safety | \
|
|
--no-null-safety | \
|
|
--enable-experiment=*)
|
|
GEN_KERNEL_OPTIONS+=("$arg")
|
|
OPTIONS+=("$arg")
|
|
;;
|
|
--tfa | \
|
|
--no-tfa | \
|
|
--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
|