Ideally, your build system should explicitly keep track of which toolchain it uses. E.g., here's part of a makefile I use:
BINUTILS_ROOT = /usr/local/arm/gcc-arm-none-eabi-7-2017-q4-major
#BINUTILS_ROOT = /usr/local/arm/gcc-arm-none-eabi-6-2017-q1-update
#BINUTILS_ROOT = /usr/local/arm/gcc-arm-none-eabi-5_4-2016q3
You might want to use the toolchain/compiler info within the program too:
extern "C" char __init_array_start;
extern "C" char __etext;
extern "C" char __stext;
extern "C" char __main_stack_base__;
extern "C" char __data_start__;
extern "C" char __data_end__;
extern "C" char __bss_start__;
extern "C" char __bss_end__;
extern "C" char __fini_array_end;
extern "C" uint32_t SystemCoreClock;
extern "C" char __HeapBase;
extern "C" char __HeapLimit;
void InfoCommand::run(int argc, char **argv) {
if (argc == 0) {
printf("%-20s", _name);
printf("-- toolchain/target information\r\n");
} else {
printf("system clock : %d MHz\r\n", SystemCoreClock / 1000000);
#if defined(__VERSION__)
printf("compiler version : " __VERSION__ "\r\n");
#endif
#if defined(__OPTIMIZE__)
printf("optimization : on\r\n");
#else
printf("optimization : off\r\n");
#endif
#if defined(TARGET_MCU)
printf("mcu : " TARGET_MCU "\r\n");
#endif
#if defined(ARCHITECTURE)
printf("Architecture : %s\r\n", ARCHITECTURE);
#endif
printf("git commit : %s\r\n", GIT_COMMIT);
printf("git version : %s\r\n", GIT_VERSION);
printf("app name : %s\r\n", APP_NAME);
printf("compiled : %s\r\n", BUILD_TIME);
printf("by : %s\r\n", APP_AUTHOR);
kernel_version_t kernel_info;
char buf[30];
Kernel::get_info(kernel_info, buf, sizeof(buf));
printf("RTX version : %s\r\n", buf);
#define MEM(fmt, start, end) \
printf(fmt " : %08x - %08x (%dK)\r\n", (start), (end), \
(1023 + ((end) - (start))) >> 10)
MEM(".text", &__stext, &__etext);
MEM(".data", &__data_start__, &__data_end__);
MEM(".bss ", &__bss_start__, &__bss_end__);
MEM("heap ", &__HeapBase, &__HeapLimit);
#undef MEM
}
}