Commit 60cb2904 authored by Yann E. MORIN's avatar Yann E. MORIN Committed by Peter Korsgaard
Browse files

toolchain/wrapper: add option to print one argument per line



In case there are many arguments passed to the tools, the command line
can get very long, and difficult to parse visually.

For example, the Linux kernel passes a lot of arguments to gcc (at least
45, which gives 53 with our hard-coded args). Looking at such a command
line is daunting.

So, add the possibility to print each argument on its own line.

Also, enclose all args between single quotes, so the command line
can be safely copy-pasted without special chars (spaces, $) being
inrerpreted by the shell.

Add blurb about toolchain-wrapper to documentation at the same
time.

Signed-off-by: default avatar"Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Acked-by: default avatarLuca Ceresoli <luca@lucaceresoli.net>
Tested-by: default avatarLuca Ceresoli <luca@lucaceresoli.net>
Acked-by: default avatarSamuel Martin <s.martin49@gmail.com>
Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
parent 3874e5cb
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -17,6 +17,17 @@ generate it.
It also requires to set the Buildroot settings according to the toolchain ones
(see xref:external-toolchain-backend[]).

When using an external toolchain, Buildroot generates a wrapper program, that
passes the appropriate options (according to the configuration) to the
external toolchain programs. In case you need to debug this wrapper, you can
set the environment variable BR_DEBUG_WRAPPER to either one of:

* +0+, empty or not set: no debug

* +1+: trace all arguments on a single line

* +2+: trace one argument per line

Using the internal Buildroot toolchain backend
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

+17 −8
Original line number Diff line number Diff line
@@ -74,7 +74,8 @@ int main(int argc, char **argv)
	char *relbasedir, *absbasedir;
	char *progpath = argv[0];
	char *basename;
	int ret, i, count = 0;
	char *env_debug;
	int ret, i, count = 0, debug;

	/* Calculate the relative paths */
	basename = strrchr(progpath, '/');
@@ -157,14 +158,22 @@ int main(int argc, char **argv)
	/* finish with NULL termination */
	*cur = NULL;

	if (getenv("BR_DEBUG_WRAPPER")) {
		fprintf(stderr, "Executing");

	/* Debug the wrapper to see actual arguments passed to
	 * the compiler:
	 * unset, empty, or 0: do not trace
	 * set to 1          : trace all arguments on a single line
	 * set to 2          : trace one argument per line
	 */
	if ((env_debug = getenv("BR_DEBUG_WRAPPER"))) {
		debug = atoi(env_debug);
		if (debug > 0) {
			fprintf(stderr, "Toolchain wrapper executing:");
			for (i = 0; args[i]; i++)
			fprintf(stderr, " %s", args[i]);

				fprintf(stderr, "%s'%s'",
					(debug == 2)?"\n    ":" ", args[i]);
			fprintf(stderr, "\n");
		}
	}

	if (execv(path, args))
		perror(path);