Files
buildroot/package/flutter-engine/flutter-engine.mk
Adam Duskett cc38dde357 package/flutter-engine: bump version to 3.19.4
Add 0005-skip-configuration-dependency-if-unit-tests-are-disa.patch, which
fixes gtk+-3.0 being an unconditional requirement.

Other changes:
Flutter 3.19.x made Wayland and X11 an unconditional requirement, resulting in
the following errors when compiling:

"""
../../flutter/third_party/swiftshader/src/WSI/libWaylandClient.hpp:18:10: fatal error: 'wayland-client.h' file not found
   18 | #include <wayland-client.h>
      |          ^~~~~~~~~~~~~~~~~~

../../flutter/third_party/swiftshader/src/WSI/WaylandSurfaceKHR.cpp:15:
../../flutter/third_party/swiftshader/src/WSI/WaylandSurfaceKHR.hpp:22:10: fatal error: 'wayland-client.h' file not found
   22 | #include <wayland-client.h>
      |          ^~~~~~~~~~~~~~~~~~
1 error generated.
[1369/11229] CC obj/flutter/third_party/sqlite/sqlite.sqlite3.o
"""

After raising an issue found here:
https://github.com/flutter/flutter/issues/144635 and after several hours of
searching, the problem is https://github.com/flutter/buildroot/commit/d01da2716
which hardcodes the following values if building for a Linux platform:
  - ozone_platform_x11 = true
  - ozone_platform_wayland = true

As upstream maintainers listed the above as low priority (P3), a simple fix is
to add two additional sed calls in FLUTTER_ENGINE_VULKAN_X11_SUPPORT_FIXUP and
FLUTTER_ENGINE_VULKAN_WAYLAND_SUPPORT_FIXUP which set ozone_platform_x11 and
ozone_platform_wayland to the appropriate values.

Signed-off-by: Adam Duskett <adam.duskett@amarulasolutions.com>
Signed-off-by: Arnout Vandecappelle <arnout@mind.be>
2024-03-26 00:10:04 +01:00

253 lines
8.9 KiB
Makefile

################################################################################
#
# flutter-engine
#
################################################################################
# Flutter-engine has a release on the GitHub page. However, that release is
# only for Google. Its intended purpose is for the gclient tool provided by
# Google in their depot-tools package. To use the source code, we must use
# gclient to download the flutter-engine source code along with several other
# projects. Unfortunately, the Buildroot download system does not have the
# capability of using gclient, and considering this package is the only
# package that uses gclient, we side-step the entire download process and
# perform the following steps if a tarball does not exist already:
#
# - Copy the pre-made gclient config file to a temporary scratch directory.
# - Run gclient sync to generate a source directory with the proper
# flutter-engine source code in the correct places.
# - Create a source tarball.
# - Copy the source tarball to the $(FLUTTER_ENGINE_DL_DIR) directory.
#
# There is no hash provided, as the gn binary (used for configuration) relies
# on the .git directories. As such, a reproducible tarball is not possible.
FLUTTER_ENGINE_VERSION = 3.19.4
# There is nothing for Buildroot to download. This is handled by gclient.
FLUTTER_ENGINE_SITE =
FLUTTER_ENGINE_SOURCE =
FLUTTER_ENGINE_LICENSE = BSD-3-Clause
FLUTTER_ENGINE_LICENSE_FILES = LICENSE
FLUTTER_ENGINE_TARBALL_PATH = $(FLUTTER_ENGINE_DL_DIR)/flutter-$(FLUTTER_ENGINE_VERSION).tar.gz
FLUTTER_ENGINE_INSTALL_STAGING = YES
FLUTTER_ENGINE_DOWNLOAD_DEPENDENCIES = host-depot-tools
FLUTTER_ENGINE_DEPENDENCIES = \
host-flutter-sdk-bin \
host-ninja \
host-pkgconf \
freetype \
zlib
# Dispatch all architectures of flutter
# FLUTTER_ENGINE_TARGET_TRIPPLE must match the directory name found in
# buildtools/linux-x64/clang/lib/clang/*/lib
ifeq ($(BR2_aarch64),y)
FLUTTER_ENGINE_TARGET_ARCH = arm64
FLUTTER_ENGINE_TARGET_TRIPPLE = aarch64-unknown-linux-gnu
else ifeq ($(BR2_arm)$(BR2_armeb),y)
FLUTTER_ENGINE_TARGET_ARCH = arm
FLUTTER_ENGINE_TARGET_TRIPPLE = armv7-unknown-linux-gnueabihf
else ifeq ($(BR2_x86_64),y)
FLUTTER_ENGINE_TARGET_ARCH = x64
FLUTTER_ENGINE_TARGET_TRIPPLE = x86_64-unknown-linux-gnu
endif
ifeq ($(FLUTTER_ENGINE_RUNTIME_MODE_PROFILE),y)
FLUTTER_ENGINE_RUNTIME_MODE=profile
else ifeq ($(BR2_ENABLE_RUNTIME_DEBUG),y)
FLUTTER_ENGINE_RUNTIME_MODE=debug
else
FLUTTER_ENGINE_RUNTIME_MODE=release
endif
FLUTTER_ENGINE_BUILD_DIR = \
$(@D)/out/linux_$(FLUTTER_ENGINE_RUNTIME_MODE)_$(FLUTTER_ENGINE_TARGET_ARCH)
FLUTTER_ENGINE_INSTALL_FILES = libflutter_engine.so
# Flutter engine includes a bundled patched clang that must be used for
# compiling or else there are linking errors.
FLUTTER_ENGINE_CLANG_PATH = $(@D)/buildtools/linux-x64/clang
FLUTTER_ENGINE_CONF_OPTS = \
--clang \
--embedder-for-target \
--linux-cpu $(FLUTTER_ENGINE_TARGET_ARCH) \
--no-build-embedder-examples \
--no-clang-static-analyzer \
--no-enable-unittests \
--no-goma \
--no-prebuilt-dart-sdk \
--no-stripped \
--runtime-mode $(FLUTTER_ENGINE_RUNTIME_MODE) \
--target-os linux \
--target-sysroot $(STAGING_DIR) \
--target-toolchain $(FLUTTER_ENGINE_CLANG_PATH) \
--target-triple $(FLUTTER_ENGINE_TARGET_TRIPPLE)
ifeq ($(BR2_arm)$(BR2_armeb),y)
FLUTTER_ENGINE_CONF_OPTS += \
--arm-float-abi $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
endif
# We must specify a full path to ccache and a full path to the flutter-engine
# provided clang in order to use ccache, or else flutter-engine will error out
# attempting to find ccache in the target-toolchain provided path.
ifeq ($(BR2_CCACHE),y)
define FLUTTER_ENGINE_COMPILER_PATH_FIXUP
$(SED) "s%cc =.*%cc = \"$(HOST_DIR)/bin/ccache $(FLUTTER_ENGINE_CLANG_PATH)/bin/clang\""%g \
$(@D)/build/toolchain/custom/BUILD.gn
$(SED) "s%cxx =.*%cxx = \"$(HOST_DIR)/bin/ccache $(FLUTTER_ENGINE_CLANG_PATH)/bin/clang++\""%g \
$(@D)/build/toolchain/custom/BUILD.gn
endef
FLUTTER_ENGINE_PRE_CONFIGURE_HOOKS += FLUTTER_ENGINE_COMPILER_PATH_FIXUP
endif
ifeq ($(BR2_ENABLE_LTO),y)
FLUTTER_ENGINE_CONF_OPTS += --lto
else
FLUTTER_ENGINE_CONF_OPTS += --no-lto
endif
ifeq ($(BR2_OPTIMIZE_0),y)
FLUTTER_ENGINE_CONF_OPTS += --unoptimized
endif
# There is no --disable-fontconfig option.
ifeq ($(BR2_PACKAGE_FONTCONFIG),y)
FLUTTER_ENGINE_DEPENDENCIES += fontconfig
FLUTTER_ENGINE_CONF_OPTS += --enable-fontconfig
endif
ifeq ($(BR2_PACKAGE_HAS_LIBGL),y)
FLUTTER_ENGINE_DEPENDENCIES += libgl
endif
ifeq ($(BR2_PACKAGE_HAS_LIBGLES),y)
FLUTTER_ENGINE_DEPENDENCIES += libgles
FLUTTER_ENGINE_CONF_OPTS += --enable-impeller-opengles
endif
ifeq ($(BR2_PACKAGE_LIBGLFW),y)
FLUTTER_ENGINE_DEPENDENCIES += libglfw
FLUTTER_ENGINE_CONF_OPTS += --build-glfw-shell
else
FLUTTER_ENGINE_CONF_OPTS += --no-build-glfw-shell
endif
ifeq ($(BR2_PACKAGE_LIBGTK3),y)
FLUTTER_ENGINE_DEPENDENCIES += libgtk3
FLUTTER_ENGINE_INSTALL_FILES += libflutter_linux_gtk.so
else
FLUTTER_ENGINE_CONF_OPTS += --disable-desktop-embeddings
endif
# There is no --disable-vulkan option
ifeq ($(BR2_PACKAGE_MESA3D_VULKAN_DRIVER),y)
FLUTTER_ENGINE_CONF_OPTS += --enable-vulkan --enable-impeller-vulkan
endif
ifeq ($(BR2_PACKAGE_XORG7)$(BR2_PACKAGE_LIBXCB),yy)
FLUTTER_ENGINE_DEPENDENCIES += libxcb
else
define FLUTTER_ENGINE_VULKAN_X11_SUPPORT_FIXUP
$(SED) "s%vulkan_use_x11.*%vulkan_use_x11 = false%g" -i \
$(@D)/build_overrides/vulkan_headers.gni
$(SED) "s%ozone_platform_x11.*%ozone_platform_x11 = false%g" \
$(@D)/build/config/BUILDCONFIG.gn
endef
FLUTTER_ENGINE_PRE_CONFIGURE_HOOKS += FLUTTER_ENGINE_VULKAN_X11_SUPPORT_FIXUP
endif
ifeq ($(BR2_PACKAGE_WAYLAND),y)
FLUTTER_ENGINE_DEPENDENCIES += wayland
else
define FLUTTER_ENGINE_VULKAN_WAYLAND_SUPPORT_FIXUP
$(SED) "s%vulkan_use_wayland.*%vulkan_use_wayland = false%g" \
$(@D)/build_overrides/vulkan_headers.gni
$(SED) "s%ozone_platform_wayland.*%ozone_platform_wayland = false%g" \
$(@D)/build/config/BUILDCONFIG.gn
endef
FLUTTER_ENGINE_PRE_CONFIGURE_HOOKS += FLUTTER_ENGINE_VULKAN_WAYLAND_SUPPORT_FIXUP
endif
# Generate a tarball if one does not already exist.
define FLUTTER_ENGINE_GENERATE_TARBALL
PATH=$(HOST_DIR)/share/depot_tools:$(BR_PATH) \
PYTHONPATH=$(HOST_DIR)/lib/python$(PYTHON3_VERSION_MAJOR) \
PUB_CACHE=$(FLUTTER_SDK_BIN_PUB_CACHE) \
$(FLUTTER_ENGINE_PKGDIR)/gen-tarball \
--dot-gclient $(TOPDIR)/$(FLUTTER_ENGINE_PKGDIR)/dot-gclient \
--jobs $(PARALLEL_JOBS) \
--scratch-dir $(@D)/dl-tmp \
--tarball-dl-path $(FLUTTER_ENGINE_TARBALL_PATH) \
--version $(FLUTTER_ENGINE_VERSION)
endef
FLUTTER_ENGINE_POST_DOWNLOAD_HOOKS += FLUTTER_ENGINE_GENERATE_TARBALL
define FLUTTER_ENGINE_EXTRACT_CMDS
$(call suitable-extractor,$(FLUTTER_ENGINE_TARBALL_PATH)) $(FLUTTER_ENGINE_TARBALL_PATH) \
| $(TAR) --strip-components=1 -C $(@D) $(TAR_OPTIONS) -
endef
# We must set the home directory to the sdk directory or else flutter will
# place .dart, and .flutter in ~/.
define FLUTTER_ENGINE_CONFIGURE_CMDS
cd $(@D) && \
rm -rf $(FLUTTER_ENGINE_BUILD_DIR) && \
PATH=$(HOST_DIR)/share/depot_tools:$(BR_PATH) \
PUB_CACHE=$(FLUTTER_SDK_BIN_PUB_CACHE) \
HOME=$(HOST_FLUTTER_SDK_BIN_SDK) \
./flutter/tools/gn \
$(FLUTTER_ENGINE_CONF_OPTS)
endef
define FLUTTER_ENGINE_BUILD_CMDS
cd $(@D) && \
PATH=$(HOST_DIR)/share/depot_tools:$(BR_PATH) \
PUB_CACHE=$(FLUTTER_SDK_BIN_PUB_CACHE) \
HOME=$(HOST_FLUTTER_SDK_BIN_SDK) \
$(HOST_DIR)/bin/ninja \
-j $(PARALLEL_JOBS) \
-C $(FLUTTER_ENGINE_BUILD_DIR)
endef
# Flutter-engine builds several host applications use for flutter development.
# One of those applications is gen_snapshot, which turns applications into
# usable .so files for the target architecture. Compiling a host version of
# flutter-engine would result in binaries producing host-architecture
# flutter applications .so files. As such, copy gen_snapshot to the host
# directory here and name it flutter_gen_snapshot for clarity.
FLUTTER_ENGINE_GEN_SNAPSHOT = $(HOST_DIR)/bin/flutter_gen_snapshot
define FLUTTER_ENGINE_INSTALL_GEN_SNAPSHOT
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/clang_x64/gen_snapshot \
$(HOST_DIR)/bin/flutter_gen_snapshot
endef
FLUTTER_ENGINE_POST_INSTALL_STAGING_HOOKS += FLUTTER_ENGINE_INSTALL_GEN_SNAPSHOT
define FLUTTER_ENGINE_INSTALL_STAGING_CMDS
$(foreach i,$(FLUTTER_ENGINE_INSTALL_FILES),
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/so.unstripped/$(i) \
$(STAGING_DIR)/usr/lib/$(i); \
)
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/flutter_embedder.h \
$(STAGING_DIR)/usr/include/flutter_embedder.h
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/icudtl.dat \
$(STAGING_DIR)/usr/share/flutter/$(FLUTTER_ENGINE_RUNTIME_MODE)/data/icudtl.dat
endef
define FLUTTER_ENGINE_INSTALL_TARGET_CMDS
$(foreach i,$(FLUTTER_ENGINE_INSTALL_FILES),
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/so.unstripped/$(i) \
$(TARGET_DIR)/usr/lib/$(i); \
)
$(INSTALL) -D -m 0755 $(FLUTTER_ENGINE_BUILD_DIR)/icudtl.dat \
$(TARGET_DIR)/usr/share/flutter/$(FLUTTER_ENGINE_RUNTIME_MODE)/data/icudtl.dat
endef
$(eval $(generic-package))