| #!/usr/bin/env bash |
| # Copyright 2018 Oticon A/S |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| # Compile with all permutations of a given set of KConfigs |
| # Specifically for going through possible combinations of |
| # optional control procedures |
| |
| #set -x #uncomment this line for debugging |
| # set DEBUG_PERMUTATE to 'true' for extra debug output |
| DEBUG_PERMUTATE=false |
| |
| : "${BSIM_OUT_PATH:?BSIM_OUT_PATH must be defined}" |
| : "${BSIM_COMPONENTS_PATH:?BSIM_COMPONENTS_PATH must be defined}" |
| : "${ZEPHYR_BASE:?ZEPHYR_BASE must be set to point to the zephyr root\ |
| directory}" |
| |
| WORK_DIR="${WORK_DIR:-${ZEPHYR_BASE}/bsim_bt_out}" |
| BOARD="${BOARD:-nrf52_bsim}" |
| BOARD_ROOT="${BOARD_ROOT:-${ZEPHYR_BASE}}" |
| |
| mkdir -p ${WORK_DIR} |
| |
| source ${ZEPHYR_BASE}/tests/bluetooth/bsim_bt/compile.source |
| |
| |
| declare -a list=( |
| "CONFIG_BT_CENTRAL=" |
| "CONFIG_BT_PERIPHERAL=" |
| "CONFIG_BT_CTLR_PER_INIT_FEAT_XCHG=" |
| "CONFIG_BT_DATA_LEN_UPDATE=" |
| "CONFIG_BT_PHY_UPDATE=" |
| "CONFIG_BT_CTLR_MIN_USED_CHAN=" |
| "CONFIG_BT_CTLR_LE_PING=" |
| "CONFIG_BT_CTLR_LE_ENC=" |
| "CONFIG_BT_CTLR_CONN_PARAM_REQ=" |
| ) |
| |
| perm_compile() { |
| local -a results=() |
| # We set a unique exe-name, so that we don't overwrite the executables |
| # created by the compile scripts since that may mess up other tests |
| # We also delete the executable to avoid having artifacts from |
| # a previous run |
| local exe_name="bs_nrf52_bsim_tests_kconfig_perm" |
| local executable_name=${exe_name} |
| local executable_name=${BSIM_OUT_PATH}/bin/$executable_name |
| |
| rm -f ${executable_name} |
| |
| let idx=$2 |
| for (( j = 0; j < $1; j++ )); do |
| if (( idx % 2 )); then |
| results=("${results[@]}" "${list[$j]}n") |
| else |
| results=("${results[@]}" "${list[$j]}y") |
| fi |
| let idx\>\>=1 |
| done |
| printf '%s\n' "${results[@]}" > $3 |
| if test "$DEBUG_PERMUTATE" = "true"; then |
| echo "Compile with config overlay:" |
| cat $3 |
| fi |
| local app=tests/bluetooth/bsim_bt/edtt_ble_test_app/hci_test_app |
| local conf_file=prj_dut.conf |
| local conf_overlay=$3 |
| compile |
| if [ ! -f ${executable_name} ]; then |
| compile_failures=$(expr $compile_failures + 1) |
| fi |
| } |
| let n=${#list[@]} |
| temp_conf_file=$(mktemp -p ${WORK_DIR}) |
| # compile_failures will be equal to the number of failed compilations |
| let compile_failures=0 |
| |
| for (( i = 0; i < 2**n; i++ )); do |
| ## don't compile for CENTRAL=n AND PERIPHERAL=n |
| if (( (i & 0x3) != 0x3 )); then |
| perm_compile $n $i ${temp_conf_file} |
| fi |
| done |
| |
| # We set exit code based on type of failure |
| # 0 means all configurations compiled w/o error |
| |
| trap "{ rm "${temp_conf_file}" ; exit 255; }" SIGINT |
| trap "{ rm "${temp_conf_file}" ; exit 254; }" SIGTERM |
| trap "{ rm "${temp_conf_file}" ; exit 253; }" ERR |
| trap "{ rm "${temp_conf_file}" ; exit ${compile_failures}; }" EXIT |