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