blob: 84180e6a65af14b4c9f887498bb8463365b4ed41 [file] [log] [blame]
# Copyright (c) 2013 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/sysroot.gni")
import("//build/config/mac/mac_sdk.gni")
import("//build/config/mac/symbols.gni")
if (is_ios) {
# This needs to be imported after mac_sdk.gni as it overrides some of the
# variables defined by it.
import("//build/config/ios/ios_sdk.gni")
}
# 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.
#
# This is applied to BOTH desktop Mac and iOS targets.
config("compiler") {
# These flags are shared between the C compiler and linker.
common_mac_flags = []
# CPU architecture.
if (current_cpu == "x64") {
common_mac_flags += [
"-arch",
"x86_64",
]
} else if (current_cpu == "x86") {
common_mac_flags += [
"-arch",
"i386",
]
} else if (current_cpu == "armv7" || current_cpu == "arm") {
common_mac_flags += [
"-arch",
"armv7",
]
} else if (current_cpu == "arm64") {
common_mac_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_mac_flags
cflags = common_mac_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" ]
cflags_c = [ "-std=c99" ]
cflags_objc = cflags_c
ldflags = common_mac_flags
if (is_ios && additional_toolchains != []) {
# For fat build, the generation of the dSYM happens after the fat binary has
# been created with "lipo" thus the stripping cannot happen at link time but
# after running "lipo" too.
_save_unstripped_output = false
} else {
_save_unstripped_output = save_unstripped_output
}
if (_save_unstripped_output) {
ldflags += [ "-Wcrl,unstripped," + rebase_path(root_out_dir) ]
}
}
# 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 Mac-only. Please see that target for advice on what should go in
# :runtime_library vs. :compiler.
config("runtime_library") {
common_flags = [
"-isysroot",
sysroot,
"-mmacosx-version-min=$mac_deployment_target",
]
asmflags = common_flags
cflags = common_flags
ldflags = common_flags
if (is_mac) {
# Prevent Mac OS X AssertMacros.h from defining macros that collide
# with common names, like 'check', 'require', and 'verify'.
# (Included by system header. Also exists on iOS but not included.)
# http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/AssertMacros.h
defines = [ "__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORE=0" ]
}
}
# On Mac, this is used for everything except static libraries.
config("mac_dynamic_flags") {
ldflags = [ "-Wl,-ObjC" ] # Always load Objective-C categories and classes.
if (is_component_build) {
ldflags += [
# Path for loading shared libraries for unbundled binaries.
"-Wl,-rpath,@loader_path/.",
# Path for loading shared libraries for bundled binaries. Get back from
# Binary.app/Contents/MacOS.
"-Wl,-rpath,@loader_path/../../..",
]
}
}
# On Mac, this is used only for executables.
config("mac_executable_flags") {
# Remove this when targeting >=10.7 since it is the default in that config.
ldflags = [ "-Wl,-pie" ] # Position independent.
}
# The ldflags referenced below are handled by
# //build/toolchain/mac/linker_driver.py.
# Remove this config if a target wishes to change the arguments passed to the
# strip command during linking. This config by default strips all symbols
# from a binary, but some targets may wish to specify a saves file to preserve
# specific symbols.
config("strip_all") {
# On iOS, the final applications are assembled using lipo (to support fat
# builds). This configuration is thus always empty and the correct flags
# are passed to the linker_driver.py script directly during the lipo call.
if (enable_stripping && !is_ios) {
ldflags = [ "-Wcrl,strip,-x,-S" ]
}
}