Files
brave-core/ios/BUILD.gn
T

329 lines
15 KiB
Plaintext

# Copyright (c) 2019 The Brave Authors. All rights reserved.
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
import("//brave/build/config.gni")
import("//brave/build/ios/config.gni")
import("//brave/build/ios/create_xcframework.gni")
import("//brave/build/mac/tweak_info_plist.gni")
import("//brave/components/ai_chat/ios/browser/headers.gni")
import("//brave/components/brave_shields/ios/browser/headers.gni")
import("//brave/components/brave_talk/buildflags/buildflags.gni")
import("//brave/components/brave_user_agent/ios/common/headers.gni")
import("//brave/components/debounce/ios/browser/headers.gni")
import("//brave/components/url_sanitizer/ios/browser/headers.gni")
import("//brave/ios/browser/api/ads/headers.gni")
import("//brave/ios/browser/api/brave_domains/headers.gni")
import("//brave/ios/browser/api/brave_rewards/headers.gni")
import("//brave/ios/browser/api/brave_services_key/headers.gni")
import("//brave/ios/browser/api/brave_shields/headers.gni")
import("//brave/ios/browser/api/brave_stats/headers.gni")
import("//brave/ios/browser/api/brave_user_agent/headers.gni")
import("//brave/ios/browser/api/brave_wallet/headers.gni")
import("//brave/ios/browser/api/certificate/headers.gni")
import("//brave/ios/browser/api/content_settings/headers.gni")
import("//brave/ios/browser/api/credential_provider/headers.gni")
import("//brave/ios/browser/api/de_amp/headers.gni")
import("//brave/ios/browser/api/developer_options_code/headers.gni")
import("//brave/ios/browser/api/favicon/headers.gni")
import("//brave/ios/browser/api/features/headers.gni")
import("//brave/ios/browser/api/https_upgrade_exceptions/headers.gni")
import("//brave/ios/browser/api/https_upgrades/headers.gni")
import("//brave/ios/browser/api/ipfs/headers.gni")
import("//brave/ios/browser/api/ntp_background_images/headers.gni")
import("//brave/ios/browser/api/omnibox/headers.gni")
import("//brave/ios/browser/api/opentabs/headers.gni")
import("//brave/ios/browser/api/p3a/headers.gni")
import("//brave/ios/browser/api/profile/headers.gni")
import("//brave/ios/browser/api/qr_code/headers.gni")
import("//brave/ios/browser/api/query_filter/headers.gni")
import("//brave/ios/browser/api/session_restore/headers.gni")
import("//brave/ios/browser/api/skus/headers.gni")
import("//brave/ios/browser/api/storekit_receipt/headers.gni")
import("//brave/ios/browser/api/translate/headers.gni")
import("//brave/ios/browser/api/unicode/headers.gni")
import("//brave/ios/browser/api/unzip/headers.gni")
import("//brave/ios/browser/api/url/headers.gni")
import("//brave/ios/browser/api/web/web_state/headers.gni")
import("//brave/ios/browser/api/web_view/headers.gni")
import("//brave/ios/browser/api/webcompat_reporter/headers.gni")
import("//brave/ios/browser/brave_shields/headers.gni")
import("//brave/ios/browser/content_settings/headers.gni")
import("//brave/ios/browser/debounce/headers.gni")
import("//brave/ios/browser/url_sanitizer/headers.gni")
import("//brave/ios/web_view/headers.gni")
import("//build/apple/tweak_info_plist.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/ios/rules.gni")
import("//ios/features.gni")
import("//ios/web_view/framework/sources.gni")
# lld is required when building arm64 with optimization in order to avoid
# runtime crashes
assert(is_debug || current_cpu != "arm64" || use_lld,
"Optimized arm64 iOS builds require lld")
config("internal_config") {
visibility = [ ":*" ]
ldflags =
[ "-Wl,-rpath,/usr/lib/swift,-rpath,@executable_path/../Frameworks" ]
}
group("brave_ios") {
public_deps = [
":brave_core_xcframework",
":early_partition_alloc_xcframework",
":generated_xcconfig",
":nala_assets_xcframework",
]
}
brave_core_public_headers = [
"//brave/base/apple/base_value_bridge.h",
"//brave/components/ai_chat/ios/browser/ai_chat_associated_content_page_fetcher.h",
"//brave/components/brave_wallet/ios/browser/wallet_page_handler_bridge.h",
"//brave/ios/app/brave_core_main.h",
"//brave/ios/app/brave_profile_controller.h",
"//brave/ios/app/brave_core_switches.h",
"//brave/ios/browser/ai_chat/ai_chat_utils.h",
"//brave/ios/browser/ai_chat/ai_chat_settings_helper.h",
"//brave/ios/browser/ai_chat/ai_chat_ui_handler_bridge.h",
"//brave/ios/browser/brave_account/brave_account_authentication_provider.h",
"//brave/ios/browser/brave_account/brave_account_constants_bridge.h",
"//brave/ios/browser/brave_account/brave_account_feature_bridge.h",
"//brave/ios/browser/brave_origin/brave_origin_service_bridge.h",
"//brave/ios/browser/brave_origin/brave_origin_service_factory_bridge.h",
"//brave/ios/browser/brave_news/brave_news_pref_names_bridge.h",
"//brave/ios/browser/brave_vpn/brave_vpn_pref_names_bridge.h",
"//brave/ios/browser/brave_wallet/brave_wallet_factory_wrappers.h",
"//brave/ios/browser/skus/skus_sdk_factory_wrappers.h",
"//brave/ios/browser/api/bookmarks/brave_bookmarks_api.h",
"//brave/ios/browser/api/bookmarks/brave_bookmarks_observer.h",
"//brave/ios/browser/api/bookmarks/importer/brave_bookmarks_importer.h",
"//brave/ios/browser/api/bookmarks/exporter/brave_bookmarks_exporter.h",
"//brave/ios/browser/api/history/importer/brave_history_importer.h",
"//brave/ios/browser/api/password/importer/brave_password_importer.h",
"//brave/ios/browser/api/history/brave_history_api.h",
"//brave/ios/browser/api/history/brave_history_observer.h",
"//brave/ios/browser/api/net/certificate_utility.h",
"//brave/ios/browser/api/password/brave_password_api.h",
"//brave/ios/browser/api/password/brave_password_observer.h",
"//brave/ios/browser/api/sync/brave_sync_api.h",
"//brave/ios/browser/api/sync/driver/brave_sync_profile_service.h",
"//brave/ios/browser/api/web_image/web_image.h",
"//brave/ios/browser/keyed_service/keyed_service_factory_wrapper.h",
"//brave/ios/browser/api/version_info/version_info_ios.h",
"//brave/ios/components/prefs/pref_service_bridge.h",
"//brave/ios/components/prefs/pref_change_registrar_bridge.h",
"//brave/ios/components/constants/pref_names_bridge.h",
"//brave/ios/browser/safari_data_import/safari_data_import_client_delegate.h",
"//brave/ios/browser/safari_data_import/safari_data_importer_bridge.h",
"//brave/ios/browser/safari_data_import/safari_data_importer_coordinator.h",
"//brave/ios/browser/serp_metrics/serp_metrics_bridge.h",
"//brave/ios/browser/serp_metrics/serp_metrics_service_factory_bridge.h",
"//brave/ios/browser/playlist/playlist_pref_names_bridge.h",
"//brave/ios/browser/ui/l10n_utils_typed_bridge.h",
"//ui/base/l10n/l10n_util_mac_bridge.h",
"$root_gen_dir/brave/components/brave_account/mojom/brave_account.mojom.objc.h",
"$root_gen_dir/components/grit/brave_components_swift_strings.h",
"//brave/ios/browser/web/logins/logins_tab_helper_bridge.h",
"//brave/ios/browser/brave_talk/brave_talk_tab_helper_bridge.h",
"//brave/ios/browser/brave_search/brave_search_make_default_tab_helper_bridge.h",
"//ios/chrome/browser/web/model/print/print_handler.h",
"//brave/ios/browser/youtube/youtube_pref_names_bridge.h",
"//brave/ios/browser/global_privacy_control/gpc_pref_names_bridge.h",
"//brave/ios/browser/shared/prefs/shared_pref_names_bridge.h",
]
brave_core_public_headers += ads_public_headers
brave_core_public_headers += ai_chat_component_public_headers
brave_core_public_headers += brave_domains_public_headers
brave_core_public_headers += brave_shields_public_headers
brave_core_public_headers += brave_shields_api_public_headers
brave_core_public_headers += brave_shields_component_public_headers
brave_core_public_headers += brave_user_agent_component_public_headers
brave_core_public_headers += content_settings_component_public_headers
brave_core_public_headers += url_sanitizer_component_public_headers
brave_core_public_headers += browser_url_sanitizer_public_headers
brave_core_public_headers += browser_api_de_amp_public_headers
brave_core_public_headers += debounce_component_public_headers
brave_core_public_headers +=
browser_api_https_upgrade_exceptions_service_public_headers
brave_core_public_headers +=
browser_api_brave_user_agent_exceptions_ios_public_headers
brave_core_public_headers += browser_api_https_upgrades_public_headers
brave_core_public_headers += browser_debounce_public_headers
brave_core_public_headers += brave_stats_public_headers
brave_core_public_headers += brave_wallet_public_headers
brave_core_public_headers += browser_api_certificate_public_headers
brave_core_public_headers += browser_api_favicon_public_headers
brave_core_public_headers += rewards_public_headers
brave_core_public_headers += browser_api_omnibox_public_headers
brave_core_public_headers += browser_api_opentabs_public_headers
brave_core_public_headers += browser_api_qr_code_public_headers
brave_core_public_headers += browser_api_session_restore_public_headers
brave_core_public_headers += browser_api_query_filter_public_headers
brave_core_public_headers += skus_public_headers
brave_core_public_headers += browser_api_url_public_headers
brave_core_public_headers += brave_p3a_public_headers
brave_core_public_headers += browser_api_web_webstate_public_headers
brave_core_public_headers += ipfs_public_headers
brave_core_public_headers += ntp_background_images_public_headers
brave_core_public_headers += brave_services_key_public_headers
brave_core_public_headers += browser_api_features_public_headers
brave_core_public_headers += credential_provider_public_headers
brave_core_public_headers += developer_options_code_public_headers
brave_core_public_headers += browser_api_storekit_receipt_public_headers
brave_core_public_headers += content_settings_public_headers
brave_core_public_headers += webcompat_reporter_public_headers
brave_core_public_headers += browser_api_translate_public_headers
brave_core_public_headers += browser_api_unicode_public_headers
brave_core_public_headers += browser_api_unzip_public_headers
brave_core_public_headers += brave_web_view_public_headers
brave_core_public_headers += browser_api_profile_public_headers
brave_core_public_headers += brave_ios_web_view_public_headers
if (enable_brave_talk) {
brave_core_public_headers +=
[ "//brave/ios/browser/brave_talk/brave_talk_pref_names_bridge.h" ]
}
action("brave_core_umbrella_header") {
script = "//build/config/ios/generate_umbrella_header.py"
full_header_path = target_gen_dir + "/BraveCore.h"
outputs = [ full_header_path ]
args = [
"--output-path",
rebase_path(full_header_path, root_build_dir),
]
args += rebase_path(brave_core_public_headers, root_build_dir)
args += rebase_path(ios_web_view_public_headers, root_build_dir)
}
tweak_info_plist("info_plist") {
info_plists = [ "Info.plist" ]
}
brave_tweak_info_plist("brave_core_plist") {
info_plist = "$root_gen_dir/brave/ios/info_plist_tweaked.plist"
args = [
"--brave_channel=" + brave_channel,
"--brave_version=" + brave_version,
"--skip_signing",
]
deps = [ ":info_plist" ]
}
ios_framework_bundle("brave_core_ios_framework") {
output_name = "BraveCore"
output_dir = root_out_dir
info_plist_target = ":brave_core_plist"
configs += [ ":internal_config" ]
deps = [
":brave_core_plist",
":brave_core_umbrella_header",
"//brave/components/brave_account/mojom:mojom_objc",
"//brave/components/resources:strings",
"//brave/ios/app",
"//brave/ios/browser/ui",
"//brave/ios/components/constants",
"//brave/ios/web_view",
"//ui/base",
]
deps += ads_public_deps
deps += ai_chat_component_public_deps
deps += brave_wallet_public_deps
deps += brave_shields_component_public_deps
deps += rewards_public_deps
deps += skus_public_deps
deps += credential_provider_public_deps
deps += webcompat_reporter_public_deps
sources = brave_core_public_headers
sources += ios_web_view_public_headers
sources +=
[ "$root_gen_dir/components/grit/brave_components_swift_strings.mm" ]
public_headers = get_target_outputs(":brave_core_umbrella_header")
public_headers += brave_core_public_headers
public_headers += ios_web_view_public_headers
}
ios_framework_bundle("early_partition_alloc_framework") {
output_name = "PartitionAllocSupport"
sources = [ "//ios/chrome/app/early_pa_registration.cc" ]
info_plist = "//ios/chrome/app/resources/EarlyPAFrameworkInfo.plist"
extra_substitutions = [ "BUNDLE_IDENTIFIER=com.brave.ios.$output_name" ]
deps = [
"//base/allocator:early_zone_registration_apple",
"//base/allocator/partition_allocator:buildflags",
]
}
ios_create_xcframework("early_partition_alloc_xcframework") {
framework_dir = "$root_build_dir/PartitionAllocSupport.framework"
deps = [ ":early_partition_alloc_framework" ]
}
ios_create_xcframework("brave_core_xcframework") {
framework_dir = "$root_build_dir/BraveCore.framework"
remove_asset_catalogs = true
deps = [ ":brave_core_ios_framework" ]
}
ios_create_xcframework("nala_assets_xcframework") {
framework_dir = "$root_build_dir/NalaAssets.framework"
deps = [ "//brave/ios/nala:nala_assets_framework" ]
}
# Generates an xcconfig based on GN args that are needed in the Xcode app build
# process such as Info.plist or build setting subsititions.
generated_file("generated_xcconfig") {
outputs = [ "$root_build_dir/args.xcconfig" ]
# Some special logic to avoid .0 patch versions in marketing versions
ios_marketing_version = "$brave_version_major.$brave_version_minor"
if (brave_ios_marketing_version_patch != 0) {
ios_marketing_version += ".$brave_ios_marketing_version_patch"
}
contents = [
"brave_version_major = $brave_version_major",
"brave_version_minor = $brave_version_minor",
"brave_version_build = $brave_version_build",
"brave_ios_marketing_version = $ios_marketing_version",
"brave_ios_marketing_version_patch = $brave_ios_marketing_version_patch",
"brave_channel = $brave_channel",
]
# If absolute paths are stripped from debug symbols ensure that SPM/Xcode
# also maps debug symbols the same way to allow proper debugging with LLDB
if (strip_absolute_paths_from_debug_symbols) {
ios_dir = rebase_path("//brave/ios/brave-ios")
ios_dir_build_relative =
rebase_path("//brave/ios/brave-ios", root_build_dir)
contents += [ "brave_ios_debug_prefix_map_flag = -debug-prefix-map $ios_dir=$ios_dir_build_relative" ]
}
# Set up any active compilation conditions that may be used in Swift for
# example conditionally compiling based on `#if OFFICIAL_BUILD`
swift_active_compliation_conditions = []
if (is_official_build) {
swift_active_compliation_conditions += [ "OFFICIAL_BUILD" ]
}
swift_active_compilation_conditions_joined =
string_join(" ", swift_active_compliation_conditions)
contents += [ "brave_swift_active_compliation_conditions = $swift_active_compilation_conditions_joined" ]
}