diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 6ed7037323e13..0000000000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-# See Dependabot documentation for all configuration options:
-# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
-
-version: 2
-updates:
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: "weekly"
- groups:
- all-github-actions:
- patterns: [ "*" ]
- reviewers:
- - "christopherfujino"
- - "jmagman"
- labels:
- - "team"
- - "team-infra"
- - "autosubmit"
- ignore:
- - dependency-name: "codecov/codecov-action"
- update-types: ["version-update:semver-patch"]
diff --git a/.github/workflows/build-docker.yml b/.github/workflows/build-docker.yml
new file mode 100644
index 0000000000000..62267c3bbf820
--- /dev/null
+++ b/.github/workflows/build-docker.yml
@@ -0,0 +1,21 @@
+name: Build Docker
+
+on: [workflow_dispatch]
+
+jobs:
+ builder:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: docker/setup-buildx-action@v3
+ - uses: docker/login-action@v3
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - uses: docker/build-push-action@v5
+ with:
+ context: ci/tizen
+ file: ci/tizen/Dockerfile
+ push: true
+ tags: ghcr.io/${{ github.repository_owner }}/build-engine:latest
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000000000..5949eaed02814
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,311 @@
+name: Build
+
+on: [push, pull_request]
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ container:
+ image: ghcr.io/flutter-tizen/build-engine:latest
+ credentials:
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ strategy:
+ matrix:
+ arch: [arm, arm64, x86]
+ mode: [debug, release, profile]
+ include:
+ - arch: arm
+ triple: arm-linux-gnueabi
+ - arch: arm64
+ triple: aarch64-linux-gnu
+ - arch: x86
+ triple: i686-linux-gnu
+ exclude:
+ - arch: x86
+ mode: release
+ - arch: x86
+ mode: profile
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ path: flutter
+ fetch-depth: 1
+
+ - uses: actions/cache@v4
+ with:
+ path: /tizen_tools/sysroot
+ key: sysroot
+
+ - name: Install depot_tools
+ run: |
+ git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
+ echo "$PWD/depot_tools" >> $GITHUB_PATH
+ export PATH="$PWD/depot_tools:$PATH"
+ # Install ninja
+ apt install ninja-build
+
+ - name: Run gclient sync
+ run: |
+ cd flutter
+ gclient config --unmanaged https://github.com/jsuya/flutter
+ sed -i "s/'flutter'/'.'/g" ./.gclient
+ gclient setdep --var=download_dart_sdk=False --var=download_android_deps=False --var=download_fuchsia_deps=False --deps-file=DEPS
+ gclient sync -v --no-history --shallow
+
+ - name: Generate sysroot
+ run: flutter/engine/src/flutter/ci/tizen/generate_sysroot.py --out /tizen_tools/sysroot
+
+ - name: Build
+ run: |
+ cd flutter
+ # Ignore unsupported linker option.
+ sed -i "/-Wl,--undefined-version/d" engine/src/build/config/compiler/BUILD.gn
+
+ engine/src/flutter/tools/gn \
+ --target-os linux \
+ --linux-cpu ${{ matrix.arch }} \
+ --no-goma \
+ --target-toolchain /tizen_tools/toolchains \
+ --target-sysroot /tizen_tools/sysroot/${{ matrix.arch }} \
+ --target-triple ${{ matrix.triple }} \
+ --runtime-mode ${{ matrix.mode }} \
+ --enable-fontconfig \
+ --disable-desktop-embeddings \
+ --target-dir build
+ cd engine/src
+ ninja -C out/build flutter_engine_library
+ cp -f flutter/third_party/icu/flutter/icudtl.dat out/build
+
+ - name: Build gen_snapshot
+ if: ${{ matrix.mode != 'debug' }}
+ run: |
+ cd flutter
+ ninja -C engine/src/out/build clang_x64/gen_snapshot
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}
+ path: |
+ flutter/engine/src/out/build/libflutter_engine.so
+ flutter/engine/src/out/build/icudtl.dat
+ if-no-files-found: error
+
+ - uses: actions/upload-artifact@v4
+ if: ${{ github.event_name == 'push' }}
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}_symbols
+ path: flutter/engine/src/out/build/so.unstripped/libflutter_engine.so
+ if-no-files-found: error
+
+ - uses: actions/upload-artifact@v4
+ if: ${{ matrix.mode != 'debug' }}
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}_linux-x64
+ path: flutter/engine/src/out/build/clang_x64/gen_snapshot
+ if-no-files-found: error
+
+ windows-build:
+ runs-on: windows-latest
+
+ strategy:
+ matrix:
+ arch: [arm, arm64]
+ mode: [release, profile]
+
+ steps:
+ - name: Run git checkout
+ run: |
+ mkdir C:\workspace\flutter
+ cd C:\workspace\flutter
+ git config --global core.autocrlf true
+ git init --quiet
+ git remote add origin https://github.com/${{ github.repository }}
+ git fetch --depth 1 origin ${{ github.sha }}
+ git checkout FETCH_HEAD
+
+ - name: Environment setup
+ run: |
+ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -Force
+ echo "DEPOT_TOOLS_WIN_TOOLCHAIN=0" >> $Env:GITHUB_ENV
+ echo "GYP_MSVS_OVERRIDE_PATH=C:\Program Files\Microsoft Visual Studio\2022\Enterprise" >> $Env:GITHUB_ENV
+ echo "WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10" >> $Env:GITHUB_ENV
+
+ - name: Install depot_tools
+ run: |
+ Invoke-WebRequest -Uri https://storage.googleapis.com/chrome-infra/depot_tools.zip -OutFile depot_tools.zip
+ 7z x -y -o"C:\workspace\depot_tools" .\depot_tools.zip
+ echo "C:\workspace\depot_tools" >> $Env:GITHUB_PATH
+
+ - name: Run gclient sync
+ working-directory: C:\workspace\flutter
+ shell: powershell
+ run: |
+ gclient config --unmanaged https://github.com/jsuya/flutter
+ cat .gclient | %{$_ -replace "'flutter'","'.'"}
+ gclient setdep --var=download_dart_sdk=False --var=download_android_deps=False --var=download_fuchsia_deps=False --deps-file=DEPS
+ gclient sync -v --no-history --shallow
+
+ - name: Build
+ working-directory: C:\workspace\flutter\engine\src
+ run: |
+ python3 .\flutter\tools\gn `
+ --linux `
+ --linux-cpu=${{ matrix.arch }} `
+ --runtime-mode=${{ matrix.mode }} `
+ --no-goma `
+ --target-dir build
+ # TODO(jsuya) : https://github.com/flutter/flutter/issues/163487
+ C:\workspace\flutter\engine\src\flutter/third_party/ninja/ninja -C .\out\build gen_snapshot
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}_windows-x64
+ path: C:\workspace\flutter\engine\src\out\build\gen_snapshot.exe
+ if-no-files-found: error
+
+ macos-build:
+ runs-on: macos-latest
+
+ strategy:
+ matrix:
+ arch: [arm, arm64]
+ mode: [release, profile]
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ path: flutter
+ fetch-depth: 1
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+
+ - name: Install depot_tools
+ run: |
+ git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
+ echo "$PWD/depot_tools" >> $GITHUB_PATH
+
+ - name: Run gclient sync
+ run: |
+ cd flutter
+ gclient config --unmanaged https://github.com/jsuya/flutter
+ sed -i '' "s/'flutter'/'.'/g" .gclient
+ gclient setdep --var=download_dart_sdk=False --var=download_android_deps=False --var=download_fuchsia_deps=False --deps-file=DEPS
+ gclient sync -v --no-history --shallow
+
+ - name: Build
+ run: |
+ cd flutter
+ # Change host_toolchain to mac/clang_arm64.
+ sed -i "" "s|//build/toolchain/linux:clang_$host_cpu|//build/toolchain/mac:clang_$host_cpu|g" engine/src/build/config/BUILDCONFIG.gn
+
+ # Pass dummy values to prevent using the default (Linux) toolchain.
+ engine/src/flutter/tools/gn \
+ --linux \
+ --linux-cpu=${{ matrix.arch }} \
+ --no-goma \
+ --target-toolchain _ \
+ --target-sysroot _ \
+ --target-triple _ \
+ --runtime-mode=${{ matrix.mode }} \
+ --disable-desktop-embeddings \
+ --target-dir build
+ cd engine/src
+ # TODO(jsuya) : https://github.com/flutter/flutter/issues/163487
+ flutter/third_party/ninja/ninja -C out/build clang_arm64/gen_snapshot
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}_darwin-arm64
+ path: flutter/engine/src/out/build/clang_arm64/gen_snapshot
+ if-no-files-found: error
+
+ macos-intel-build:
+ runs-on: macos-13
+
+ strategy:
+ matrix:
+ arch: [arm, arm64]
+ mode: [release, profile]
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ path: flutter
+ fetch-depth: 1
+
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.11"
+
+ - name: Install depot_tools
+ run: |
+ git clone --depth=1 https://chromium.googlesource.com/chromium/tools/depot_tools.git
+ echo "$PWD/depot_tools" >> $GITHUB_PATH
+
+ - name: Run gclient sync
+ run: |
+ cd flutter
+ gclient config --unmanaged https://github.com/jsuya/flutter
+ sed -i '' "s/'flutter'/'.'/g" .gclient
+ gclient setdep --var=download_dart_sdk=False --var=download_android_deps=False --var=download_fuchsia_deps=False --deps-file=DEPS
+ gclient sync -v --no-history --shallow
+
+ - name: Build
+ run: |
+ cd flutter
+ # Change host_toolchain to mac/clang_x64.
+ sed -i "" "s|//build/toolchain/linux:clang_$host_cpu|//build/toolchain/mac:clang_$host_cpu|g" engine/src/build/config/BUILDCONFIG.gn
+
+ # Pass dummy values to prevent using the default (Linux) toolchain.
+ engine/src/flutter/tools/gn \
+ --linux \
+ --linux-cpu=${{ matrix.arch }} \
+ --no-goma \
+ --target-toolchain _ \
+ --target-sysroot _ \
+ --target-triple _ \
+ --runtime-mode=${{ matrix.mode }} \
+ --disable-desktop-embeddings \
+ --target-dir build
+ cd engine/src
+ # TODO(jsuya) : https://github.com/flutter/flutter/issues/163487
+ flutter/third_party/ninja/ninja -C out/build clang_x64/gen_snapshot
+
+ - uses: actions/upload-artifact@v4
+ with:
+ name: tizen-${{ matrix.arch }}-${{ matrix.mode }}_darwin-x64
+ path: flutter/engine/src/out/build/clang_x64/gen_snapshot
+ if-no-files-found: error
+
+ release:
+ needs: [build]
+ if: ${{ github.event_name == 'push' }}
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/download-artifact@v4
+
+ - name: Create archives
+ run: |
+ for name in tizen-*; do
+ 7z a $name.zip ./$name/*
+ done
+
+ - name: Set variables
+ run: |
+ echo "SHORT_SHA=$(git rev-parse --short $GITHUB_SHA)" >> $GITHUB_ENV
+ echo "VERSION=$(echo "${{ github.ref_name }}" | cut -d'-' -f2)" >> $GITHUB_ENV
+
+ - uses: softprops/action-gh-release@v2
+ with:
+ name: ${{ env.VERSION }} (${{ env.SHORT_SHA }})
+ tag_name: ${{ env.SHORT_SHA }}
+ target_commitish: ${{ github.sha }}
+ files: tizen-*.zip
+ body: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
diff --git a/DEPS b/DEPS
index b8b479d1d0579..a49493fbe7819 100644
--- a/DEPS
+++ b/DEPS
@@ -122,7 +122,7 @@ vars = {
"checkout_llvm": False,
# Setup Git hooks by default.
- 'setup_githooks': True,
+ 'setup_githooks': False,
# When this is true, the Flutter Engine's configuration files and scripts for
# RBE will be downloaded from CIPD. This option is only usable by Googlers.
diff --git a/engine/src/flutter/ci/tizen/.gitignore b/engine/src/flutter/ci/tizen/.gitignore
new file mode 100644
index 0000000000000..c23e7e850155f
--- /dev/null
+++ b/engine/src/flutter/ci/tizen/.gitignore
@@ -0,0 +1,3 @@
+/llvm-project*/
+/toolchains*/
+/sysroot/
diff --git a/engine/src/flutter/ci/tizen/Dockerfile b/engine/src/flutter/ci/tizen/Dockerfile
new file mode 100644
index 0000000000000..f5d0f1fc5520f
--- /dev/null
+++ b/engine/src/flutter/ci/tizen/Dockerfile
@@ -0,0 +1,32 @@
+###############################
+### Stage for building LLVM ###
+###############################
+
+FROM ubuntu:22.04 AS llvm
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update && \
+ apt-get install -y git zip build-essential cmake ninja-build clang-11 && \
+ apt-get clean
+
+COPY build_llvm.sh .
+
+RUN /build_llvm.sh
+
+
+##############################
+### Create a release image ###
+##############################
+
+FROM ubuntu:22.04
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+RUN apt-get update && \
+ apt-get install -y binutils-arm-linux-gnueabi binutils-aarch64-linux-gnu binutils-i686-linux-gnu && \
+ apt-get install -y git curl pkg-config ca-certificates python3 python3-pip rpm2cpio cpio && \
+ apt-get clean
+
+# Copy build artifacts from the previous stage.
+COPY --from=llvm /toolchains/ /tizen_tools/toolchains/
diff --git a/engine/src/flutter/ci/tizen/arm.patch b/engine/src/flutter/ci/tizen/arm.patch
new file mode 100644
index 0000000000000..1dabb3f2803d4
--- /dev/null
+++ b/engine/src/flutter/ci/tizen/arm.patch
@@ -0,0 +1,15 @@
+diff --git a/usr/include/asm-arm/hwcap.h b/usr/include/asm-arm/hwcap.h
+index da85060..adaf619 100644
+--- a/usr/include/asm-arm/hwcap.h
++++ b/usr/include/asm-arm/hwcap.h
+@@ -26,5 +26,10 @@
+ #define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */
+ #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
+
++#define HWCAP2_AES (1 << 0)
++#define HWCAP2_PMULL (1 << 1)
++#define HWCAP2_SHA1 (1 << 2)
++#define HWCAP2_SHA2 (1 << 3)
++#define HWCAP2_CRC32 (1 << 4)
+
+ #endif /* __ASMARM_HWCAP_H */
diff --git a/engine/src/flutter/ci/tizen/build_llvm.sh b/engine/src/flutter/ci/tizen/build_llvm.sh
new file mode 100755
index 0000000000000..507395cea8363
--- /dev/null
+++ b/engine/src/flutter/ci/tizen/build_llvm.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+# Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+set -e
+
+SCRIPT_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
+OUTPUT_DIR="$SCRIPT_DIR/toolchains"
+cd "$SCRIPT_DIR"
+
+# Check out the LLVM project source code.
+if [ -d llvm-project ]; then
+ echo "The directory already exists. Skipping download."
+ cd llvm-project
+else
+ mkdir llvm-project
+ cd llvm-project
+ git init
+ git remote add origin https://github.com/llvm/llvm-project.git
+ git fetch --depth=1 origin llvmorg-17.0.6
+ git checkout FETCH_HEAD
+fi
+
+# Run the ninja build.
+mkdir -p build && cd build
+cmake -G Ninja \
+ -DCLANG_VENDOR="Tizen" \
+ -DLLVM_ENABLE_PROJECTS="clang" \
+ -DLLVM_TARGETS_TO_BUILD="X86;ARM;AArch64" \
+ -DCMAKE_C_COMPILER=clang-11 \
+ -DCMAKE_CXX_COMPILER=clang++-11 \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX="$OUTPUT_DIR" \
+ ../llvm
+ninja install -j$(nproc)
+
+# Create symbolic links to binutils.
+# See build/toolchain/custom/BUILD.gn for more information.
+cd "$OUTPUT_DIR/bin"
+for name in ar readelf nm strip; do
+ ln -sf llvm-$name arm-linux-gnueabi-$name
+ ln -sf llvm-$name aarch64-linux-gnu-$name
+ ln -sf llvm-$name i686-linux-gnu-$name
+done
diff --git a/engine/src/flutter/ci/tizen/generate_sysroot.py b/engine/src/flutter/ci/tizen/generate_sysroot.py
new file mode 100755
index 0000000000000..c4bdc51f347cf
--- /dev/null
+++ b/engine/src/flutter/ci/tizen/generate_sysroot.py
@@ -0,0 +1,151 @@
+#!/usr/bin/env python3
+# Copyright 2022 Samsung Electronics Co., Ltd. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import argparse
+import os
+import re
+import shutil
+import subprocess
+import sys
+import urllib.parse
+import urllib.request
+from pathlib import Path
+
+base_packages = [
+ 'gcc',
+ 'glibc',
+ 'glibc-devel',
+ 'libgcc',
+ 'libstdc++',
+ 'linux-glibc-devel',
+ 'zlib-devel',
+]
+
+unified_packages = [
+ 'fontconfig',
+ 'fontconfig-devel',
+ 'freetype2-devel',
+ 'libpng-devel',
+]
+
+
+def generate_sysroot(sysroot: Path, api_version: float, arch: str, quiet=False):
+ if arch == 'arm':
+ tizen_arch = 'armv7l'
+ elif arch == 'arm64':
+ tizen_arch = 'aarch64'
+ elif arch == 'x86':
+ tizen_arch = 'i686'
+ else:
+ sys.exit('Unknown arch: ' + arch)
+
+ base_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen-{}/Tizen-{}-Base/latest/repos/standard/packages'.format(
+ api_version, api_version
+ )
+ unified_repo = 'http://download.tizen.org/snapshots/TIZEN/Tizen-{}/Tizen-{}-Unified/latest/repos/standard/packages'.format(
+ api_version, api_version
+ )
+
+ # Retrieve html documents.
+ documents = {}
+ for url in ['{}/{}'.format(base_repo, tizen_arch), '{}/{}'.format(base_repo, 'noarch'),
+ '{}/{}'.format(unified_repo, tizen_arch), '{}/{}'.format(unified_repo, 'noarch')]:
+ request = urllib.request.Request(url)
+ with urllib.request.urlopen(request) as response:
+ documents[url] = response.read().decode('utf-8')
+
+ # Download packages.
+ download_path = sysroot / '.rpms'
+ download_path.mkdir(exist_ok=True)
+ existing_rpms = [f for f in download_path.iterdir() if f.suffix == '.rpm']
+
+ for package in base_packages + unified_packages:
+ quoted = urllib.parse.quote(package)
+ pattern = re.escape(quoted) + '-\\d+\\.[\\d_\\.]+-[\\d\\.]+\\..+\\.rpm'
+
+ if any([re.match(pattern, rpm.name) for rpm in existing_rpms]):
+ continue
+
+ for parent, doc in documents.items():
+ match = re.search('.+?'.format(pattern), doc)
+ if match:
+ rpm_url = '{}/{}'.format(parent, match.group(1))
+ break
+
+ if match:
+ if not quiet:
+ print('Downloading ' + rpm_url)
+ urllib.request.urlretrieve(rpm_url, download_path / match.group(1))
+ else:
+ sys.exit('Could not find a package named ' + package)
+
+ # Extract files.
+ for rpm in [f for f in download_path.iterdir() if f.suffix == '.rpm']:
+ command = 'rpm2cpio {} | cpio -idum --quiet'.format(rpm)
+ subprocess.run(command, shell=True, cwd=sysroot, check=True)
+
+ # Create symbolic links.
+ asm = sysroot / 'usr' / 'include' / 'asm'
+ if not asm.exists():
+ os.symlink('asm-' + arch, asm)
+ pkgconfig = sysroot / 'usr' / 'lib' / 'pkgconfig'
+ if arch == 'arm64' and not pkgconfig.exists():
+ os.symlink('../lib64/pkgconfig', pkgconfig)
+
+ # Copy objects required by the linker, such as crtbeginS.o and libgcc.a.
+ if arch == 'arm64':
+ libpath = sysroot / 'usr' / 'lib64'
+ else:
+ libpath = sysroot / 'usr' / 'lib'
+ subprocess.run('cp gcc/*/*/*.o gcc/*/*/*.a .', shell=True, cwd=libpath, check=True)
+
+ # Apply a patch if applicable.
+ patch = Path(__file__).parent / '{}.patch'.format(arch)
+ if patch.is_file():
+ command = 'patch -p1 -s -d {} < {}'.format(sysroot, patch)
+ subprocess.run(command, shell=True, check=True)
+
+
+def main():
+ # Check dependencies.
+ for dep in ['rpm2cpio', 'cpio', 'git']:
+ if not shutil.which(dep):
+ sys.exit('{} is not installed. To install, run:\n'
+ ' sudo apt install {}'.format(dep, dep))
+
+ # Parse arguments.
+ parser = argparse.ArgumentParser(description='Tizen sysroot generator')
+ parser.add_argument('-o', '--out', metavar='PATH', type=str, help='Path to the output directory')
+ parser.add_argument('-f', '--force', action='store_true', help='Force re-downloading of packages')
+ parser.add_argument('-q', '--quiet', action='store_true', help='Suppress log output')
+ parser.add_argument(
+ '--api-version',
+ metavar='VER',
+ default=6.0,
+ type=float,
+ help='Target API version (defaults to 6.0)'
+ )
+ args = parser.parse_args()
+
+ if args.out:
+ outpath = Path(args.out)
+ else:
+ outpath = Path(__file__).parent / 'sysroot'
+ outpath.mkdir(exist_ok=True)
+
+ for arch in ['arm', 'arm64', 'x86']:
+ sysroot = outpath / arch
+ if args.force and sysroot.is_dir():
+ shutil.rmtree(sysroot)
+ sysroot.mkdir(exist_ok=True)
+
+ if not args.quiet:
+ print('Generating sysroot for {}...'.format(arch))
+ generate_sysroot(sysroot.resolve(), args.api_version, arch, args.quiet)
+
+
+# Execute only if run as a script.
+if __name__ == '__main__':
+ main()
diff --git a/engine/src/flutter/common/config.gni b/engine/src/flutter/common/config.gni
index b2ae1118e2881..8ce6fb14d2352 100644
--- a/engine/src/flutter/common/config.gni
+++ b/engine/src/flutter/common/config.gni
@@ -163,6 +163,4 @@ if (flutter_prebuilt_dart_sdk) {
# TODO: We can't build the engine artifacts for arm (32-bit) right now;
# see https://github.com/flutter/flutter/issues/74322.
build_engine_artifacts =
- flutter_build_engine_artifacts && !is_android &&
- (current_toolchain == host_toolchain ||
- (is_linux && !is_chromeos && current_cpu != "arm") || is_mac || is_win)
+ flutter_build_engine_artifacts && current_toolchain == host_toolchain
diff --git a/engine/src/flutter/display_list/testing/BUILD.gn b/engine/src/flutter/display_list/testing/BUILD.gn
index fc48324c76e0c..3393da1d1e998 100644
--- a/engine/src/flutter/display_list/testing/BUILD.gn
+++ b/engine/src/flutter/display_list/testing/BUILD.gn
@@ -30,7 +30,8 @@ surface_provider_include_software = !is_android && !is_ios
# But, since benchmarks do not run on Windows and rendertests only
# runs on SW by default, this restriction currently only limits the
# ability to manually cross-check OpenGL on Windows for rendertests
-surface_provider_include_gl = !is_fuchsia && !is_ios && !is_win && !is_mac
+surface_provider_include_gl =
+ !is_fuchsia && !is_ios && !is_win && !is_mac && !is_linux
# TODO (https://github.com/flutter/flutter/issues/107357):
# impeller_enable_vulkan currently requires skia to not use VMA, which in turn
diff --git a/engine/src/flutter/impeller/tools/args.gni b/engine/src/flutter/impeller/tools/args.gni
index adfc111ffce15..1b8d30d018b3d 100644
--- a/engine/src/flutter/impeller/tools/args.gni
+++ b/engine/src/flutter/impeller/tools/args.gni
@@ -17,7 +17,7 @@ declare_args() {
enable_unittests) && target_os != "fuchsia"
# Whether the Vulkan backend is enabled.
- impeller_enable_vulkan = (is_linux || is_win || is_android || is_mac ||
+ impeller_enable_vulkan = (is_win || is_android || is_mac ||
enable_unittests) && target_os != "fuchsia"
}
diff --git a/engine/src/flutter/impeller/tools/shaders.gni b/engine/src/flutter/impeller/tools/shaders.gni
index 140b886552de4..3fbdbb1301342 100644
--- a/engine/src/flutter/impeller/tools/shaders.gni
+++ b/engine/src/flutter/impeller/tools/shaders.gni
@@ -111,22 +111,6 @@ template("impeller_shaders") {
}
analyze = analyze
}
-
- gles3_shaders = "gles3_$target_name"
-
- impeller_shaders_gles(gles3_shaders) {
- name = invoker.name
- require_framebuffer_fetch = require_framebuffer_fetch
- gles_language_version = 300
- is_300 = true
- analyze = false
- if (defined(invoker.gles_exclusions)) {
- shaders = invoker.shaders - invoker.gles_exclusions
- } else {
- shaders = invoker.shaders
- }
- analyze = analyze
- }
}
if (impeller_enable_vulkan) {
@@ -156,10 +140,7 @@ template("impeller_shaders") {
}
if (enable_opengles) {
- public_deps += [
- ":$gles3_shaders",
- ":$gles_shaders",
- ]
+ public_deps += [ ":$gles_shaders" ]
}
if (impeller_enable_vulkan) {
diff --git a/engine/src/flutter/shell/config.gni b/engine/src/flutter/shell/config.gni
index 3f498d2c044f7..9ad466439ee2e 100644
--- a/engine/src/flutter/shell/config.gni
+++ b/engine/src/flutter/shell/config.gni
@@ -17,6 +17,6 @@ declare_args() {
test_enable_metal = shell_enable_metal
# The Vulkan unittests are combined with the GL unittests.
- test_enable_vulkan = is_fuchsia || shell_enable_gl
+ test_enable_vulkan = is_fuchsia
test_enable_software = shell_enable_software
}
diff --git a/engine/src/flutter/shell/platform/embedder/embedder_external_texture_gl.cc b/engine/src/flutter/shell/platform/embedder/embedder_external_texture_gl.cc
index 852e7390a25ae..d03019c6aef92 100644
--- a/engine/src/flutter/shell/platform/embedder/embedder_external_texture_gl.cc
+++ b/engine/src/flutter/shell/platform/embedder/embedder_external_texture_gl.cc
@@ -140,6 +140,10 @@ sk_sp EmbedderExternalTextureGL::ResolveTextureImpeller(
}
impeller::TextureDescriptor desc;
+ desc.type = impeller::TextureType::kTextureExternalOES;
+ desc.storage_mode = impeller::StorageMode::kDevicePrivate;
+ desc.format = impeller::PixelFormat::kR8G8B8A8UNormInt;
+ desc.mip_count = 1;
desc.size = impeller::ISize(texture->width, texture->height);
impeller::ContextGLES& context =
@@ -148,6 +152,9 @@ sk_sp EmbedderExternalTextureGL::ResolveTextureImpeller(
impeller::HandleType::kTexture, texture->target);
std::shared_ptr image =
impeller::TextureGLES::WrapTexture(context.GetReactor(), desc, handle);
+ image->MarkContentsInitialized();
+ image->SetCoordinateSystem(
+ impeller::TextureCoordinateSystem::kUploadFromHost);
if (!image) {
// In case Skia rejects the image, call the release proc so that
@@ -158,6 +165,14 @@ sk_sp EmbedderExternalTextureGL::ResolveTextureImpeller(
FML_LOG(ERROR) << "Could not create external texture";
return nullptr;
}
+
+ if (!texture->bind_callback(texture->user_data)) {
+ if (texture->destruction_callback) {
+ texture->destruction_callback(texture->user_data);
+ }
+ return nullptr;
+ }
+
if (texture->destruction_callback &&
!context.GetReactor()->RegisterCleanupCallback(
handle,
diff --git a/engine/src/flutter/testing/BUILD.gn b/engine/src/flutter/testing/BUILD.gn
index 1a21ac33669be..48b902554e139 100644
--- a/engine/src/flutter/testing/BUILD.gn
+++ b/engine/src/flutter/testing/BUILD.gn
@@ -53,7 +53,7 @@ source_set("testing") {
if (enable_unittests && is_linux) {
# So that we can call gtk_init in main().
- configs += [ "//flutter/shell/platform/linux/config:gtk" ]
+ # configs += [ "//flutter/shell/platform/linux/config:gtk" ]
}
public_deps = [ ":testing_lib" ]
diff --git a/engine/src/flutter/third_party/txt/src/txt/platform_linux.cc b/engine/src/flutter/third_party/txt/src/txt/platform_linux.cc
index e542d82e50477..add93f0836c9f 100644
--- a/engine/src/flutter/third_party/txt/src/txt/platform_linux.cc
+++ b/engine/src/flutter/third_party/txt/src/txt/platform_linux.cc
@@ -19,7 +19,7 @@
namespace txt {
std::vector GetDefaultFontFamilies() {
- return {"Ubuntu", "Cantarell", "DejaVu Sans", "Liberation Sans", "Arial"};
+ return {"TizenDefaultFont", "SamsungOneUI"};
}
sk_sp GetDefaultFontManager(uint32_t font_initialization_data) {
diff --git a/engine/src/flutter/tools/gn b/engine/src/flutter/tools/gn
index 325b5cbece147..fe7226dc63501 100755
--- a/engine/src/flutter/tools/gn
+++ b/engine/src/flutter/tools/gn
@@ -89,18 +89,7 @@ def to_command_line(gn_args):
def is_host_build(args):
- # If target_os == None, then this is a host build.
- if args.target_os is None:
- return True
- # For linux arm64 builds, we cross compile from x64 hosts, so the
- # target_os='linux' and linux-cpu='arm64'
- if args.target_os == 'linux' and args.linux_cpu == 'arm64':
- return True
- # The Mac and host targets are redundant. Again, necessary to disambiguate
- # during cross-compilation.
- if args.target_os == 'mac':
- return True
- return False
+ return args.target_os is None
# Determines whether a prebuilt Dart SDK can be used instead of building one.
@@ -502,7 +491,7 @@ def to_gn_args(args):
# does not exist. Further, we set the 'host_cpu' so that it shares the
# bitwidth of the 32-bit arm target.
if sys.platform.startswith(
- ('cygwin', 'win')) and args.target_os == 'android' and gn_args['target_cpu'] == 'arm':
+ ('cygwin', 'win')) and args.target_os != 'win' and gn_args['target_cpu'] == 'arm':
gn_args['host_cpu'] = 'x86'
gn_args['current_cpu'] = 'x86'
@@ -599,7 +588,7 @@ def to_gn_args(args):
else:
gn_args['skia_use_gl'] = args.target_os != 'fuchsia'
- if sys.platform == 'darwin' and args.target_os not in ['android', 'fuchsia']:
+ if sys.platform == 'darwin' and args.target_os not in ['android', 'fuchsia', 'linux']:
# OpenGL is deprecated on macOS > 10.11.
# This is not necessarily needed but enabling this until we have a way to
# build a macOS metal only shell and a gl only shell.
@@ -610,7 +599,7 @@ def to_gn_args(args):
# Enable Vulkan on all platforms except for iOS. This is just
# to save on mobile binary size, as there's no reason the Vulkan embedder
# features can't work on these platforms.
- if gn_args['target_os'] not in ['ios', 'mac']:
+ if gn_args['target_os'] not in ['ios', 'mac', 'linux']:
gn_args['skia_use_vulkan'] = True
gn_args['skia_use_vma'] = False
gn_args['shell_enable_vulkan'] = True
@@ -698,13 +687,17 @@ def to_gn_args(args):
# Enable pointer compression on 64-bit mobile targets. iOS is excluded due to
# its inability to allocate address space without allocating memory.
- if args.target_os in ['android'] and gn_args['target_cpu'] in ['x64', 'arm64']:
+ if args.target_os in ['android', 'linux'] and gn_args['target_cpu'] in ['x64', 'arm64']:
gn_args['dart_use_compressed_pointers'] = True
if args.target_os == 'fuchsia':
gn_args['gn_configs_path'] = '//flutter/build/config/fuchsia/gn_configs.gni'
gn_args['fuchsia_gn_sdk'] = '//flutter/tools/fuchsia/gn-sdk'
+ # Don't use the default Linux sysroot when buliding for Linux on macOS.
+ if sys.platform == 'darwin' and args.target_os == 'linux':
+ gn_args['use_default_linux_sysroot'] = False
+
# Flags for Dart features:
if args.use_mallinfo2:
gn_args['dart_use_mallinfo2'] = args.use_mallinfo2
@@ -730,9 +723,8 @@ def to_gn_args(args):
# gen_snapshot, but the build defines otherwise make it look like the build is
# for a host Windows build and make GN think we will be building ANGLE.
# Angle is not used on Mac hosts as there are no tests for the OpenGL backend.
- if is_host_build(args) or (args.target_os == 'android' and get_host_os() == 'win'):
- # Don't include git commit information.
- gn_args['angle_enable_commit_id'] = False
+ if (is_host_build(args) and gn_args['host_os'] != 'mac') or (args.target_os == 'linux' and
+ get_host_os() == 'win'):
# Do not build unnecessary parts of the ANGLE tree.
gn_args['angle_build_all'] = False
gn_args['angle_has_astc_encoder'] = False