From 610f16fa82b03fa1a68c9da784234105886621be Mon Sep 17 00:00:00 2001 From: Ali <> Date: Wed, 17 Feb 2021 21:00:01 +0400 Subject: [PATCH] Multiarch fixes --- .github/workflows/build.yml | 1 + Telegram/BUILD | 17 +++++-- .../WidgetKitWidget/TodayViewController.swift | 4 ++ build-system/Make/Make.py | 50 ++++++++++++++++--- .../Sources/WidgetDataContext.swift | 2 +- third-party/webrtc/BUILD | 1 + 6 files changed, 65 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9023bd8734..dfc74858c2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -84,6 +84,7 @@ jobs: --bazel="$HOME/bazel-dist/bazel" \ --bazelUserRoot="$BAZEL_USER_ROOT" \ build \ + --disableParallelSwiftmoduleGeneration \ --configurationPath="$HOME/telegram-configuration" \ --buildNumber=$BUILD_NUMBER \ --configuration=release_universal diff --git a/Telegram/BUILD b/Telegram/BUILD index 9f9cb55dd7..485c8a854c 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -1237,9 +1237,20 @@ ios_extension( ":disableProvisioningProfilesSetting": None, "//conditions:default": "@build_configuration//provisioning:Widget.mobileprovision", }), - deps = [ - ":WidgetExtensionLib", - ], + deps = select({ + "@build_bazel_rules_apple//apple:ios_arm64": [ + ":WidgetExtensionLib", + ], + "//build-system:ios_sim_arm64": [ + ":WidgetExtensionLib", + ], + "@build_bazel_rules_apple//apple:ios_x86_64": [ + ":WidgetExtensionLib", + ], + "@build_bazel_rules_apple//apple:ios_armv7": [ + ":WidgetExtensionLib", + ], + }), frameworks = [ ":SwiftSignalKitFramework", ":PostboxFramework", diff --git a/Telegram/WidgetKitWidget/TodayViewController.swift b/Telegram/WidgetKitWidget/TodayViewController.swift index 03be983151..0df1f073a9 100644 --- a/Telegram/WidgetKitWidget/TodayViewController.swift +++ b/Telegram/WidgetKitWidget/TodayViewController.swift @@ -1,3 +1,5 @@ +#if arch(arm64) || arch(x86_64) + import UIKit import NotificationCenter import BuildConfig @@ -1000,3 +1002,5 @@ struct AllWidgets: WidgetBundle { Static_AvatarsWidget() } } + +#endif diff --git a/build-system/Make/Make.py b/build-system/Make/Make.py index 6e9bb42c24..0b34bf4bbe 100644 --- a/build-system/Make/Make.py +++ b/build-system/Make/Make.py @@ -27,6 +27,7 @@ class BazelCommandLine: self.build_number = None self.configuration_args = None self.configuration_path = None + self.split_submodules = False self.common_args = [ # https://docs.bazel.build/versions/master/command-line-reference.html @@ -49,12 +50,6 @@ class BazelCommandLine: ] self.common_build_args = [ - # https://github.com/bazelbuild/rules_swift - # If enabled and whole module optimisation is being used, the `*.swiftdoc`, - # `*.swiftmodule` and `*-Swift.h` are generated with a separate action - # rather than as part of the compilation. - '--features=swift.split_derived_files_generation', - # https://github.com/bazelbuild/rules_swift # If enabled the skip function bodies frontend flag is passed when using derived # files generation. @@ -112,6 +107,9 @@ class BazelCommandLine: def set_build_number(self, build_number): self.build_number = build_number + def set_split_swiftmodules(self, value): + self.split_submodules = value + def set_configuration_path(self, path): self.configuration_path = path @@ -151,6 +149,23 @@ class BazelCommandLine: # Generate DSYM files when building. '--apple_generate_dsym', + # Require DSYM files as build output. + '--output_groups=+dsyms' + ] + self.common_release_args + elif configuration == 'release_armv7': + self.configuration_args = [ + # bazel optimized build configuration + '-c', 'opt', + + # Build single-architecture binaries. It is almost 2 times faster is 32-bit support is not required. + '--ios_multi_cpus=armv7', + + # Always build universal Watch binaries. + '--watchos_cpus=armv7k,arm64_32', + + # Generate DSYM files when building. + '--apple_generate_dsym', + # Require DSYM files as build output. '--output_groups=+dsyms' ] + self.common_release_args @@ -217,6 +232,19 @@ class BazelCommandLine: return combined_arguments + def get_additional_build_arguments(self): + combined_arguments = [] + if self.split_submodules: + combined_arguments += [ + # https://github.com/bazelbuild/rules_swift + # If enabled and whole module optimisation is being used, the `*.swiftdoc`, + # `*.swiftmodule` and `*-Swift.h` are generated with a separate action + # rather than as part of the compilation. + '--features=swift.split_derived_files_generation', + ] + + return combined_arguments + def invoke_build(self): combined_arguments = [ self.build_environment.bazel_path @@ -237,6 +265,7 @@ class BazelCommandLine: combined_arguments += self.common_args combined_arguments += self.common_build_args combined_arguments += self.get_define_arguments() + combined_arguments += self.get_additional_build_arguments() if self.remote_cache is not None: combined_arguments += [ @@ -355,6 +384,8 @@ def build(arguments): bazel_command_line.set_configuration(arguments.configuration) bazel_command_line.set_build_number(arguments.buildNumber) + bazel_command_line.set_split_swiftmodules(not arguments.disableParallelSwiftmoduleGeneration) + bazel_command_line.invoke_build() @@ -500,11 +531,18 @@ if __name__ == '__main__': 'debug_arm64', 'debug_armv7', 'release_arm64', + 'release_armv7', 'release_universal' ], required=True, help='Build configuration' ) + buildParser.add_argument( + '--disableParallelSwiftmoduleGeneration', + action='store_true', + default=False, + help='Generate .swiftmodule files in parallel to building modules, can speed up compilation on multi-core systems.' + ) if len(sys.argv) < 2: parser.print_help() diff --git a/submodules/TelegramUI/Sources/WidgetDataContext.swift b/submodules/TelegramUI/Sources/WidgetDataContext.swift index d5dc002d32..d4c99d73f7 100644 --- a/submodules/TelegramUI/Sources/WidgetDataContext.swift +++ b/submodules/TelegramUI/Sources/WidgetDataContext.swift @@ -104,7 +104,7 @@ final class WidgetDataContext { let queue = Queue() let updatedAdditionalPeerIds: Signal<[AccountRecordId: Set], NoError> = Signal { subscriber in if #available(iOSApplicationExtension 14.0, iOS 14.0, *) { - #if arch(arm64) || arch(i386) || arch(x86_64) + #if arch(arm64) || arch(x86_64) WidgetCenter.shared.getCurrentConfigurations { result in var peerIds: [AccountRecordId: Set] = [:] diff --git a/third-party/webrtc/BUILD b/third-party/webrtc/BUILD index 8d122018de..21d6eca221 100644 --- a/third-party/webrtc/BUILD +++ b/third-party/webrtc/BUILD @@ -3174,6 +3174,7 @@ common_arm_specific_sources = [webrtc_source_dir + "/" + path for path in [ armv7_specific_sources = [webrtc_source_dir + "/" + path for path in [ "common_audio/signal_processing/filter_ar_fast_q12.c", "common_audio/signal_processing/complex_bit_reverse.c", + "common_audio/third_party/ooura/fft_size_128/ooura_fft_neon.cc", ]] arm64_specific_sources = [webrtc_source_dir + "/" + path for path in [