BUILD.gn (4286B)
1 # Copyright 2013 The Chromium Authors 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 import("//chromium/build/config/apple/symbols.gni") 6 import("//chromium/build/config/c++/c++.gni") 7 import("//chromium/build/config/mac/mac_sdk.gni") 8 import("//chromium/build/config/sysroot.gni") 9 import("//chromium/build/toolchain/rbe.gni") 10 import("//chromium/build/toolchain/siso.gni") 11 12 # This is included by reference in the //build/config/compiler config that 13 # is applied to all targets. It is here to separate out the logic. 14 config("compiler") { 15 # These flags are shared between the C compiler and linker. 16 common_mac_flags = [] 17 18 # CPU architecture. 19 if (target_cpu == "x64") { 20 clang_arch = "x86_64" 21 } else if (target_cpu == "x86") { 22 clang_arch = "i386" 23 } else if (target_cpu == "arm64") { 24 clang_arch = target_cpu 25 } else { 26 assert(false, "unknown target_cpu $target_cpu") 27 } 28 common_mac_flags += [ "--target=$clang_arch-apple-macos" ] 29 30 # This is here so that all files get recompiled after an Xcode update. 31 # (defines are passed via the command line, and build system rebuild things 32 # when their commandline changes). Nothing should ever read this define. 33 defines = [ "CR_XCODE_VERSION=$xcode_version" ] 34 35 asmflags = common_mac_flags 36 cflags = common_mac_flags 37 38 ldflags = common_mac_flags 39 40 if (save_unstripped_output) { 41 ldflags += [ "-Wcrl,unstripped," + rebase_path(root_out_dir) ] 42 } 43 44 if (export_libcxxabi_from_executables) { 45 ldflags += [ "-Wl,-undefined,dynamic_lookup" ] 46 } 47 } 48 49 # This is included by reference in the //build/config/compiler:runtime_library 50 # config that is applied to all targets. It is here to separate out the logic 51 # that is Mac-only. Please see that target for advice on what should go in 52 # :runtime_library vs. :compiler. 53 config("runtime_library") { 54 common_flags = [ 55 "-isysroot", 56 rebase_path(sysroot, root_build_dir), 57 "-mmacos-version-min=$mac_deployment_target", 58 ] 59 60 asmflags = common_flags 61 cflags = common_flags 62 ldflags = common_flags 63 } 64 65 # On Mac, this is used for everything except static libraries. 66 config("mac_dynamic_flags") { 67 ldflags = [ "-Wl,-ObjC" ] # Always load Objective-C categories and classes. 68 69 if (is_component_build) { 70 ldflags += [ 71 # Path for loading shared libraries for unbundled binaries. 72 "-Wl,-rpath,@loader_path/.", 73 74 # Path for loading shared libraries for bundled binaries. Get back from 75 # Binary.app/Contents/MacOS. 76 "-Wl,-rpath,@loader_path/../../..", 77 ] 78 79 # Path for loading shared libraries for unbundled binaries for 80 # the host toolchain (see https://crbug.com/1315433). Only used 81 # for when building for iOS. 82 if (target_os == "ios" && current_toolchain == host_toolchain) { 83 ldflags += [ "-Wl,-rpath,@loader_path/" + rebase_path( 84 get_label_info(":mac_dynamic_flags", "root_out_dir"), 85 root_build_dir) ] 86 } 87 } 88 } 89 90 # When building with RBE, all inputs must be relative to the build directory. 91 # If using the system Xcode, which typically resides outside the build root, a 92 # symlink to the SDK is created in the build directory, and the path to that 93 # link is stored in $mac_sdk_path. If an action references a file in the SDK as 94 # an input, GN will complain that no target generates the file because it is 95 # below the $root_build_dir. The below action lists as outputs the files in the 96 # SDK that are referenced as inputs to actions, so that GN thinks a target has 97 # generated them. The list is centralized here, as multiple targets need to 98 # reference the same files, and an output can only be generated once. 99 # 100 # The symbolic link for $mac_sdk_path is set up by 101 # //build/config/apple/sdk_info.py in //build/config/mac/mac_sdk.gni. 102 if (mac_use_xcode_symlinks && current_toolchain == default_toolchain) { 103 action("sdk_inputs") { 104 script = "//chromium/build/noop.py" 105 outputs = [ 106 "$mac_sdk_path/usr/include/mach/exc.defs", 107 "$mac_sdk_path/usr/include/mach/mach_exc.defs", 108 "$mac_sdk_path/usr/include/mach/notify.defs", 109 ] 110 } 111 } else { 112 group("sdk_inputs") { 113 if (current_toolchain != default_toolchain) { 114 public_deps = [ ":sdk_inputs($default_toolchain)" ] 115 } 116 } 117 }