084f3cfc51
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>
81 lines
2.6 KiB
Plaintext
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
|
|
}
|