|  | # 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") | 
|  |  | 
|  | # 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_mac_flags = [] | 
|  |  | 
|  | # CPU architecture. | 
|  | if (current_cpu == "x64") { | 
|  | common_mac_flags += [ | 
|  | "-arch", | 
|  | "x86_64", | 
|  | ] | 
|  | } else if (current_cpu == "x86") { | 
|  | common_mac_flags += [ | 
|  | "-arch", | 
|  | "i386", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # 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" ] | 
|  |  | 
|  | ldflags = common_mac_flags | 
|  |  | 
|  | # Create a new read-only segment for protected memory. The default segments | 
|  | # (__TEXT and __DATA) are mapped read-execute and read-write by default. | 
|  | ldflags += [ "-segprot", "PROTECTED_MEMORY", "rw", "r" ] | 
|  |  | 
|  | 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", | 
|  | rebase_path(sysroot, root_build_dir), | 
|  | "-mmacosx-version-min=$mac_deployment_target", | 
|  | ] | 
|  |  | 
|  | asmflags = common_flags | 
|  | cflags = common_flags | 
|  | ldflags = common_flags | 
|  |  | 
|  | # Prevent Mac OS X AssertMacros.h (included by system header) from defining | 
|  | # macros that collide with common names, like 'check', 'require', and | 
|  | # 'verify'. | 
|  | # 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/../../..", | 
|  | ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # 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 an exports file to | 
|  | # preserve specific symbols. | 
|  | config("strip_all") { | 
|  | if (enable_stripping) { | 
|  | ldflags = [ "-Wcrl,strip,-x,-S" ] | 
|  | } | 
|  | } |