diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2019-12-21 20:59:08 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-21 20:59:08 +0100 |
commit | b08116668531f8959de9d54009956f9ed21cbab9 (patch) | |
tree | e8af5aa7a01dcdb40dfd3f213081d138db34d92f | |
parent | e1d79d40f2ef41e26b6c529f52023a59acaf0d0e (diff) | |
download | Nim-b08116668531f8959de9d54009956f9ed21cbab9.tar.gz |
fixes #12735 on osx, call dsymutil for debug builds (#12931)
* fix #12735 osx: dsymutil needs to be called for debug builds * also write dsymutil command to extraCmds in json build file
-rw-r--r-- | compiler/extccomp.nim | 21 | ||||
-rw-r--r-- | compiler/options.nim | 1 |
2 files changed, 22 insertions, 0 deletions
diff --git a/compiler/extccomp.nim b/compiler/extccomp.nim index 69b97177a..5db719f85 100644 --- a/compiler/extccomp.nim +++ b/compiler/extccomp.nim @@ -838,6 +838,15 @@ proc execLinkCmd(conf: ConfigRef; linkCmd: string) = execExternalProgram(conf, linkCmd, if optListCmd in conf.globalOptions or conf.verbosity > 1: hintExecuting else: hintLinking) +proc maybeRunDsymutil(conf: ConfigRef; exe: AbsoluteFile) = + when defined(osx): + if optCDebug notin conf.globalOptions: return + # if needed, add an option to skip or override location + let cmd = "dsymutil " & $(exe).quoteShell + conf.extraCmds.add cmd + tryExceptOSErrorMessage(conf, "invocation of dsymutil failed."): + execExternalProgram(conf, cmd, hintExecuting) + proc execCmdsInParallel(conf: ConfigRef; cmds: seq[string]; prettyCb: proc (idx: int)) = let runCb = proc (idx: int, p: Process) = let exitCode = p.peekExitCode @@ -979,6 +988,7 @@ proc callCCompiler*(conf: ConfigRef) = linkViaResponseFile(conf, linkCmd) else: execLinkCmd(conf, linkCmd) + maybeRunDsymutil(conf, mainOutput) else: linkCmd = "" if optGenScript in conf.globalOptions: @@ -1066,6 +1076,9 @@ proc writeJsonBuildInstructions*(conf: ConfigRef) = lit "],\L\"linkcmd\": " str getLinkCmd(conf, conf.absOutFile, objfiles) + lit ",\L\"extraCmds\": " + lit $(%* conf.extraCmds) + if optRun in conf.globalOptions or isDefined(conf, "nimBetterRun"): lit ",\L\"cmdline\": " str conf.commandLine @@ -1131,6 +1144,14 @@ proc runJsonBuildInstructions*(conf: ConfigRef; projectfile: AbsoluteFile) = let linkCmd = data["linkcmd"] doAssert linkCmd.kind == JString execLinkCmd(conf, linkCmd.getStr) + if data.hasKey("extraCmds"): + let extraCmds = data["extraCmds"] + doAssert extraCmds.kind == JArray + for cmd in extraCmds: + doAssert cmd.kind == JString, $cmd.kind + let cmd2 = cmd.getStr + execExternalProgram(conf, cmd2, hintExecuting) + except: when declared(echo): echo getCurrentException().getStackTrace() diff --git a/compiler/options.nim b/compiler/options.nim index ed3ee030d..443b2a1b6 100644 --- a/compiler/options.nim +++ b/compiler/options.nim @@ -249,6 +249,7 @@ type command*: string # the main command (e.g. cc, check, scan, etc) commandArgs*: seq[string] # any arguments after the main command commandLine*: string + extraCmds*: seq[string] # for writeJsonBuildInstructions keepComments*: bool # whether the parser needs to keep comments implicitImports*: seq[string] # modules that are to be implicitly imported implicitIncludes*: seq[string] # modules that are to be implicitly included |