diff options
author | Patrick Northon | 2023-11-29 13:49:02 -0500 |
---|---|---|
committer | Patrick Northon | 2023-11-29 13:49:02 -0500 |
commit | c9ed924ba2b7749d76cdc6c64f17c4be025a74c1 (patch) | |
tree | 5d8742e0f091b591077104475695b7e0846a52f3 /flutter-engine-prepare.sh | |
parent | 30615d9039bd80bfe4c1cdd02e8f9f731795440b (diff) | |
download | aur-c9ed924ba2b7749d76cdc6c64f17c4be025a74c1.tar.gz |
Revamp: the engine will be compiled and cached in the user cache directory per version requested by packages or detected from pubspec file.
Diffstat (limited to 'flutter-engine-prepare.sh')
-rwxr-xr-x | flutter-engine-prepare.sh | 185 |
1 files changed, 165 insertions, 20 deletions
diff --git a/flutter-engine-prepare.sh b/flutter-engine-prepare.sh index 3e2ab652b33c..ca5f099ed391 100755 --- a/flutter-engine-prepare.sh +++ b/flutter-engine-prepare.sh @@ -1,31 +1,176 @@ -readonly _engine_path='/opt/flutter-engine' +#!/hint/bash + +source '/opt/flutter-engine/base.incl' + +readonly _cache_home=${XDG_CACHE_HOME:-$HOME/.cache} +readonly _engine_path="${srcdir}/flutter-engine" readonly _dart_sdk="$_engine_path/out/host_arch_release/dart-sdk" -readonly _engine_version="$(cat "$_engine_path/version")" +FLUTTER_TARGET_CPU="${FLUTTER_TARGET_CPU:-x64}" + +if [[ ! -v _engine_version ]]; then + _engine_version="$(yq -er .environment.flutter 'pubspec.yaml')" -_ln() { rm -rf "$2" && ln -sf "$1" "$2"; } + if [[ -z "$_engine_version" ]]; then + local _pubspec="$(find "${srcdir}" -path "${srcdir}/flutter" -prune -o -path "${srcdir}/flutter-engine" -prune -o -name 'pubspec.yaml' -print -quit)" + if [[ -n "$_pubspec" ]]; then + _engine_version="$(yq -er .environment.flutter "$_pubspec")" + fi + fi +fi -git -C "${srcdir}/flutter-engine" checkout -f "$_engine_version" -git -C "${srcdir}/flutter" checkout -f "$_engine_version" +if [[ -n "$_engine_version" ]]; then + git -C "${srcdir}/flutter-engine" checkout -f "$_engine_version" + git -C "${srcdir}/flutter" checkout -f "$_engine_version" +fi -sed -i 's|"$FLUTTER_ROOT/bin/internal/update_dart_sdk.sh"|#|' "${srcdir}/flutter/bin/internal/shared.sh" -sed -i -E 's|_wait_for_lock$|#_wait_for_lock|' "${srcdir}/flutter/bin/internal/shared.sh" -sed -i 's|--no-enable-mirrors "$SCRIPT_PATH"|--no-enable-mirrors "$SCRIPT_PATH" $ARCH_FLUTTER_OPTS|' \ - "${srcdir}/flutter/bin/internal/shared.sh" -sed -i 's|exec "$DART" --disable-dart-dev --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" "$@"|exec "$DART" --disable-dart-dev --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" $ARCH_FLUTTER_OPTS "$@"|' \ - "${srcdir}/flutter/bin/internal/shared.sh" -rm -rf "${srcdir}/flutter/bin/cache/dart-sdk" || true -mkdir -p "${srcdir}/flutter/bin/cache" -_ln "$_dart_sdk" "${srcdir}/flutter/bin/cache/dart-sdk" +readonly _cached_flutter_dir="${_engine_version+"$_cache_home/flutter-engine/$FLUTTER_TARGET_CPU/$_engine_version"}" -install -Dm755 <(cat << EOF +pushd "${srcdir}" + sed -i 's|"$FLUTTER_ROOT/bin/internal/update_dart_sdk.sh"|#|' "${srcdir}/flutter/bin/internal/shared.sh" + sed -i -E 's|_wait_for_lock$|#_wait_for_lock|' "${srcdir}/flutter/bin/internal/shared.sh" + sed -i 's|--no-enable-mirrors "$SCRIPT_PATH"|--no-enable-mirrors "$SCRIPT_PATH" $ARCH_FLUTTER_OPTS|' \ + "${srcdir}/flutter/bin/internal/shared.sh" + sed -i 's|exec "$DART" --disable-dart-dev --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" "$@"|exec "$DART" --disable-dart-dev --packages="$FLUTTER_TOOLS_DIR/.dart_tool/package_config.json" $FLUTTER_TOOL_ARGS "$SNAPSHOT_PATH" $ARCH_FLUTTER_OPTS "$@"|' \ + "${srcdir}/flutter/bin/internal/shared.sh" + rm -rf "${srcdir}/flutter/bin/cache/dart-sdk" || true + mkdir -p "${srcdir}/flutter/bin/cache" + _ln "$_dart_sdk" "${srcdir}/flutter/bin/cache/dart-sdk" + + install -Dm755 <(cat << EOF #!/usr/bin/env sh $_dart_sdk/bin/dart "\$@" EOF -) "${srcdir}/flutter/bin/dart" + ) "${srcdir}/flutter/bin/dart" + + git clone --depth=1 --single-branch 'https://chromium.googlesource.com/chromium/tools/depot_tools.git' "${srcdir}/depot_tools" +popd + +export \ + PATH+=":${srcdir}/depot_tools" \ + DEPOT_TOOLS_UPDATE=0 \ + VPYTHON_BYPASS='manually managed python not supported by chrome operations' + +_prepare_flutter_engine() { + pushd "${srcdir}" + + cat >.gclient <<EOF +solutions = [ + { + "name": "src/flutter", + "url": "file://${srcdir}/flutter-engine${_engine_version+"@$_engine_version"}", + "managed": False, + "custom_deps": {}, + "custom_vars": {} + } +] +EOF + + #--nohooks \ + gclient.py sync -D -R \ + --with_branch_heads \ + --with_tags \ + --output-json='gclient-sync.json' \ + --shallow + + cd 'src' + + sed -i 's|prefix = rebased_clang_dir|prefix= ""|g' 'build/toolchain/linux/BUILD.gn' # use system clang + sed -i 's|}/|}|g' 'build/toolchain/linux/BUILD.gn' # use system clang + sed -i 's|rebase|#|g' 'build/toolchain/linux/BUILD.gn' + + sed -i 's|$wayland_dir|//third_party/angle/third_party/wayland|' \ + 'third_party/angle/BUILD.gn' \ + 'third_party/angle/src/common/vulkan/BUILD.gn' \ + 'third_party/angle/src/third_party/volk/BUILD.gn' + + sed -i 's|import("//build/config/chromecast_build.gni")||' 'third_party/angle/src/tests/BUILD.gn' + sed -i '/-Wno-deprecated-literal-operator/d' 'build/config/compiler/BUILD.gn' + sed -i '/G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoLayout, g_object_unref)/d' 'flutter/shell/platform/linux/fl_accessible_text_field.cc' + + cat > 'third_party/dart/build/dart/prebuilt_dart_sdk.gni' <<-EOF + import("../executable_suffix.gni") + _dart_root = rebase_path("../..") + #_prebuilt_dart_exe = "" + #_prebuilt_dart_exe_trial = "" + prebuilt_dart_exe_works = true +EOF + + #_ln "${srcdir}/emsdk" 'buildtools/emsdk' + popd +} + +_build_flutter_engine() { + pushd "${srcdir}" + + gclient.py sync -D -R \ + --with_branch_heads \ + --with_tags \ + --output-json='gclient-sync.json' \ + --shallow + + cd 'src' + + local outdir + if [[ -z "$_cached_flutter_dir" ]]; then + outdir="${srcdir}/flutter-out/host_arch_release" + else + outdir="${_cached_flutter_dir}/out/host_arch_release" + _ln "${_cached_flutter_dir}/out" "${srcdir}/flutter-out" + fi + + gn gen --no-prebuilt-dart-sdk -qv "$outdir" --args="$(cat <<-EOF + target_os = "linux" + target_cpu = "$FLUTTER_TARGET_CPU" + dart_use_crashpad = false + dart_use_fallback_root_certificates = true + dart_use_compressed_pointers = true + dart_vm_code_coverage = false + dart_debug = false + dart_runtime_mode = "release" + is_debug = false + exclude_kernel_service = false + is_clang = true + skia_use_piex = false + target_sysroot = "/" + verify_sdk_hash = false + enable_unittests = false + flutter_runtime_mode = "release" + EOF + )" + + sed -i 's|ldflags}|ldflags} -fuse-ld=lld|g' "$outdir/toolchain.ninja" # use system linker + ninja -v -C "$outdir" + + #export PATH+=":${srcdir}/src/flutter/lib/web_ui/dev" + #felt build + + popd +} + +_install_flutter_engine() { + pushd "${srcdir}" + + rm -rf 'flutter-out/host_arch_release/'{gen,obj,lib.unstripped,exe.unstripped} + ln -s 'host_arch_release' "flutter-out/arch_release" + ln -s 'host_arch_release' "flutter-out/host_release" + + popd +} -_ln "$_engine_path/out" "${srcdir}/flutter-engine/out" +if [[ -n "$_cached_flutter_dir" ]]; then + if [[ ! -d "$_cached_flutter_dir" ]]; then + _prepare_flutter_engine + _build_flutter_engine + _install_flutter_engine + fi + + _ln "$_cached_flutter_dir/out" "${srcdir}/flutter-engine/out" +else + _prepare_flutter_engine + _build_flutter_engine + _install_flutter_engine + _ln "${srcdir}/flutter-out" "${srcdir}/flutter-engine/out" +fi -export PATH="${srcdir}/flutter/bin:$PATH" -export FLUTTER_ENGINE="${srcdir}/flutter-engine" -export ARCH_FLUTTER_OPTS='--local-engine=arch_release --no-version-check --suppress-analytics' +_setup_env |