summaryrefslogtreecommitdiff
path: root/tcwg_gnu-config.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tcwg_gnu-config.sh')
-rw-r--r--tcwg_gnu-config.sh177
1 files changed, 177 insertions, 0 deletions
diff --git a/tcwg_gnu-config.sh b/tcwg_gnu-config.sh
new file mode 100644
index 00000000..c3de34de
--- /dev/null
+++ b/tcwg_gnu-config.sh
@@ -0,0 +1,177 @@
+#!/bin/bash
+
+declare -A gnu_data
+
+# Populate gcc_override_configure, gcc_target_board_options, qemu_cpu,
+# pretty_project, pretty_config, long_config depending on CI project
+# and config
+#
+# $1: ci_project $2: ci_config
+settings_for_ci_project_and_config ()
+{
+ local project="$1"
+ local config="$2"
+
+ gnu_data[gcc_override_configure]=""
+ gnu_data[gcc_target_board_options]=""
+ gnu_data[qemu_cpu]=""
+ gnu_data[pretty_project]=""
+ gnu_data[pretty_config]="$config"
+ gnu_data[long_config]="$config"
+
+ # Build the right libs depending on the target. Hardcode the
+ # arch/cpu/float-abi/mode to speed up toolchain builds: the
+ # alternative of building rmprofile multilibs takes a very long
+ # time. Setting the values here has the drawback that we have to build
+ # one toolchain per target_board type.
+ # Also force the corresponding options via target_board_options. This
+ # mimics how several vendors test the toolchain.
+ case "$project/$config" in
+ tcwg_gnu_embed*/*-arm_v7a_soft_eabi)
+ # better to test full soft here (hard float for Thumb below)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=arm \
+ --set gcc_override_configure=--with-arch=armv7-a \
+ --set gcc_override_configure=--with-fpu=vfpv3-d16 \
+ --set gcc_override_configure=--with-float=soft"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-marm/-march=armv7-a/-mfpu=auto/-mfloat-abi=soft}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-a9"
+ gnu_data[pretty_config]="arm-eabi v7-a soft"
+ gnu_data[long_config]="arm-eabi -marm -march=armv7-a -mfpu=auto -mfloat-abi=soft"
+ ;;
+
+ tcwg_gnu_embed*/*-arm_v7a_softfp_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=arm \
+ --set gcc_override_configure=--with-arch=armv7-a \
+ --set gcc_override_configure=--with-fpu=vfpv3-d16 \
+ --set gcc_override_configure=--with-float=softfp"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-marm/-march=armv7-a/-mfpu=vfpv3-d16/-mfloat-abi=softfp}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-a9"
+ gnu_data[pretty_config]="arm-eabi v7-a softfp"
+ gnu_data[long_config]="arm-eabi -marm -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_v8a_hard_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-arch=armv8-a+simd \
+ --set gcc_override_configure=--with-fpu=crypto-neon-fp-armv8 \
+ --set gcc_override_configure=--with-float=hard"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv8-a+simd/-mfpu=auto/-mfloat-abi=hard}"
+ # FIXME The most recent A-profile CPU known by qemu is
+ # cortex-a15, which is v7-a. Use "any" so that it
+ # supports v8-a instructions.
+ gnu_data[qemu_cpu]="--qemu-cpu any"
+ gnu_data[pretty_config]="arm-eabi thumb v8-a hard"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv8-a+simd -mfpu=auto -mfloat-abi=hard"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m0_eabi|tcwg_gnu_embed*/*-thumb_m0_soft_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-cpu=cortex-m0 \
+ --set gcc_override_configure=--with-float=soft"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv6s-m/-mtune=cortex-m0/-mfloat-abi=soft/-mfpu=auto}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m0"
+ gnu_data[pretty_config]="arm-eabi cortex-m0 soft"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv6s-m -mtune=cortex-m0 -mfloat-abi=soft -mfpu=auto"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m3_eabi|tcwg_gnu_embed*/*-thumb_m3_softfp_eabi)
+ # No v7-m variants support fp, so softfp is meaningless (though should work).
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-cpu=cortex-m3 \
+ --set gcc_override_configure=--with-float=softfp"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv7-m/-mtune=cortex-m3/-mfloat-abi=softfp/-mfpu=auto}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m3"
+ gnu_data[pretty_config]="arm-eabi cortex-m3 softfp"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv7-m -mtune=cortex-m3 -mfloat-abi=softfp -mfpu=auto"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m7_eabi|tcwg_gnu_embed*/*-thumb_m7_hard_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-cpu=cortex-m7 \
+ --set gcc_override_configure=--with-float=hard"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv7e-m+fp.dp/-mtune=cortex-m7/-mfloat-abi=hard/-mfpu=auto}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m7"
+ gnu_data[pretty_config]="arm-eabi cortex-m7 hard"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv7e-m+fp.dp -mtune=cortex-m7 -mfloat-abi=hard -mfpu=auto"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m23_eabi|tcwg_gnu_embed*/*-thumb_m23_soft_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-cpu=cortex-m23 \
+ --set gcc_override_configure=--with-float=soft"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv8-m.base/-mtune=cortex-m23/-mfloat-abi=soft/-mfpu=auto}"
+ # qemu does not support m23, use m33 as a superset (v8-m.base vs v8-m.main)
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m33"
+ gnu_data[pretty_config]="arm-eabi cortex-m23 soft"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv8-m.base -mtune=cortex-m23 -mfloat-abi=soft -mfpu=auto"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m33_eabi|tcwg_gnu_embed*/*-thumb_m33_hard_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-cpu=cortex-m33 \
+ --set gcc_override_configure=--with-float=hard"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv8-m.main+dsp+fp/-mtune=cortex-m33/-mfloat-abi=hard/-mfpu=auto}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m33"
+ gnu_data[pretty_config]="arm-eabi cortex-m33 hard"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv8-m.main+dsp+fp -mtune=cortex-m33 -mfloat-abi=hard -mfpu=auto"
+ ;;
+
+ tcwg_gnu_embed*/*-thumb_m55_hard_eabi)
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--disable-multilib \
+ --set gcc_override_configure=--with-mode=thumb \
+ --set gcc_override_configure=--with-arch=armv8.1-m.main+mve.fp+fp.dp \
+ --set gcc_override_configure=--with-float=hard"
+ gnu_data[gcc_target_board_options]="\
+ --set target_board_options={-mthumb/-march=armv8.1-m.main+mve.fp+fp.dp/-mtune=cortex-m55/-mfloat-abi=hard/-mfpu=auto}"
+ gnu_data[qemu_cpu]="--qemu-cpu cortex-m55"
+ # shellcheck disable=SC2034
+ gnu_data[pretty_config]="arm-eabi cortex-m55 hard"
+ gnu_data[long_config]="arm-eabi -mthumb -march=armv8.1-m.main+mve.fp+fp.dp -mtune=cortex-m55 -mfloat-abi=hard -mfpu=auto"
+ ;;
+
+ tcwg_gnu_mingw*/*)
+ # Only mingw thread library (not cygwin) is supported at the moment,
+ # so use --enable-threads=win32
+ # FIXME: Add --disable-shared as a workaround for GCC currently
+ # failing to build several shared libraries.
+ gnu_data[gcc_override_configure]="\
+ --set gcc_override_configure=--enable-threads=win32 \
+ --set gcc_override_configure=--disable-shared"
+ ;;
+
+ tcwg_gnu*/*|tcwg_gcc/**)
+ ;;
+
+ */*)
+ # Remove useless leading "tcwg_"
+ # shellcheck disable=SC2034
+ gnu_data[pretty_project]=$(echo $project | sed 's/^tcwg_//')
+ ;;
+
+ esac
+}