diff --git a/.bazelrc b/.bazelrc index b680c52083..f1cda53727 100644 --- a/.bazelrc +++ b/.bazelrc @@ -35,6 +35,3 @@ build --spawn_strategy=standalone build --strategy=SwiftCompile=standalone build --define RULES_SWIFT_BUILD_DUMMY_WORKER=1 -#build --linkopt=-fuse-ld=/Users/ali/Downloads/ld64.lld -#build --linkopt=-fuse-ld=/Users/ali/build/zld/build/Build/Products/Release/zld -#build --linkopt=-Wl,-zld_original_ld_path,__BAZEL_XCODE_DEVELOPER_DIR__/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld diff --git a/.gitignore b/.gitignore index 925e33470e..a0d74e1226 100644 --- a/.gitignore +++ b/.gitignore @@ -59,6 +59,7 @@ bazel-telegram-ios bazel-telegram-ios/* bazel-testlogs bazel-testlogs/* +xcodeproj.bazelrc */*.swp *.swp build-input/* diff --git a/.gitmodules b/.gitmodules index 95ed8e1665..d4b6047ecd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -29,3 +29,6 @@ url=../tgcalls.git [submodule "third-party/libx264/x264"] path = third-party/libx264/x264 url = https://github.com/mirror/x264.git +[submodule "build-system/bazel-rules/rules_xcodeproj"] + path = build-system/bazel-rules/rules_xcodeproj + url = https://github.com/MobileNativeFoundation/rules_xcodeproj.git diff --git a/Telegram/BUILD b/Telegram/BUILD index 6fd4cdffab..ac96cc11c6 100644 --- a/Telegram/BUILD +++ b/Telegram/BUILD @@ -25,12 +25,19 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library", ) +load( + "@rules_xcodeproj//xcodeproj:defs.bzl", + "top_level_target", + "xcodeproj", +) + load("//build-system/bazel-utils:plist_fragment.bzl", "plist_fragment", ) load( "@build_configuration//:variables.bzl", + "telegram_bazel_path", "telegram_bundle_id", "telegram_aps_environment", "telegram_team_id", @@ -1010,29 +1017,6 @@ plist_fragment( ) ) -ios_framework( - name = "AsyncDisplayKitFramework", - bundle_id = "{telegram_bundle_id}.AsyncDisplayKit".format( - telegram_bundle_id = telegram_bundle_id, - ), - families = [ - "iphone", - "ipad", - ], - infoplists = [ - ":AsyncDisplayKitInfoPlist", - ":BuildNumberInfoPlist", - ":VersionInfoPlist", - ":RequiredDeviceCapabilitiesPlist", - ], - minimum_os_version = minimum_os_version, - extension_safe = True, - ipa_post_processor = strip_framework, - deps = [ - "//submodules/AsyncDisplayKit:AsyncDisplayKit", - ], -) - plist_fragment( name = "DisplayInfoPlist", extension = "plist", @@ -1094,33 +1078,6 @@ sh_binary( srcs = [":GenerateAddAlternateIcons"], ) -ios_framework( - name = "DisplayFramework", - bundle_id = "{telegram_bundle_id}.Display".format( - telegram_bundle_id = telegram_bundle_id, - ), - families = [ - "iphone", - "ipad", - ], - infoplists = [ - ":DisplayInfoPlist", - ":BuildNumberInfoPlist", - ":VersionInfoPlist", - ":RequiredDeviceCapabilitiesPlist", - ], - frameworks = [ - ":SwiftSignalKitFramework", - ":AsyncDisplayKitFramework", - ], - minimum_os_version = minimum_os_version, - extension_safe = True, - ipa_post_processor = strip_framework, - deps = [ - "//submodules/Display:Display", - ], -) - plist_fragment( name = "TelegramUIInfoPlist", extension = "plist", @@ -1159,8 +1116,6 @@ ios_framework( ":SwiftSignalKitFramework", ":PostboxFramework", ":TelegramCoreFramework", - ":AsyncDisplayKitFramework", - ":DisplayFramework", ], minimum_os_version = minimum_os_version, extension_safe = True, @@ -1997,8 +1952,6 @@ ios_application( ":SwiftSignalKitFramework", ":PostboxFramework", ":TelegramCoreFramework", - ":AsyncDisplayKitFramework", - ":DisplayFramework", ":TelegramUIFramework", ], strings = [ @@ -2023,6 +1976,18 @@ ios_application( ":Main", ":Lib", ], + visibility = ["//visibility:public"], +) + +xcodeproj( + name = "Telegram_xcodeproj", + build_mode = "bazel", + bazel_path = telegram_bazel_path, + project_name = "Telegram", + tags = ["manual"], + top_level_targets = [ + ":Telegram", + ], ) # Temporary targets used to simplify webrtc build tests diff --git a/WORKSPACE b/WORKSPACE index ecc527cbb5..fa23cf7b1a 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -1,15 +1,15 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") -http_archive( +'''http_archive( name = "com_google_protobuf", - urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.14.0.zip"], - sha256 = "bf0e5070b4b99240183b29df78155eee335885e53a8af8683964579c214ad301", - strip_prefix = "protobuf-3.14.0", + urls = ["https://github.com/protocolbuffers/protobuf/releases/download/v22.2/protobuf-22.2.zip"], + sha256 = "bf1f92aebd619651220711e97b3d560cdc2484718cd56d95161bfb2fadb8628e", + strip_prefix = "protobuf-22.2", type = "zip", ) load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") -protobuf_deps() +protobuf_deps()''' local_repository( name = "build_bazel_rules_apple", @@ -26,6 +26,11 @@ local_repository( path = "build-system/bazel-rules/apple_support", ) +local_repository( + name = "rules_xcodeproj", + path = "build-system/bazel-rules/rules_xcodeproj", +) + load( "@build_bazel_rules_apple//apple:repositories.bzl", "apple_rules_dependencies", @@ -47,6 +52,13 @@ load( apple_support_dependencies() +load( + "@rules_xcodeproj//xcodeproj:repositories.bzl", + "xcodeproj_rules_dependencies", +) + +xcodeproj_rules_dependencies() + load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") bazel_skylib_workspace() diff --git a/build-system/Make/BuildConfiguration.py b/build-system/Make/BuildConfiguration.py index fae62b4c3e..92f85d8f2b 100644 --- a/build-system/Make/BuildConfiguration.py +++ b/build-system/Make/BuildConfiguration.py @@ -35,8 +35,9 @@ class BuildConfiguration: self.enable_siri = enable_siri self.enable_icloud = enable_icloud - def write_to_variables_file(self, aps_environment, path): + def write_to_variables_file(self, bazel_path, aps_environment, path): string = '' + string += 'telegram_bazel_path = "{}"\n'.format(bazel_path) string += 'telegram_bundle_id = "{}"\n'.format(self.bundle_id) string += 'telegram_api_id = "{}"\n'.format(self.api_id) string += 'telegram_api_hash = "{}"\n'.format(self.api_hash) diff --git a/build-system/Make/Make.py b/build-system/Make/Make.py index b485cba259..e3afced2d6 100644 --- a/build-system/Make/Make.py +++ b/build-system/Make/Make.py @@ -30,6 +30,7 @@ class BazelCommandLine: override_bazel_version=override_bazel_version, override_xcode_version=override_xcode_version ) + self.bazel = bazel self.bazel_user_root = bazel_user_root self.remote_cache = None self.cache_dir = None @@ -497,7 +498,7 @@ def resolve_configuration(base_path, bazel_command_line: BazelCommandLine, argum print('Could not find a valid aps-environment entitlement in the provided provisioning profiles') sys.exit(1) - build_configuration.write_to_variables_file(aps_environment=codesigning_data.aps_environment, path=configuration_repository_path + '/variables.bzl') + build_configuration.write_to_variables_file(bazel_path=bazel_command_line.bazel, aps_environment=codesigning_data.aps_environment, path=configuration_repository_path + '/variables.bzl') provisioning_profile_files = [] for file_name in os.listdir(provisioning_path): diff --git a/build-system/Make/ProjectGeneration.py b/build-system/Make/ProjectGeneration.py index cea0d32610..bb80ed9784 100644 --- a/build-system/Make/ProjectGeneration.py +++ b/build-system/Make/ProjectGeneration.py @@ -9,8 +9,41 @@ def remove_directory(path): if os.path.isdir(path): shutil.rmtree(path) +def generate_xcodeproj(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, generate_dsym, configuration_path, bazel_app_arguments, target_name): + bazel_generate_arguments = [build_environment.bazel_path] + bazel_generate_arguments += ['run', '//Telegram:Telegram_xcodeproj'] + bazel_generate_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] + #if disable_extensions: + # bazel_generate_arguments += ['--//{}:disableExtensions'.format(app_target)] + #if disable_provisioning_profiles: + # bazel_generate_arguments += ['--//{}:disableProvisioningProfiles'.format(app_target)] + #if generate_dsym: + # bazel_generate_arguments += ['--apple_generate_dsym'] + #bazel_generate_arguments += ['--//{}:disableStripping'.format('Telegram')] + + project_bazel_arguments = [] + for argument in bazel_app_arguments: + project_bazel_arguments.append(argument) + project_bazel_arguments += ['--override_repository=build_configuration={}'.format(configuration_path)] + + xcodeproj_bazelrc = os.path.join(build_environment.base_path, 'xcodeproj.bazelrc') + if os.path.isfile(xcodeproj_bazelrc): + os.unlink(xcodeproj_bazelrc) + with open(xcodeproj_bazelrc, 'w') as file: + for argument in project_bazel_arguments: + file.write('build ' + argument + '\n') + + call_executable(bazel_generate_arguments) + + xcodeproj_path = 'Telegram/Telegram.xcodeproj' + call_executable(['open', xcodeproj_path]) + def generate(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, generate_dsym, configuration_path, bazel_app_arguments, target_name): + generate_xcodeproj(build_environment, disable_extensions, disable_provisioning_profiles, generate_dsym, configuration_path, bazel_app_arguments, target_name) + + +def generate_tulsi(build_environment: BuildEnvironment, disable_extensions, disable_provisioning_profiles, generate_dsym, configuration_path, bazel_app_arguments, target_name): project_path = os.path.join(build_environment.base_path, 'build-input/gen/project') if '/' in target_name: diff --git a/build-system/bazel-rules/apple_support b/build-system/bazel-rules/apple_support index 2659bae1f5..7cecc12692 160000 --- a/build-system/bazel-rules/apple_support +++ b/build-system/bazel-rules/apple_support @@ -1 +1 @@ -Subproject commit 2659bae1f561e34b89fcc230df26aaf6dada2646 +Subproject commit 7cecc126925fef811c274b10b99329179574f9cb diff --git a/build-system/bazel-rules/rules_apple b/build-system/bazel-rules/rules_apple index 782fa6bb13..34939e5b8d 160000 --- a/build-system/bazel-rules/rules_apple +++ b/build-system/bazel-rules/rules_apple @@ -1 +1 @@ -Subproject commit 782fa6bb135b5a9a31ab7884e9ebfaac29ef71d9 +Subproject commit 34939e5b8d4be5ea8f9323414702f3230c0642a8 diff --git a/build-system/bazel-rules/rules_swift b/build-system/bazel-rules/rules_swift index 371ab0507a..e01b8f76e7 160000 --- a/build-system/bazel-rules/rules_swift +++ b/build-system/bazel-rules/rules_swift @@ -1 +1 @@ -Subproject commit 371ab0507ab2318f0936adde3bcebbb1ccacf3a8 +Subproject commit e01b8f76e7666ac254f1780b00de33c1296da8ff diff --git a/build-system/bazel-rules/rules_xcodeproj b/build-system/bazel-rules/rules_xcodeproj new file mode 160000 index 0000000000..dc226d129a --- /dev/null +++ b/build-system/bazel-rules/rules_xcodeproj @@ -0,0 +1 @@ +Subproject commit dc226d129aca2237982b98a95c80ed1ccc74f0c5 diff --git a/build-system/bazel-utils/plist_fragment.bzl b/build-system/bazel-utils/plist_fragment.bzl index 2535e5c4d6..ac40575332 100644 --- a/build-system/bazel-utils/plist_fragment.bzl +++ b/build-system/bazel-utils/plist_fragment.bzl @@ -22,15 +22,11 @@ def _plist_fragment(ctx): fail("Expected value for --define={} was not found".format(key)) resolved_values[key] = value - plist_string = """ - - - - - """ + template.format(**resolved_values) + """ - - - """ + plist_string = """ + + +""" + template.format(**resolved_values) + """ +""" ctx.actions.write( output = output, diff --git a/versions.json b/versions.json index df40ca8ac5..ce4d2917d9 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,5 @@ { "app": "9.5.4", - "bazel": "5.3.1", + "bazel": "6.1.1", "xcode": "14.2" }