| # Copyright 2018 Oticon A/S |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| source ${ZEPHYR_BASE}/tests/bsim/sh_common.source |
| |
| function print_error_info(){ |
| echo -e "\033[0;31mFailure building ${app} ${conf_file} for ${BOARD}\033[0m\n\ |
| You can rebuild it with\n\ |
| "${cmake_cmd[@]@Q}" && ninja ${ninja_args}" |
| } |
| |
| function _compile(){ |
| : "${app:?app must be defined}" |
| |
| local app_root="${app_root:-${ZEPHYR_BASE}}" |
| local BOARD_ROOT="${BOARD_ROOT:-${ZEPHYR_BASE}}" |
| local conf_file="${conf_file:-prj.conf}" |
| local conf_overlay="${conf_overlay:-""}" |
| |
| default_cmake_args=(-DCONFIG_COVERAGE=y -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ |
| -DCONFIG_COMPILER_WARNINGS_AS_ERRORS=y) |
| local cmake_args=(${cmake_args:-"${default_cmake_args[@]}"}) |
| local cmake_extra_args="${cmake_extra_args:-""}" |
| local ninja_args="${ninja_args:-""}" |
| local cc_flags="${cc_flags:-""}" |
| |
| if [ "${conf_overlay}" ]; then |
| overlays="${conf_overlay//;/_}" |
| local exe_basename="${exe_name:-bs_${BOARD}_${app}_${conf_file}_${overlays}}" |
| else |
| local exe_basename="${exe_name:-bs_${BOARD}_${app}_${conf_file}}" |
| fi |
| |
| local exe_basename=$(echo ${exe_basename} | tr \"/\\.\; _ ) |
| local exe_name=${BSIM_OUT_PATH}/bin/$exe_basename |
| local map_file_name=${exe_name}.Tsymbols |
| |
| local this_dir=${WORK_DIR}/${app}/${exe_basename} |
| |
| local modules_arg="${ZEPHYR_MODULES:+-DZEPHYR_MODULES=${ZEPHYR_MODULES}}" |
| |
| echo "Building $exe_name" |
| |
| local ret=0 |
| |
| local cmake_cmd=(cmake -GNinja -DBOARD_ROOT=${BOARD_ROOT} -DBOARD=${BOARD}) |
| if [ $conf_file != "prj.conf" ]; then |
| local cmake_cmd+=( -DCONF_FILE=${conf_file}) |
| fi |
| orifs="$IFS"; IFS= |
| local cmake_cmd+=( -DOVERLAY_CONFIG="${conf_overlay}" \ |
| ${modules_arg} \ |
| "${cmake_args[@]}" ${cc_flags:+-DCMAKE_C_FLAGS=${cc_flags}} ${cmake_extra_args}) |
| if [ -v sysbuild ]; then |
| local cmake_cmd+=( -DAPP_DIR=${app_root}/${app} ${ZEPHYR_BASE}/share/sysbuild/) |
| else |
| local cmake_cmd+=( ${app_root}/${app}) |
| fi |
| IFS="$orifs" |
| |
| # Set INCR_BUILD when calling to only do an incremental build |
| if [ ! -v INCR_BUILD ] || [ ! -d "${this_dir}" ]; then |
| [ -d "${this_dir}" ] && rm "${this_dir}" -rf |
| mkdir -p "${this_dir}" && cd "${this_dir}" |
| "${cmake_cmd[@]}" &> cmake.out || \ |
| { ret="$?"; print_error_info ; cat cmake.out && return $ret; } |
| else |
| cd "${this_dir}" |
| fi |
| ninja ${ninja_args} &> ninja.out || \ |
| { ret="$?"; print_error_info ; cat ninja.out && return $ret; } |
| cp ${this_dir}/zephyr/zephyr.exe ${exe_name} |
| |
| nm ${exe_name} | grep -v " [U|w] " | sort | cut -d" " -f1,3 > ${map_file_name} |
| sed -i "1i $(wc -l ${map_file_name} | cut -d" " -f1)" ${map_file_name} |
| } |
| |
| function compile(){ |
| run_in_background _compile |
| } |