# 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/config/sysroot.gni") import("//build/toolchain/toolchain.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. # NOTE: This option is ignored when building versions for the iOS simulator, # where a part of libvpx is compiled from the assembly code written using # Intel assembly syntax; Yasm / Nasm do not support emitting bitcode parts. # That is not a limitation for now as Xcode mandates the presence of bitcode # only when building bitcode-enabled projects for real devices (ARM CPUs). 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_ios_flags = [] # CPU architecture. if (current_cpu == "x64") { common_ios_flags += [ "-arch", "x86_64", ] } else if (current_cpu == "x86") { common_ios_flags += [ "-arch", "i386", ] } else if (current_cpu == "armv7" || current_cpu == "arm") { common_ios_flags += [ "-arch", "armv7", ] } else if (current_cpu == "arm64") { common_ios_flags += [ "-arch", "arm64", ] } # 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_ios_flags cflags = common_ios_flags # 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_ios_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") { common_flags = [ "-isysroot", sysroot, "-stdlib=libc++", ] if (use_ios_simulator) { common_flags += [ "-mios-simulator-version-min=$ios_deployment_target" ] } else { common_flags += [ "-miphoneos-version-min=$ios_deployment_target" ] } if (use_xcode_clang && enable_ios_bitcode && !use_ios_simulator) { if (is_debug) { common_flags += [ "-fembed-bitcode-marker" ] } else { common_flags += [ "-fembed-bitcode" ] } } asmflags = common_flags cflags = common_flags ldflags = common_flags if (ios_enable_coverage) { configs = [ ":enable_coverage" ] } } config("ios_executable_flags") { } config("ios_dynamic_flags") { ldflags = [ "-Wl,-ObjC" ] # Always load Objective-C categories and class. } config("xctest_config") { common_flags = [ "-F", "$ios_sdk_platform_path/Developer/Library/Frameworks", ] cflags = common_flags ldflags = common_flags libs = [ "Foundation.framework", "XCTest.framework", ] } # This enables support for LLVM code coverage. See # http://llvm.org/docs/CoverageMappingFormat.html. config("enable_coverage") { cflags = [ "-fprofile-instr-generate", "-fcoverage-mapping", ] ldflags = [ "-fprofile-instr-generate" ] } group("xctest") { public_configs = [ ":xctest_config" ] }