From 763c8b96ccda8ad210b8cbc971e23d130146e1fc Mon Sep 17 00:00:00 2001 From: Dave Rodgman Date: Mon, 5 Jun 2023 21:24:57 -0400 Subject: [PATCH 1/3] Fix armclang compile fail Signed-off-by: Dave Rodgman --- ChangeLog.d/armclang-compile-fix.txt | 5 +++++ include/mbedtls/bn_mul.h | 11 +++++++++++ 2 files changed, 16 insertions(+) create mode 100644 ChangeLog.d/armclang-compile-fix.txt diff --git a/ChangeLog.d/armclang-compile-fix.txt b/ChangeLog.d/armclang-compile-fix.txt new file mode 100644 index 000000000..93ad6af88 --- /dev/null +++ b/ChangeLog.d/armclang-compile-fix.txt @@ -0,0 +1,5 @@ +Bugfix + * Fix clang and armclang compilation error when targeting certain Arm + M-class CPUs (Cortex-M0, Cortex-M0+, Cortex-M1, Cortex-M23, + SecurCore SC000). Fixes #1077. + diff --git a/include/mbedtls/bn_mul.h b/include/mbedtls/bn_mul.h index a0bc4d061..6414e5429 100644 --- a/include/mbedtls/bn_mul.h +++ b/include/mbedtls/bn_mul.h @@ -677,6 +677,15 @@ #if defined(__arm__) && !defined(MULADDC_CANNOT_USE_R7) #if defined(__thumb__) && !defined(__thumb2__) +#if !defined(__ARMCC_VERSION) && !defined(__clang__) \ + && !defined(__llvm__) && !defined(__INTEL_COMPILER) +/* + * Thumb 1 ISA. This code path has only been tested successfully on gcc; + * it does not compile on clang or armclang. + * + * Other compilers which define __GNUC__ may not work. The above macro + * attempts to exclude these untested compilers. + */ #define MULADDC_INIT \ asm( \ @@ -731,6 +740,8 @@ "r6", "r7", "r8", "r9", "cc" \ ); +#endif /* Compiler is gcc */ + #elif (__ARM_ARCH >= 6) && \ defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1) From 43ea9ab5fa1c618672dc93bebc64cedfb3ecb0c8 Mon Sep 17 00:00:00 2001 From: Dave Rodgman Date: Fri, 2 Jun 2023 10:26:24 -0400 Subject: [PATCH 2/3] Add build tests for Thumb and Thumb2 with clang Signed-off-by: Dave Rodgman --- tests/scripts/all.sh | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/scripts/all.sh b/tests/scripts/all.sh index 87defc0ce..ca486aba0 100755 --- a/tests/scripts/all.sh +++ b/tests/scripts/all.sh @@ -3156,6 +3156,25 @@ component_build_arm_none_eabi_gcc_no_64bit_multiplication () { not grep __aeabi_lmul library/*.o } +component_build_arm_clang_thumb () { + # ~ 30s + + scripts/config.py baremetal + + msg "build: clang thumb 2, make" + make clean + make CC="clang" CFLAGS='-std=c99 -Werror -Os --target=arm-linux-gnueabihf -march=armv7-m -mthumb' lib + + # Some Thumb 1 asm is sensitive to optimisation level, so test both -O0 and -Os + msg "build: clang thumb 1 -O0, make" + make clean + make CC="clang" CFLAGS='-std=c99 -Werror -O0 --target=arm-linux-gnueabihf -mcpu=arm1136j-s -mthumb' lib + + msg "build: clang thumb 1 -Os, make" + make clean + make CC="clang" CFLAGS='-std=c99 -Werror -Os --target=arm-linux-gnueabihf -mcpu=arm1136j-s -mthumb' lib +} + component_build_armcc () { msg "build: ARM Compiler 5" scripts/config.py baremetal From c2e225be8174262775b154ee8a87c72caacfccd2 Mon Sep 17 00:00:00 2001 From: Dave Rodgman Date: Fri, 2 Jun 2023 13:54:00 -0400 Subject: [PATCH 3/3] Add armclang build test Signed-off-by: Dave Rodgman --- tests/scripts/all.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/scripts/all.sh b/tests/scripts/all.sh index ca486aba0..dae54c7e3 100755 --- a/tests/scripts/all.sh +++ b/tests/scripts/all.sh @@ -3185,6 +3185,8 @@ component_build_armcc () { make clean + # Compile mostly with -O1 since some Arm inline assembly is disabled for -O0. + # ARM Compiler 6 - Target ARMv7-A armc6_build_test "--target=arm-arm-none-eabi -march=armv7-a" @@ -3199,7 +3201,14 @@ component_build_armcc () { # ARM Compiler 6 - Target ARMv8-A - AArch64 armc6_build_test "--target=aarch64-arm-none-eabi -march=armv8.2-a" + + # ARM Compiler 6 - Target Cortex-M0 - no optimisation + armc6_build_test "-O0 --target=arm-arm-none-eabi -mcpu=cortex-m0" + + # ARM Compiler 6 - Target Cortex-M0 + armc6_build_test "-Os --target=arm-arm-none-eabi -mcpu=cortex-m0" } + support_build_armcc () { armc5_cc="$ARMC5_BIN_DIR/armcc" armc6_cc="$ARMC6_BIN_DIR/armclang"