# 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[@]} && 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:-""}" local cmake_args="${cmake_args:-"-DCONFIG_COVERAGE=y \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"}" local cmake_extra_args="${cmake_extra_args:-""}" local ninja_args="${ninja_args:-""}" local cc_flags="${cc_flags:-"-Werror"}" 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 local cmake_cmd+=( -DOVERLAY_CONFIG="${conf_overlay}" \ ${modules_arg} \ ${cmake_args} -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 # 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 }