diff --git a/toolchain/toolchain-external/ext-toolchain-wrapper.c b/toolchain/toolchain-external/ext-toolchain-wrapper.c index d54f1f5db6..81c6ed1b2e 100644 --- a/toolchain/toolchain-external/ext-toolchain-wrapper.c +++ b/toolchain/toolchain-external/ext-toolchain-wrapper.c @@ -30,21 +30,17 @@ static char sysroot[PATH_MAX]; * that we only pass the predefined one to the real compiler if the inverse * option isn't in the argument list. * This specifies the worst case number of extra arguments we might pass + * Currently, we have: + * -mfloat-abi= + * -march= + * -mtune= + * -mcpu= */ -#define EXCLUSIVE_ARGS 1 +#define EXCLUSIVE_ARGS 4 static char *predef_args[] = { path, "--sysroot", sysroot, -#ifdef BR_ARCH - "-march=" BR_ARCH, -#endif /* BR_ARCH */ -#ifdef BR_TUNE - "-mtune=" BR_TUNE, -#endif /* BR_TUNE */ -#ifdef BR_CPU - "-mcpu=" BR_CPU, -#endif #ifdef BR_ABI "-mabi=" BR_ABI, #endif @@ -157,6 +153,31 @@ int main(int argc, char **argv) *cur++ = "-mfloat-abi=" BR_FLOAT_ABI; #endif +#if defined(BR_ARCH) || \ + defined(BR_TUNE) || \ + defined(BR_CPU) + /* Add our -march/cpu/tune/abi flags, but only if none are + * already specified on the commandline + */ + for (i = 1; i < argc; i++) { + if (!strncmp(argv[i], "-march=", strlen("-march=")) || + !strncmp(argv[i], "-mtune=", strlen("-mtune=")) || + !strncmp(argv[i], "-mcpu=", strlen("-mcpu=" ))) + break; + } + if (i == argc) { +#ifdef BR_ARCH + *cur++ = "-march=" BR_ARCH; +#endif +#ifdef BR_TUNE + *cur++ = "-mtune=" BR_TUNE; +#endif +#ifdef BR_CPU + *cur++ = "-mcpu=" BR_CPU; +#endif + } +#endif /* ARCH || TUNE || CPU */ + /* append forward args */ memcpy(cur, &argv[1], sizeof(char *) * (argc - 1)); cur += argc - 1;