zephyr/tests/bsim/compile.source
Alberto Escolar Piedras a20046b5b0 tests/bsim compile: Do not provide prj conf if default
Do not provide the defautl prj.conf to cmake, as that
causes it to not use the board overlays, which is not
what users would normally expect.

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

70 lines
2.2 KiB
Plaintext

# 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})
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}\" ${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
}