toolchain-wrapper: support change of BR2_CCACHE
authorArnout Vandecappelle <arnout@mind.be>
Sun, 4 Oct 2015 12:28:56 +0000 (13:28 +0100)
committerPeter Korsgaard <peter@korsgaard.com>
Sun, 4 Oct 2015 16:22:20 +0000 (18:22 +0200)
By moving the ccache call to the toolchain wrapper, the following
scenario no longer works:

make foo-dirclean all BR2_CCACHE=

That's a sometimes useful call to check if some failure is perhaps
caused by ccache.

We can enable this scenario again by exporting BR_NO_CCACHE when
BR2_CCACHE is not set, and by handling this in the toolchain wrapper.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Tested-by: Romain Naour <romain.naour@openwide.fr>
Reviewed-by: Romain Naour <romain.naour@openwide.fr>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Makefile
toolchain/toolchain-wrapper.c

index 304789f03288f6e647d0aa11c00119d9e0b7378d..181d44685f2c04559601a3d58622f1d2dd1093be 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -375,6 +375,8 @@ BR_CACHE_DIR = $(call qstrip,$(BR2_CCACHE_DIR))
 export BR_CACHE_DIR
 HOSTCC := $(CCACHE) $(HOSTCC)
 HOSTCXX := $(CCACHE) $(HOSTCXX)
+else
+export BR_NO_CCACHE
 endif
 
 # Scripts in support/ or post-build scripts may need to reference
index aee5df7ac9578e298b4ca537dd16170072eedae2..0c8f1d848d1bd11bac640868a94a957d47015ce5 100644 (file)
@@ -98,7 +98,7 @@ static void check_unsafe_path(const char *path, int paranoid)
 
 int main(int argc, char **argv)
 {
-       char **args, **cur;
+       char **args, **cur, **exec_args;
        char *relbasedir, *absbasedir;
        char *progpath = argv[0];
        char *basename;
@@ -247,6 +247,13 @@ int main(int argc, char **argv)
        /* finish with NULL termination */
        *cur = NULL;
 
+       exec_args = args;
+#ifdef BR_CCACHE
+       if (getenv("BR_NO_CCACHE"))
+               /* Skip the ccache call */
+               exec_args++;
+#endif
+
        /* Debug the wrapper to see actual arguments passed to
         * the compiler:
         * unset, empty, or 0: do not trace
@@ -257,14 +264,14 @@ int main(int argc, char **argv)
                debug = atoi(env_debug);
                if (debug > 0) {
                        fprintf(stderr, "Toolchain wrapper executing:");
-                       for (i = 0; args[i]; i++)
+                       for (i = 0; exec_args[i]; i++)
                                fprintf(stderr, "%s'%s'",
-                                       (debug == 2) ? "\n    " : " ", args[i]);
+                                       (debug == 2) ? "\n    " : " ", exec_args[i]);
                        fprintf(stderr, "\n");
                }
        }
 
-       if (execv(args[0], args))
+       if (execv(exec_args[0], exec_args))
                perror(path);
 
        free(args);