| # 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") |
| if (is_ios) { |
| import("//build/config/ios/ios_sdk.gni") |
| } |
| import("//build/config/mac/mac_sdk.gni") |
| import("//build/config/mac/symbols.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", |
| ] |
| } |
| |
| 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") { |
| 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. |
| _enable_stripping = false |
| } else { |
| _enable_stripping = enable_stripping |
| } |
| |
| if (_enable_stripping) { |
| ldflags = [ "-Wcrl,strip,-x,-S" ] |
| } |
| } |