#!/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) 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) # 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) 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) 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) 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 }