zephyr/tests/bsim/compile.source
Alberto Escolar Piedras 084f3cfc51 tests/bsim build: User kconfig option to set warnings as errors
Use the kconfig option COMPILER_WARNINGS_AS_ERRORS instead
of passing the compiler option directly to the build.
That allows us to do whatever needs to be done in cmake to ensure
warnings are treated as errors.

Also handle better options and paths with spaces on them.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2024-01-29 14:27:27 +01:00

81 lines
2.6 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[@]@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
}