nt9856x/build/envconfig.sh
2023-03-28 15:07:53 +08:00

272 lines
14 KiB
Bash
Executable File

declare -A toolchains=(
# arm-ca9-linux-gnueabihf-6.5
[arm-ca9-linux-gnueabihf-6.5, host]="arm-ca9-linux-gnueabihf"
[arm-ca9-linux-gnueabihf-6.5, sysroot]="usr/arm-ca9-linux-gnueabihf/sysroot"
[arm-ca9-linux-gnueabihf-6.5, compile]="usr/bin/arm-ca9-linux-gnueabihf-"
# arm-ca9-linux-uclibcgnueabihf-6.5
[arm-ca9-linux-uclibcgnueabihf-6.5, host]="arm-linux"
[arm-ca9-linux-uclibcgnueabihf-6.5, sysroot]="usr/arm-ca9-linux-uclibcgnueabihf/sysroot"
[arm-ca9-linux-uclibcgnueabihf-6.5, compile]="usr/bin/arm-linux-"
# arm-ca9-linux-gnueabihf-8.4
[arm-ca9-linux-gnueabihf-8.4, host]="arm-ca9-linux-gnueabihf"
[arm-ca9-linux-gnueabihf-8.4, sysroot]="usr/arm-ca9-linux-gnueabihf/sysroot"
[arm-ca9-linux-gnueabihf-8.4, compile]="usr/bin/arm-ca9-linux-gnueabihf-"
# arm-ca9-linux-uclibcgnueabihf-8.4: Not support perf user space app debug
[arm-ca9-linux-uclibcgnueabihf-8.4, host]="arm-linux"
[arm-ca9-linux-uclibcgnueabihf-8.4, sysroot]="usr/arm-ca9-linux-uclibcgnueabihf/sysroot"
[arm-ca9-linux-uclibcgnueabihf-8.4, compile]="usr/bin/arm-linux-"
# arm-ca9-linux-uclibcgnueabihf-8.4.01: Support perf user space app debug
[arm-ca9-linux-uclibcgnueabihf-8.4.01, host]="arm-linux"
[arm-ca9-linux-uclibcgnueabihf-8.4.01, sysroot]="usr/arm-ca9-linux-uclibcgnueabihf/sysroot"
[arm-ca9-linux-uclibcgnueabihf-8.4.01, compile]="usr/bin/arm-linux-"
# arm-ca53-linux-gnueabihf-7.4
[arm-ca53-linux-gnueabihf-7.4, host]="arm-ca53-linux-gnueabihf"
[arm-ca53-linux-gnueabihf-7.4, sysroot]="usr/arm-ca53-linux-gnueabihf/sysroot"
[arm-ca53-linux-gnueabihf-7.4, compile]="usr/bin/arm-ca53-linux-gnueabihf-"
# aarch64-ca53-linux-gnueabihf-7.4
[aarch64-ca53-linux-gnueabihf-7.4, host]="aarch64-ca53-linux-gnu"
[aarch64-ca53-linux-gnueabihf-7.4, sysroot]="usr/aarch64-ca53-linux-gnu/sysroot"
[aarch64-ca53-linux-gnueabihf-7.4, compile]="usr/bin/aarch64-ca53-linux-gnu-"
# gcc-linaro-6.4.1-2018.05-x86_64_arm-eabi
[gcc-linaro-6.4.1-2018.05-x86_64_arm-eabi, host]="arm-eabi"
[gcc-linaro-6.4.1-2018.05-x86_64_arm-eabi, sysroot]=""
[gcc-linaro-6.4.1-2018.05-x86_64_arm-eabi, compile]="bin/arm-eabi-"
# gcc-6.5-newlib-2.4-2019.11-arm-ca9-eabihf
[gcc-6.5-newlib-2.4-2019.11-arm-ca9-eabihf, host]="arm-eabihf"
[gcc-6.5-newlib-2.4-2019.11-arm-ca9-eabihf, sysroot]=""
[gcc-6.5-newlib-2.4-2019.11-arm-ca9-eabihf, compile]="bin/arm-eabihf-"
)
#----------------------------------------------------------------------
# Machine Dependent Options
#----------------------------------------------------------------------
# -march=armv8-a : Generate code that will run on ARMV8
# -mtune=cortex-a53 : Optimize for cortex-a53
# -mfpu=neon-fp-armv8 : Do not use floating-point coprocessor instructions
# -mfloat-abi=hard : To indicate that NEON variables must be passed in general purpose registers
# -march=armv7-a : Generate code that will run on ARMV7
# -mtune=cortex-a9 : Optimize for cortex-a9
# -mfpu=neon : Do not use floating-point coprocessor instructions, simd + vfpv3
# -mfloat-abi=hard : To indicate that NEON variables must be passed in general purpose registers
#----------------------------------------------------------------------
# C Language Options
#----------------------------------------------------------------------
# -fno-builtin : Don't recognize built-in functions that do not begin with `__builtin_' as prefix
# -ffreestanding: Assert that compilation takes place in a freestanding environment
#----------------------------------------------------------------------
# Code Generation Options
#----------------------------------------------------------------------
# -fno-common : The compiler should place uninitialized global variables in the data section of the object file, rather than generating them as common blocks
# -fshort-wchar : Override the underlying type for `wchar_t' to be `short unsigned int' instead of the default for the target.
#----------------------------------------------------------------------
declare -A compiler_flags=(
# Linux, cortex-a9
[Linux, cortex-a9, c]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1"
[Linux, cortex-a9, cxx]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1"
[Linux, cortex-a9, s]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon"
# Linux, cortex-a53
[Linux, cortex-a53, c]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1"
[Linux, cortex-a53, cxx]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -ftree-vectorize -fno-builtin -fno-common -Wformat=1"
[Linux, cortex-a53, s]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8"
# Linux, cortex-a53x64
[Linux, cortex-a53x64, c]="-march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1 "
[Linux, cortex-a53x64, cxx]="-march=armv8-a -mtune=cortex-a53 -ftree-vectorize -fno-builtin -fno-common -Wformat=1"
[Linux, cortex-a53x64, s]="march=armv8-a -mtune=cortex-a53"
# rtos, cortex-a9
[rtos, cortex-a9, c]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -nostartfiles -Wall -Winline -Wno-missing-braces -Wpointer-arith -Wsign-compare -Wstrict-prototypes -Wundef -Werror -fno-exceptions -fno-common -fno-optimize-sibling-calls -fno-strict-aliasing -fshort-wchar -O2 -fPIC -ffunction-sections -fdata-sections -fno-omit-frame-pointer"
[rtos, cortex-a9, cxx]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -nostartfiles -Wall -Winline -Wno-missing-braces -Wpointer-arith -Wsign-compare -Wundef -Werror -fno-common -fno-optimize-sibling-calls -fno-strict-aliasing -fshort-wchar -O2 -fPIC -ffunction-sections -fdata-sections -fno-omit-frame-pointer"
[rtos, cortex-a9, s]="-march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -nostartfiles -Werror"
# [rtos, cortex-a53
[rtos, cortex-a53, c]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -nostartfiles -Wall -Winline -Wno-missing-braces -Wpointer-arith -Wsign-compare -Wstrict-prototypes -Wundef -Werror -fno-exceptions -fno-common -fno-optimize-sibling-calls -fno-strict-aliasing -fshort-wchar -O2 -fPIC -ffunction-sections -fdata-sections -fno-omit-frame-pointer"
[rtos, cortex-a53, cxx]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -nostartfiles -Wall -Winline -Wno-missing-braces -Wpointer-arith -Wsign-compare -Wundef -Werror -fno-exceptions -fno-common -fno-optimize-sibling-calls -fno-strict-aliasing -fshort-wchar -O2 -fPIC -ffunction-sections -fdata-sections -fno-omit-frame-pointer"
[rtos, cortex-a53, s]="-march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard -nostartfiles -Werror"
)
#####################################################################################################################
#
# Add for OS type: Linux or RTOS etc....
#
#####################################################################################################################
function add_prjcfgconfig()
{
unset LUNCH_PROJ_CONFIG_MENU_CHOICES
add_lunch_proj_config_combo Linux
add_lunch_proj_config_combo rtos
}
#####################################################################################################################
#
# Add for toolchain type: glibc, uclibc, linaro, newlib....etc
#
#####################################################################################################################
function add_lunch_toolchain_menu()
{
unset LUNCH_TOOLCHAIN_MENU_CHOICES
if [ $NVT_PRJCFG_CFG == "Linux" ]; then
add_lunch_toolchain_combo arm-ca9-linux-gnueabihf-8.4
#add_lunch_toolchain_combo arm-ca9-linux-uclibcgnueabihf-8.4
add_lunch_toolchain_combo arm-ca9-linux-uclibcgnueabihf-8.4.01
elif [ $NVT_PRJCFG_CFG == "rtos" ]; then
add_lunch_toolchain_combo gcc-6.5-newlib-2.4-2019.11-arm-ca9-eabihf
else
echo -e "\e[1;45mERROR: We can't find your OS type!!!!!\r\n";
fi
}
#####################################################################################################################
#
# Kernel upgrade
#
#####################################################################################################################
function kernel_upgrade()
{
export KERNELDIR=${LINUX_BUILD_BSP}/linux-4.19
}
#####################################################################################################################
#
# Uboot upgrade
#
#####################################################################################################################
function uboot_upgrade()
{
export UBOOT_DIR=${LINUX_BUILD_BSP}/u-boot-2019.04
}
#####################################################################################################################
#
# To config the codebase system environmenr parameters
#
#####################################################################################################################
function set_stuff_for_environment()
{
chk_for_the_same_codebase
ret=$?
if [ -z $NVT_PRJCFG_CFG ] || [ $ret -ne 1 ] ; then
NVT_PRJCFG_CFG=$DEFAULT_NVT_ACTIVE_PROJ
fi
export LINUX_BUILD_TOP=$PWD
export LINUX_BUILD_BSP=${LINUX_BUILD_TOP}/BSP
export LINUX_BUILD_CODE=${LINUX_BUILD_TOP}/code
export ROOTFS_DIR=${LINUX_BUILD_BSP}/root-fs
export UBOOT_DIR=${LINUX_BUILD_BSP}/u-boot
export TOYBOX_DIR=${LINUX_BUILD_BSP}/toybox
export OPTEE_DIR=${LINUX_BUILD_BSP}/optee
if [ $NVT_PRJCFG_CFG == "Linux" ]; then
export KERNELDIR=${LINUX_BUILD_BSP}/linux-kernel
elif [ $NVT_PRJCFG_CFG == "rtos" ]; then
export KERNELDIR=${LINUX_BUILD_BSP}/rtos/amazon-freertos
fi
export BUSYBOX_DIR=${LINUX_BUILD_BSP}/busybox
export TOYBOX_DIR=${LINUX_BUILD_BSP}/toybox
export APP_DIR=${LINUX_BUILD_CODE}/application
export LIBRARY_DIR=${LINUX_BUILD_CODE}/lib
export INCLUDE_DIR=${LINUX_BUILD_CODE}/lib/include
export NVT_HDAL_DIR=${LINUX_BUILD_CODE}/hdal
export NVT_VOS_DIR=${LINUX_BUILD_CODE}/vos
export NVT_RTOS_MAIN_DIR=${LINUX_BUILD_CODE}/rtos-main
export SAMPLE_DIR=${LINUX_BUILD_CODE}/sample
if [ $NVT_PRJCFG_CFG == "rtos" ]; then
export NVT_DRIVER_DIR=${LINUX_BUILD_CODE}/driver/${SDK_CODENAME}
else
export NVT_DRIVER_DIR=${LINUX_BUILD_CODE}/driver
fi
export TOOLS_DIR=${LINUX_BUILD_TOP}/tools
export BUILD_DIR=${LINUX_BUILD_TOP}/build
export SHELL=/bin/bash
export MAKE=${BUILD_DIR}/nvt-tools/make-4.1
export OUTPUT_DIR=${LINUX_BUILD_TOP}/output
export LOGS_DIR=${LINUX_BUILD_TOP}/logs
export CONFIG_DIR=${LINUX_BUILD_TOP}/configs
export NVT_DSP_DIR=${LINUX_BUILD_TOP}/dsp
export NVT_LINUX_VER="4.19.91"
if [ -z $NVT_CROSS ]; then
export NVT_CROSS=${DEFAULT_NVT_CROSS}
fi
export NVT_MULTI_CORES_FLAG=-j`grep -c ^processor /proc/cpuinfo`
setpaths
setsymbolic
}
#####################################################################################################################
#
# To config the toolchain path and compile cflags
#
#####################################################################################################################
function setpath_toolchain_config()
{
if [ -z $NVT_PRJCFG_CFG ]; then
echo -e "\e[1;45mERROR: We can't find your OS type in setpath toolchain config!!!!!\r\n"
return;
fi
if [ -d /opt/ivot/$NVT_CROSS ]; then
export CROSS_TOOLCHAIN_DIR=/opt/ivot
else
export CROSS_TOOLCHAIN_DIR=/opt
fi
export CROSS_TOOLCHAIN_PATH=${CROSS_TOOLCHAIN_DIR}/${NVT_CROSS}
export CROSS_TOOLCHAIN_BIN_PATH=${CROSS_TOOLCHAIN_PATH}/usr/bin
export NVT_HOST=${toolchains[${NVT_CROSS}, host]}
export SYSROOT_PATH=${CROSS_TOOLCHAIN_PATH}/${toolchains[${NVT_CROSS}, sysroot]}
export CROSS_COMPILE=${CROSS_TOOLCHAIN_PATH}/${toolchains[${NVT_CROSS}, compile]}
export LINUX_BUILD_PATH=${CROSS_TOOLCHAIN_PATH}/bin
export PATH=${CROSS_TOOLCHAIN_BIN_PATH}:${PATH}
if [[ $LINUX_CPU_TYPE == *"x64" ]]; then
export ARCH=arm64
else
export ARCH=arm
fi
if [ $NVT_PRJCFG_CFG == "Linux" ]; then
export PLATFORM_CFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${LINUX_CPU_TYPE}, c]} -D_BSP_${SDK_CODENAME^^}_"
export PLATFORM_CXXFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${LINUX_CPU_TYPE}, cxx]} -D_BSP_${SDK_CODENAME^^}_"
export PLATFORM_AFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${LINUX_CPU_TYPE}, s]} -D_BSP_${SDK_CODENAME^^}_"
export UBOOT_CROSS_COMPILE=${CROSS_COMPILE}
elif [ $NVT_PRJCFG_CFG == "rtos" ]; then
export PLATFORM_CFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${RTOS_CPU_TYPE}, c]} -D_BSP_${SDK_CODENAME^^}_ -D__FREERTOS -I${KERNELDIR}/lib/include -I${KERNELDIR}/lib/include/private -I${KERNELDIR}/arch/arm/mach-nvt-${SDK_CODENAME}/include/mach"
export PLATFORM_CXXFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${RTOS_CPU_TYPE}, cxx]} -D_BSP_${SDK_CODENAME^^}_ -D__FREERTOS -I${KERNELDIR}/lib/include -I${KERNELDIR}/lib/include/private -I${KERNELDIR}/arch/arm/mach-nvt-${SDK_CODENAME}/include/mach"
export PLATFORM_AFLAGS="${compiler_flags[${NVT_PRJCFG_CFG}, ${RTOS_CPU_TYPE}, s]} -D_BSP_${SDK_CODENAME^^}_ -D__FREERTOS -I${KERNELDIR}/lib/include -I${KERNELDIR}/lib/include/private -I${KERNELDIR}/arch/arm/mach-nvt-${SDK_CODENAME}/include/mach"
export UBOOT_CROSS_COMPILE_PATH=${CROSS_TOOLCHAIN_DIR}/${DEFAULT_NVT_UBOOT_CROSS_FOR_RTOS}
export UBOOT_CROSS_COMPILE=${UBOOT_CROSS_COMPILE_PATH}/${toolchains[${DEFAULT_NVT_UBOOT_CROSS_FOR_RTOS}, compile]}
if [ -z "`echo $LD_LIBRARY_PATH | grep ${UBOOT_CROSS_COMPILE_PATH}/usr/`" ]; then
if [ ! -z "${LD_LIBRARY_PATH}" ]; then
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${UBOOT_CROSS_COMPILE_PATH}/usr/local/lib
else
export LD_LIBRARY_PATH=${UBOOT_CROSS_COMPILE_PATH}/usr/local/lib
fi
fi
fi
if [ "$NVT_FPGA" == "ON" ]; then
export PLATFORM_CFLAGS="${PLATFORM_CFLAGS} -D_NVT_FPGA_"
export PLATFORM_AFLAGS="${PLATFORM_AFLAGS} -D_NVT_FPGA_"
fi
if [ "$NVT_EMULATION" == "ON" ]; then
export PLATFORM_CFLAGS="${PLATFORM_CFLAGS} -D_NVT_EMULATION_"
export PLATFORM_AFLAGS="${PLATFORM_AFLAGS} -D_NVT_EMULATION_"
fi
if [ "$NVT_RUN_CORE2" == "ON" ]; then
export PLATFORM_CFLAGS="${PLATFORM_CFLAGS} -D_NVT_RUN_CORE2_"
export PLATFORM_AFLAGS="${PLATFORM_AFLAGS} -D_NVT_RUN_CORE2_"
fi
if [ "$OLD_IPP" == "ON" ]; then
export PLATFORM_CFLAGS="${PLATFORM_CFLAGS} -D_OLD_IPP_"
export PLATFORM_AFLAGS="${PLATFORM_AFLAGS} -D_OLD_IPP_"
fi
}
#####################################################################################################################
#
# To config the export includes NVT_GCOV and NVT_KGCOV for Code Coverage tool
#
#####################################################################################################################
function set_gcov()
{
export NVT_GCOV="-fprofile-arcs -ftest-coverage -lgcov --coverage"
export NVT_KGCOV="GCOV_PROFILE=y"
}