diff options
Diffstat (limited to 'tcwg_gnu-config.sh')
-rw-r--r-- | tcwg_gnu-config.sh | 177 |
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 +} |