| Index: build/toolchain/mac/BUILD.gn
 | 
| diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
 | 
| index fd92dcc98ee01780438240a0d821b98a21bc9b4d..95f2bc3b179a5f8fa3d61457e9b582a0fd14ed3c 100644
 | 
| --- a/build/toolchain/mac/BUILD.gn
 | 
| +++ b/build/toolchain/mac/BUILD.gn
 | 
| @@ -9,6 +9,7 @@
 | 
|  import("../goma.gni")
 | 
|  import("//build/config/ios/ios_sdk.gni")
 | 
|  import("//build/config/mac/mac_sdk.gni")
 | 
| +import("//build/config/mac/symbols.gni")
 | 
|  
 | 
|  assert(host_os == "mac")
 | 
|  
 | 
| @@ -46,6 +47,9 @@ template("mac_toolchain") {
 | 
|      cxx = invoker.cxx
 | 
|      ld = invoker.ld
 | 
|  
 | 
| +    linker_driver =
 | 
| +        rebase_path("//build/toolchain/mac/linker_driver.py", root_build_dir)
 | 
| +
 | 
|      # Make these apply to all tools below.
 | 
|      lib_switch = "-l"
 | 
|      lib_dir_switch = "-L"
 | 
| @@ -55,6 +59,13 @@ template("mac_toolchain") {
 | 
|      # unique in the directory.
 | 
|      object_subdir = "{{target_out_dir}}/{{label_name}}"
 | 
|  
 | 
| +    # If dSYMs are enabled, this flag will be added to the link tools.
 | 
| +    if (enable_dsyms) {
 | 
| +      dsym_switch = " -Wcrl,dsym," + rebase_path(root_out_dir) + " "
 | 
| +    } else {
 | 
| +      dsym_switch = ""
 | 
| +    }
 | 
| +
 | 
|      tool("cc") {
 | 
|        depfile = "{{output}}.d"
 | 
|        precompiled_header_type = "gcc"
 | 
| @@ -140,10 +151,11 @@ template("mac_toolchain") {
 | 
|  
 | 
|        does_reexport_command = "[ ! -e \"$dylib\" -o ! -e \"$tocname\" ] || otool -l \"$dylib\" | grep -q LC_REEXPORT_DYLIB"
 | 
|  
 | 
| -      link_command = "$ld -shared "
 | 
| +      link_command = "$linker_driver $ld -shared "
 | 
|        if (is_component_build) {
 | 
|          link_command += " -Wl,-install_name,@rpath/\"{{target_output_name}}{{output_extension}}\" "
 | 
|        }
 | 
| +      link_command += dsym_switch
 | 
|        link_command += "{{ldflags}} -o \"$dylib\" -Wl,-filelist,\"$rspfile\" {{libs}} {{solibs}}"
 | 
|  
 | 
|        replace_command = "if ! cmp -s \"$temporary_tocname\" \"$tocname\"; then mv \"$temporary_tocname\" \"$tocname\""
 | 
| @@ -176,17 +188,21 @@ template("mac_toolchain") {
 | 
|        ]
 | 
|        link_output = dylib
 | 
|        depend_output = tocname
 | 
| +
 | 
| +      if (enable_dsyms) {
 | 
| +        outputs += [ dylib + ".dSYM/" ]
 | 
| +      }
 | 
|      }
 | 
|  
 | 
|      tool("solink_module") {
 | 
|        sofile = "{{output_dir}}/{{target_output_name}}{{output_extension}}"  # eg "./libfoo.so"
 | 
|        rspfile = sofile + ".rsp"
 | 
|  
 | 
| -      link_command =
 | 
| -          "$ld -bundle {{ldflags}} -o \"$sofile\" -Wl,-filelist,\"$rspfile\""
 | 
| +      link_command = "$linker_driver $ld -bundle {{ldflags}} -o \"$sofile\" -Wl,-filelist,\"$rspfile\""
 | 
|        if (is_component_build) {
 | 
|          link_command += " -Wl,-install_name,@rpath/{{target_output_name}}{{output_extension}}"
 | 
|        }
 | 
| +      link_command += dsym_switch
 | 
|        link_command += " {{solibs}} {{libs}}"
 | 
|        command = link_command
 | 
|  
 | 
| @@ -203,6 +219,10 @@ template("mac_toolchain") {
 | 
|        outputs = [
 | 
|          sofile,
 | 
|        ]
 | 
| +
 | 
| +      if (enable_dsyms) {
 | 
| +        outputs += [ sofile + ".dSYM/" ]
 | 
| +      }
 | 
|      }
 | 
|  
 | 
|      tool("link") {
 | 
| @@ -217,13 +237,17 @@ template("mac_toolchain") {
 | 
|        # do for command-line arguments. Thus any source names with spaces, or
 | 
|        # label names with spaces (which GN bases the output paths on) will be
 | 
|        # corrupted by this process. Don't use spaces for source files or labels.
 | 
| -      command = "$ld {{ldflags}} -o \"$outfile\" -Wl,-filelist,\"$rspfile\" {{solibs}} {{libs}}"
 | 
| +      command = "$linker_driver $ld $dsym_switch {{ldflags}} -o \"$outfile\" -Wl,-filelist,\"$rspfile\" {{solibs}} {{libs}}"
 | 
|        description = "LINK $outfile"
 | 
|        rspfile_content = "{{inputs_newline}}"
 | 
|        outputs = [
 | 
|          outfile,
 | 
|        ]
 | 
|  
 | 
| +      if (enable_dsyms) {
 | 
| +        outputs += [ outfile + ".dSYM/" ]
 | 
| +      }
 | 
| +
 | 
|        default_output_dir = "{{root_out_dir}}"
 | 
|      }
 | 
|  
 | 
| 
 |