From 3ca2049252c3183eb65401e8b5bcf1a715307ea7 Mon Sep 17 00:00:00 2001 From: Tristan Ross Date: Mon, 2 Dec 2024 11:04:32 -0800 Subject: [PATCH] [ci] use env for format and support arm64 hosts (flutter/engine#56268) Fixes running x64 binaries on arm64 hosts, this fixes systems like Raspberry Pi's, Apple Silicon, and Ampere. Before, I would get something like: ``` Checking GN formatting... Completed checking 0 GN files with no formatting problems. Checking Java formatting... No Java files with changes, skipping Java format check. Checking Python formatting... All python files formatted correctly. Checking for trailing whitespace on 1 source file... No trailing whitespace found. No header files with changes, skipping header guard check. Checking C++/ObjC/Shader formatting... ERROR: Formatter command '/home/ross/flutter-engine/src/flutter/buildtools/linux-x64/clang/bin/clang-format --style=file shell/platform/linux/fl_application_test.cc' failed with exit code 255. Command output follows: qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory Completed checking 0 C++/ObjC/Shader files with no formatting problems ``` Now it just works, I also changed the shell script to use env since `/bin/bash` doesn't exist on NixOS so using env is a more portable solution. *List which issues are fixed by this PR. You must list at least one issue.* *If you had to change anything in the [flutter/tests] repo, include a link to the migration guide as per the [breaking change policy].* [C++, Objective-C, Java style guides]: https://github.com/flutter/engine/blob/main/CONTRIBUTING.md#style --- engine/src/flutter/ci/bin/format.dart | 21 ++++++++++----------- engine/src/flutter/ci/format.sh | 2 +- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/engine/src/flutter/ci/bin/format.dart b/engine/src/flutter/ci/bin/format.dart index b165dd5a78..88390bd826 100644 --- a/engine/src/flutter/ci/bin/format.dart +++ b/engine/src/flutter/ci/bin/format.dart @@ -6,6 +6,7 @@ // // Run with --help for usage. +import 'dart:ffi'; import 'dart:io'; import 'package:args/args.dart'; @@ -312,17 +313,15 @@ class ClangFormatChecker extends FormatChecker { super.allFiles, super.messageCallback, }) { - /*late*/ String clangOs; - if (Platform.isLinux) { - clangOs = 'linux-x64'; - } else if (Platform.isMacOS) { - clangOs = 'mac-x64'; - } else if (Platform.isWindows) { - clangOs = 'windows-x64'; - } else { - throw FormattingException( - "Unknown operating system: don't know how to run clang-format here."); - } + final clangOs = switch (Abi.current()) { + Abi.linuxArm64 => 'linux-arm64', + Abi.linuxX64 => 'linux-x64', + Abi.macosArm64 => 'mac-arm64', + Abi.macosX64 => 'mac-x64', + Abi.windowsX64 => 'windows-x64', + (_) => throw FormattingException( + "Unknown operating system: don't know how to run clang-format here.") + }; clangFormat = File( path.join( srcDir.absolute.path, diff --git a/engine/src/flutter/ci/format.sh b/engine/src/flutter/ci/format.sh index 8bdd9424d0..c402102d6c 100755 --- a/engine/src/flutter/ci/format.sh +++ b/engine/src/flutter/ci/format.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be