272 lines
14 KiB
Bash
Executable File
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"
|
|
}
|