zephyr/tests/bsim/compile.source
Alberto Escolar Piedras 40f0ea9f74 tests/bsim compile: Add support for multiple conf files
And configuration files with paths, quotes, etc.
Now it is possible to do, for example
conf_file='myprj.conf;boards/board_name.conf'
to provide both a project configuration and an overlay

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-03-21 14:59:09 +01:00

66 lines
2.1 KiB
Text

# 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 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 ninja_args="${ninja_args:-""}"
local cc_flags="${cc_flags:-"-Werror"}"
if [ "${conf_overlay}" ]; then
local exe_basename="${exe_name:-bs_${BOARD}_${app}_${conf_file}_${conf_overlay}}"
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} \
-DCONF_FILE=${conf_file} -DOVERLAY_CONFIG=${conf_overlay} \
${modules_arg} \
${cmake_args} -DCMAKE_C_FLAGS=\"${cc_flags}\" ${app_root}/${app})
# 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
}