diff --git a/firmware/export/config.h b/firmware/export/config.h index ad5f45c98e..bfbf9a9eef 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -1075,7 +1075,7 @@ Lyre prototype 1 */ * Older versions of GCC emit assembly in divided syntax with no option * to enable unified syntax. */ -#if (__GNUC__ < 8) +#if (__GNUC__ < 8) && defined(CPU_ARM_CLASSIC) #define BEGIN_ARM_ASM_SYNTAX_UNIFIED ".syntax unified\n" #define END_ARM_ASM_SYNTAX_UNIFIED ".syntax divided\n" #else diff --git a/lib/rbcodec/codecs/libfaad/sbr_qmf.c b/lib/rbcodec/codecs/libfaad/sbr_qmf.c index 5f8203e5b1..97f8307318 100644 --- a/lib/rbcodec/codecs/libfaad/sbr_qmf.c +++ b/lib/rbcodec/codecs/libfaad/sbr_qmf.c @@ -460,7 +460,8 @@ void sbr_qmf_synthesis_64(sbr_info *sbr, qmfs_info *qmfs, qmf_t X[MAX_NTSR][64], p_buf_1 = qmfs->v + qmfs->v_index; /* calculate 64 output samples and window */ -#ifdef CPU_ARM + /* note: GCC 4.9 complains about the inline asm on Cortex-M targets */ +#if defined(CPU_ARM_CLASSIC) || (defined(CPU_ARM_MICRO) && __GNUC__ > 4) const real_t *qtab = qmf_c; real_t *pbuf = p_buf_1; for (k = 0; k < 64; k++, pbuf++) diff --git a/tools/configure b/tools/configure index f5614d7ff9..8e3bc96287 100755 --- a/tools/configure +++ b/tools/configure @@ -4617,6 +4617,16 @@ else GCCOPTS="$GCCOPTS -Wno-expansion-to-defined -Wimplicit-fallthrough=0" fi + case "$GCCOPTS" in + *-mcpu=cortex-m7*) + # Cortex-M7 support wasn't added until GCC 5. Since we don't use any + # M7-specific features, we can compile as Cortex-M4 when on GCC 4.9. + if test "$gccnum" -lt "500"; then + GCCOPTS=$(echo "$GCCOPTS" | sed -e "s/-mcpu=cortex-m7/-mcpu=cortex-m4 -mthumb/") + fi + ;; + esac + case $prefix in ""|"$CROSS_COMPILE") # simulator