summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/build/config/ios/BUILD.gn
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/libwebrtc/build/config/ios/BUILD.gn')
-rw-r--r--third_party/libwebrtc/build/config/ios/BUILD.gn264
1 files changed, 264 insertions, 0 deletions
diff --git a/third_party/libwebrtc/build/config/ios/BUILD.gn b/third_party/libwebrtc/build/config/ios/BUILD.gn
new file mode 100644
index 0000000000..525c439e7e
--- /dev/null
+++ b/third_party/libwebrtc/build/config/ios/BUILD.gn
@@ -0,0 +1,264 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//build/config/ios/ios_sdk.gni")
+import("//build/toolchain/goma.gni")
+import("//build/toolchain/toolchain.gni")
+import("//build_overrides/build.gni")
+
+declare_args() {
+ # Enabling this option makes clang compile to an intermediate
+ # representation ("bitcode"), and not to native code. This is preferred
+ # when including WebRTC in the apps that will be sent to Apple's App Store
+ # and mandatory for the apps that run on watchOS or tvOS.
+ # The option only works when building with Xcode (use_xcode_clang = true).
+ # Mimicking how Xcode handles it, the production builds (is_debug = false)
+ # get real bitcode sections added, while the debug builds (is_debug = true)
+ # only get bitcode-section "markers" added in them.
+ enable_ios_bitcode = false
+}
+
+# This is included by reference in the //build/config/compiler config that
+# is applied to all targets. It is here to separate out the logic.
+config("compiler") {
+ # These flags are shared between the C compiler and linker.
+ common_flags = []
+
+ # CPU architecture.
+ if (target_cpu == "x64") {
+ triplet_cpu = "x86_64"
+ } else if (target_cpu == "x86") {
+ triplet_cpu = "i386"
+ } else if (target_cpu == "arm" || target_cpu == "armv7") {
+ triplet_cpu = "armv7"
+ } else if (target_cpu == "arm64") {
+ triplet_cpu = "arm64"
+ } else {
+ assert(false, "unsupported cpu: $target_cpu")
+ }
+
+ # Environment.
+ if (target_environment == "simulator") {
+ triplet_environment = "-simulator"
+ } else if (target_environment == "device") {
+ triplet_environment = ""
+ } else if (target_environment == "catalyst") {
+ triplet_environment = "-macabi"
+ } else {
+ assert(false, "unsupported environment: $target_environment")
+ }
+
+ # OS.
+ triplet_os = "apple-ios"
+
+ # Set target.
+ common_flags = [
+ "-target",
+ "$triplet_cpu-$triplet_os$ios_deployment_target$triplet_environment",
+ ]
+
+ # This is here so that all files get recompiled after an Xcode update.
+ # (defines are passed via the command line, and build system rebuild things
+ # when their commandline changes). Nothing should ever read this define.
+ defines = [ "CR_XCODE_VERSION=$xcode_version" ]
+
+ asmflags = common_flags
+ cflags = common_flags
+ swiftflags = common_flags
+
+ swiftflags += [
+ "-swift-version",
+ "5",
+ ]
+
+ # Without this, the constructors and destructors of a C++ object inside
+ # an Objective C struct won't be called, which is very bad.
+ cflags_objcc = [ "-fobjc-call-cxx-cdtors" ]
+
+ ldflags = common_flags
+}
+
+# This is included by reference in the //build/config/compiler:runtime_library
+# config that is applied to all targets. It is here to separate out the logic
+# that is iOS-only. Please see that target for advice on what should go in
+# :runtime_library vs. :compiler.
+config("runtime_library") {
+ # The variable ios_sdk_path is relative to root_build_dir when using Goma RBE
+ # and system Xcode (since Goma RBE only supports paths relative to source).
+ # Rebase the value in that case since gn does not convert paths in compiler
+ # flags (since it is not aware they are paths).
+ _sdk_root = ios_sdk_path
+ if (use_system_xcode && use_goma) {
+ _sdk_root = rebase_path(ios_sdk_path, root_build_dir)
+ }
+
+ common_flags = [
+ "-isysroot",
+ _sdk_root,
+ ]
+ swiftflags = [
+ "-sdk",
+ _sdk_root,
+ ]
+
+ if (target_environment == "catalyst") {
+ common_flags += [
+ "-isystem",
+ "$_sdk_root/System/iOSSupport/usr/include",
+ "-iframework",
+ "$_sdk_root/System/iOSSupport/System/Library/Frameworks",
+ ]
+ }
+
+ if (use_xcode_clang && enable_ios_bitcode) {
+ if (is_debug) {
+ common_flags += [ "-fembed-bitcode-marker" ]
+ } else {
+ common_flags += [ "-fembed-bitcode" ]
+ }
+ }
+
+ asmflags = common_flags
+ cflags = common_flags
+ ldflags = common_flags
+}
+
+config("ios_executable_flags") {
+ ldflags = []
+
+ # On "catalyst", the bundle structure is different (uses the same structure
+ # as a regular macOS app), so an additional -rpath is required.
+ if (target_environment == "catalyst") {
+ ldflags += [ "-Wl,-rpath,@loader_path/../Frameworks" ]
+ }
+
+ ldflags += [ "-Wl,-rpath,@executable_path/Frameworks" ]
+}
+
+config("ios_extension_executable_flags") {
+ configs = default_executable_configs
+
+ ldflags = [
+ "-e",
+ "_NSExtensionMain",
+ "-fapplication-extension",
+ ]
+
+ # On "catalyst", the bundle structure is different (uses the same structure
+ # as a regular macOS app), so an additional -rpath is required.
+ if (target_environment == "catalyst") {
+ ldflags += [ "-Wl,-rpath,@loader_path/../../../../Frameworks" ]
+ }
+
+ ldflags += [ "-Wl,-rpath,@executable_path/../../Frameworks" ]
+}
+
+config("ios_dynamic_flags") {
+ ldflags = [
+ # Always load Objective-C categories and class.
+ "-Wl,-ObjC",
+ ]
+
+ # The path to the Swift compatibility libraries (required to run code built
+ # with version N of the SDK on older version of the OS) is relative to the
+ # toolchains directory and changes with the environment.
+ _swift_compatibility_libs_dir_prefix = "$ios_toolchains_path/usr/lib/swift"
+ if (target_environment == "simulator") {
+ _swift_compatibility_libs_dir =
+ "$_swift_compatibility_libs_dir_prefix/iphonesimulator"
+ } else if (target_environment == "device") {
+ _swift_compatibility_libs_dir =
+ "$_swift_compatibility_libs_dir_prefix/iphoneos"
+ } else if (target_environment == "catalyst") {
+ _swift_compatibility_libs_dir =
+ "$_swift_compatibility_libs_dir_prefix/maccatalyst"
+ }
+
+ lib_dirs = [
+ "$ios_sdk_path/usr/lib/swift",
+ _swift_compatibility_libs_dir,
+ ]
+}
+
+config("ios_shared_library_flags") {
+ ldflags = [
+ "-Wl,-rpath,@executable_path/Frameworks",
+ "-Wl,-rpath,@loader_path/Frameworks",
+ ]
+}
+
+config("disable_implicit_retain_self_warning") {
+ cflags_objc = [ "-Wno-implicit-retain-self" ]
+ cflags_objcc = cflags_objc
+}
+
+config("xctest_config") {
+ # Use -iframework for XCTest.framework so that the compiler will treat it as a
+ # system framework and ignore warnings in XCTest framework headers.
+ common_flags = [
+ "-iframework",
+ rebase_path("$ios_sdk_platform_path/Developer/Library/Frameworks",
+ root_build_dir),
+ ]
+ cflags = common_flags
+ ldflags = common_flags
+
+ frameworks = [
+ "Foundation.framework",
+ "XCTest.framework",
+ ]
+}
+
+group("xctest") {
+ public_configs = [ ":xctest_config" ]
+}
+
+_xctrunner_path =
+ "$ios_sdk_platform_path/Developer/Library/Xcode/Agents/XCTRunner.app"
+
+# When building with Goma RBE, $ios_sdk_platform_path corresponds to a symlink
+# below $root_build_dir that points to the real SDK to use. Because the files
+# are below $root_build_dir, it is not possible to list them as a target input
+# without gn complaining (as it can't find a target creating those files).
+#
+# The symlinks are created by //build/config/apple/sdk_info.py script invoked
+# via exec_script() from //build/config/{ios/ios_sdk.gni,mac/mac_sdk.gni}.
+# As the invocation is done by exec_script, there is no target that can list
+# those files as output.
+#
+# To workaround this, add a target that pretends to create those files
+# (but does nothing). See https://crbug.com/1061487 for why this is needed.
+if (use_system_xcode && use_goma) {
+ action("copy_xctrunner_app") {
+ testonly = true
+ script = "//build/noop.py"
+ outputs = [
+ "$_xctrunner_path/Info.plist",
+ "$_xctrunner_path/PkgInfo",
+ "$_xctrunner_path/XCTRunner",
+ ]
+ }
+}
+
+# When creating the test runner for an XCUITest, the arm64e slice of the binary
+# must be removed (at least until the app ships with arm64e slice which is not
+# yet supported by Apple).
+action("xctest_runner_without_arm64e") {
+ testonly = true
+ script = "//build/config/ios/strip_arm64e.py"
+ sources = [ "$_xctrunner_path/XCTRunner" ]
+ outputs = [ "$target_out_dir/XCTRunner" ]
+ args = [
+ "--output",
+ rebase_path(outputs[0], root_build_dir),
+ "--input",
+ rebase_path(sources[0], root_build_dir),
+ "--xcode-version",
+ xcode_version,
+ ]
+
+ if (use_system_xcode && use_goma) {
+ deps = [ ":copy_xctrunner_app" ]
+ }
+}