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
|
|
}
|