720 lines
28 KiB
Makefile
Executable File
720 lines
28 KiB
Makefile
Executable File
############################################################################
|
|
#
|
|
# Makefile -- Top level makefile.
|
|
#
|
|
# Copyright (c) 2016, Novatek
|
|
#
|
|
############################################################################
|
|
# common
|
|
MULTI_CORES ?= $(shell grep -c ^processor /proc/cpuinfo)
|
|
SHELL = /bin/bash
|
|
PYTHON := python
|
|
PWD = $(shell pwd)
|
|
|
|
# nvt modelconfig
|
|
$(shell cd ${CONFIG_DIR}; make gen_dtb; make gen_modelcfg > /dev/null 2>&1;)
|
|
include $(NVT_PRJCFG_MODEL_CFG)
|
|
-include $(BUILD_DIR)/definitions.mk
|
|
|
|
# kernel & modules
|
|
CUSTBOARDCONFIG := $(strip $(shell echo $(NVT_PRJCFG_MODEL_CFG) | grep NVT_CFG_KERNEL_CFG | awk -F'=' '{print $$NF;}'))
|
|
ifeq ($(EMBMEM), EMBMEM_SPI_NOR)
|
|
#BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_nor_debug; fi)
|
|
BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_nor_release; fi)
|
|
else ifeq ($(EMBMEM), EMBMEM_EMMC)
|
|
#BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_emmc_debug; fi)
|
|
BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_emmc_release; fi)
|
|
else
|
|
#BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_debug; fi)
|
|
BOARDCONFIG := $(shell if [ ! -z $(NVT_CFG_KERNEL_CFG) ]; then echo $(NVT_CFG_KERNEL_CFG); else echo $(SDK_CODENAME)_evb_defconfig_release; fi)
|
|
endif
|
|
|
|
ifeq ($(EMBMEM), EMBMEM_SPI_NAND)
|
|
UBOOT_DEFCONFIG := $(shell if [ ! -z $(NVT_CFG_UBOOT_CFG) ]; then echo $(NVT_CFG_UBOOT_CFG); else echo nvt-$(SDK_CODENAME)_nand_defconfig; fi)
|
|
else ifeq ($(EMBMEM), EMBMEM_SPI_NOR)
|
|
UBOOT_DEFCONFIG := $(shell if [ ! -z $(NVT_CFG_UBOOT_CFG) ]; then echo $(NVT_CFG_UBOOT_CFG); else echo nvt-$(SDK_CODENAME)_nor_defconfig; fi)
|
|
else ifeq ($(EMBMEM), EMBMEM_NONE)
|
|
UBOOT_DEFCONFIG := $(shell if [ ! -z $(NVT_CFG_UBOOT_CFG) ]; then echo $(NVT_CFG_UBOOT_CFG); else echo nvt-$(SDK_CODENAME)_fpga_defconfig; fi)
|
|
else
|
|
UBOOT_DEFCONFIG := $(shell if [ ! -z $(NVT_CFG_UBOOT_CFG) ]; then echo $(NVT_CFG_UBOOT_CFG); else echo nvt-$(SDK_CODENAME)_emmc_defconfig; fi)
|
|
endif
|
|
UBOOT_ENCRYPT_TAG := $(shell echo $(UBOOT_DEFCONFIG) | sed -e 's/nvt-na\(.\{5\}\).*/\1/g')
|
|
|
|
KERNEL_OUTPUT := $(KERNELDIR)
|
|
KERNEL_TARGET := uImage
|
|
KERNEL_IMGNAME := uImage.bin
|
|
KERNEL_RAMDISK_IMGNAME := uImage.ramdisk.bin
|
|
KERNEL_HEADER := linux_header
|
|
ENCRYPT_KERNEL_IMGNAME := uImage.encrypted.bin
|
|
NUTTX_IMGNAME := nuttx.bin
|
|
PINMUX_CONFIG:= nvt-top.dtsi
|
|
GPIO_CONFIG:= nvt-gpio.dtsi
|
|
SDK_CODENAME_SUFFIX = $(subst na,,$(SDK_CODENAME))
|
|
|
|
# optee
|
|
OPTEE_IMGNAME := tee-pager.bin
|
|
ENCRYPT_OPTEE_IMGNAME := tee.encrypted.bin
|
|
|
|
# uboot
|
|
UBOOT_IMGNAME := u-boot.bin
|
|
ENCRYPT_UBOOT_IMGNAME := u-boot.encrypted.bin
|
|
|
|
|
|
# busybox
|
|
BUSYBOX_CFG := busybox_cfg_full
|
|
#BUSYBOX_CFG := busybox_cfg_small
|
|
|
|
# toybox
|
|
TOYBOX_CFG := toybox_cfg_full
|
|
#TOBOX_CFG := toybox_cfg_small
|
|
|
|
# log
|
|
log_stdout = echo -e "\e[1;44m$@: Build start\e[0m"; \
|
|
$(1) 2> >(tee -a $(LOGS_DIR)/$@.log_err) > >(tee -a $(LOGS_DIR)/$@.log); \
|
|
ret=$$PIPESTATUS; \
|
|
echo -e "\e[1;44m$@: Build finish\e[0m"; \
|
|
if [ -e $(LOGS_DIR)/$@.log_err ]; then cat $(LOGS_DIR)/$@.log_err >&2; fi; \
|
|
if [ -z "`cat $(LOGS_DIR)/$@.log_err`" ]; then \
|
|
rm $(LOGS_DIR)/$@.log_err; \
|
|
fi; \
|
|
exit $$ret;
|
|
|
|
log_remove = if [ ! -e $(LOGS_DIR) ]; then mkdir $(LOGS_DIR); fi; if [ -e $(LOGS_DIR)/$@.log ]; then rm $(LOGS_DIR)/$@.log; fi; if [ -e $(LOGS_DIR)/$@.log_err ]; then rm $(LOGS_DIR)/$@.log_err; fi;
|
|
|
|
check_copy = for n in $(1); do if [ -f $$n ]; then cp -av $$n $(2); fi; done;
|
|
|
|
# linux rtc driver
|
|
export CONFIG_NVT_RTC_CLOCK = $(shell echo $(CLOCK))
|
|
|
|
# misc
|
|
BUILD_COMPLETE_STRING ?= $(shell date "+%a, %d %b %Y %T %z")
|
|
UID := $(shell id -u)
|
|
GID := $(shell id -g)
|
|
removeimg = $(foreach a,$(1),$(if $(wildcard $(a)),rm -rf $(a)))
|
|
unexport KBUILD_OUTPUT
|
|
|
|
# make global flags
|
|
MAKE_QUIET_FLAGS = --no-print-directory
|
|
|
|
# check path existing for build all
|
|
BUILD_ALL = cfg
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
BUILD_ALL += busybox linux modules
|
|
CLEAN_ALL += busybox_clean tools_clean
|
|
else ifeq ($(NVT_PRJCFG_CFG), rtos)
|
|
BUILD_ALL += rtos
|
|
CLEAN_ALL += rtos_clean
|
|
endif
|
|
ifneq ($(wildcard $(NVT_VOS_DIR)/source/Makefile),)
|
|
BUILD_ALL += vos
|
|
CLEAN_ALL += vos_clean
|
|
endif
|
|
ifneq ($(wildcard $(NVT_HDAL_DIR)/Makefile),)
|
|
BUILD_ALL += hdal
|
|
CLEAN_ALL += hdal_clean
|
|
endif
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
CLEAN_ALL += linux_clean
|
|
endif
|
|
ifneq ($(wildcard $(NUTTX_DIR)/Makefile),)
|
|
BUILD_ALL += nuttx
|
|
CLEAN_ALL += nuttx_clean
|
|
endif
|
|
ifneq ($(wildcard $(OPTEE_DIR)/optee_client/Makefile),)
|
|
#optee_client clean depends on optee_os's some output mk
|
|
CLEAN_ALL += optee_client_clean
|
|
endif
|
|
ifneq ($(wildcard $(OPTEE_DIR)/optee_os/Makefile),)
|
|
BUILD_ALL += optee_os
|
|
CLEAN_ALL += optee_os_clean
|
|
endif
|
|
ifeq ($(ENCRYPT_OPTEE), ENCRYPT_OPTEE_ON)
|
|
BUILD_ALL += optee_os_encrypt
|
|
CLEAN_ALL += optee_os_encrypt_clean
|
|
endif
|
|
ifneq ($(wildcard $(NVT_DRIVER_DIR)/Makefile),)
|
|
BUILD_ALL += driver
|
|
CLEAN_ALL += driver_clean
|
|
endif
|
|
ifneq ($(wildcard $(LIBRARY_DIR)/Makefile),)
|
|
BUILD_ALL += library
|
|
CLEAN_ALL += library_clean
|
|
endif
|
|
ifneq ($(wildcard $(OPTEE_DIR)/optee_client/Makefile),)
|
|
BUILD_ALL += optee_client
|
|
endif
|
|
ifneq ($(wildcard $(APP_DIR)/Makefile),)
|
|
BUILD_ALL += app
|
|
CLEAN_ALL += app_clean
|
|
endif
|
|
ifeq ($(EMBMEM), EMBMEM_EMMC)
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
BUILD_ALL += mbr
|
|
CLEAN_ALL += mbr_clean
|
|
endif
|
|
endif
|
|
ifneq ($(wildcard $(UBOOT_DIR)/Makefile),)
|
|
BUILD_ALL += uboot
|
|
CLEAN_ALL += uboot_clean
|
|
ifeq ($(ENCRYPT_UBOOT), ENCRYPT_UBOOT_ON)
|
|
BUILD_ALL += uboot_encrypt
|
|
CLEAN_ALL += uboot_encrypt_clean
|
|
endif
|
|
endif
|
|
ifeq ($(ENCRYPT_KERNEL), ENCRYPT_KERNEL_ON)
|
|
BUILD_ALL += linux_encrypt
|
|
CLEAN_ALL += linux_encrypt_clean
|
|
endif
|
|
ifneq ($(wildcard $(SAMPLE_DIR)/Makefile),)
|
|
BUILD_ALL += sample
|
|
CLEAN_ALL += sample_clean
|
|
endif
|
|
BUILD_ALL += post
|
|
CLEAN_ALL += post_clean
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
BUILD_ALL += rootfs
|
|
CLEAN_ALL += rootfs_clean
|
|
endif
|
|
BUILD_ALL += pack
|
|
CLEAN_ALL += pack_clean cfg_clean
|
|
|
|
sifarsdk:
|
|
# $(MAKE) -C ./code/application/sifarsdk prepare
|
|
@git submodule update --init
|
|
$(MAKE) -C ./code/application/sifarsdk/novatek/S530 sf_cs_app
|
|
|
|
all: sifarsdk $(BUILD_ALL)
|
|
@echo "Finish generating images at $(BUILD_COMPLETE_STRING)"
|
|
@$(call update_modelcfg_to_build)
|
|
|
|
.PHONY: rootfs uboot linux modules tools app sample
|
|
|
|
pack:
|
|
@$(call gen_nvt_pack)
|
|
|
|
checkenv:
|
|
@if [ -z $(LINUX_BUILD_TOP) ]; then \
|
|
echo -e "\r\nERROR :Please source build/envsetup.sh in BSP firstly to have auto copyso function\r\n"; \
|
|
exit 1; \
|
|
fi
|
|
@if [ $(PWD) != $(LINUX_BUILD_TOP) ]; then \
|
|
echo -e "\r\nERROR: Current path is not the same as the environment path ("$(LINUX_BUILD_TOP)")\r\n"; \
|
|
exit 1; \
|
|
fi
|
|
@if [ ! -e $(OUTPUT_DIR) ]; then \
|
|
mkdir $(OUTPUT_DIR); \
|
|
mkdir $(OUTPUT_DIR)/raw; \
|
|
fi
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@# Generate etc link
|
|
make -C ${ROOTFS_DIR} gen_etc
|
|
endif
|
|
|
|
checkrootfs:
|
|
@if [ ! -f $(ROOTFS_DIR)/rootfs/bin/busybox ] || [ ! -f $(ROOTFS_DIR)/rootfs/lib/libc.so.0 ] && [ ! -f $(ROOTFS_DIR)/rootfs/lib/libc.so.6 ]; then \
|
|
echo -e "\r\nERROR :Please make busybox & rootfs firstly\r\n"; \
|
|
exit 1; \
|
|
fi
|
|
|
|
chk_unix: checkenv
|
|
@echo "##### check unix line delimiter format #####"
|
|
@$(BUILD_DIR)/nvt-tools/recursive_dir -t $(LINUX_BUILD_TOP)/code --exclude-ext .o .a .bin .axf .7z .srec .ttl .png .sln .user .filters .vcxproj .sym .bat --exclude-dir .svn .git libxml2-2.9.3 pattern
|
|
|
|
dep:
|
|
@$(call make_dep_by_modelselect)
|
|
|
|
linux: checkenv
|
|
@echo BOARDCONFIG = $(BOARDCONFIG)
|
|
@cp $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG) $(KERNELDIR)/.config
|
|
@echo "##### Build kernel #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(KERNELDIR) $(KERNEL_TARGET) -j$(MULTI_CORES))
|
|
ifeq ($(NVT_LINUX_COMPRESS), NVT_LINUX_COMPRESS_LZMA)
|
|
@$(BUILD_DIR)/nvt-tools/bfc c lzma $(KERNELDIR)/arch/$(ARCH)/boot/Image $(OUTPUT_DIR)/$(KERNEL_IMGNAME) 0 0 -align
|
|
else ifeq ($(NVT_LINUX_COMPRESS), NVT_LINUX_COMPRESS_LZ77)
|
|
@$(BUILD_DIR)/nvt-tools/bfc c lz $(KERNELDIR)/arch/$(ARCH)/boot/Image $(OUTPUT_DIR)/$(KERNEL_IMGNAME) 0 0 -align
|
|
else ifeq ($(NVT_LINUX_COMPRESS), NVT_LINUX_COMPRESS_GZ)
|
|
@$(BUILD_DIR)/nvt-tools/bfc c gz $(KERNELDIR)/arch/$(ARCH)/boot/Image $(OUTPUT_DIR)/$(KERNEL_IMGNAME) 0 0 -align
|
|
else ifeq ($(NVT_LINUX_COMPRESS), NVT_LINUX_COMPRESS_NONE)
|
|
@mkimage -A arm -O linux -C none -T multi -a 0x00008000 -e 0x00008000 -n Linux-$(NVT_LINUX_VER) -d $(KERNELDIR)/arch/$(ARCH)/boot/Image $(OUTPUT_DIR)/$(KERNEL_IMGNAME)
|
|
else
|
|
@cp -afL $(KERNELDIR)/arch/$(ARCH)/boot/$(KERNEL_TARGET) $(OUTPUT_DIR)/$(KERNEL_IMGNAME)
|
|
endif
|
|
|
|
linuxram: checkenv checkrootfs
|
|
@echo BOARDCONFIG = $(BOARDCONFIG)
|
|
@cp $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG) $(KERNELDIR)/.config
|
|
@echo "##### Build kernel #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, cd $(KERNELDIR); sed -i 's/CONFIG_INITRAMFS_SOURCE=\"\"/CONFIG_INITRAMFS_SOURCE=\"$(shell echo $(ROOTFS_DIR)| sed 's/[\/ ]/\\&/g')\/rootfs\"/g' .config)
|
|
@$(call log_stdout, cd $(KERNELDIR); echo -e "CONFIG_INITRAMFS_ROOT_UID=0\nCONFIG_INITRAMFS_ROOT_GID=0" >> .config)
|
|
@$(call log_stdout, make -C $(KERNELDIR) uImage -j$(MULTI_CORES))
|
|
@cp -afL $(KERNELDIR)/arch/$(ARCH)/boot/uImage $(OUTPUT_DIR)/$(KERNEL_RAMDISK_IMGNAME)
|
|
|
|
nuttx: checkenv
|
|
@echo "##### Build secure OS (nuttx) #####"
|
|
@$(call log_remove)
|
|
@make -C $(NUTTX_DIR) 2>&1 | tee -a $(LOGS_DIR)/$@.log; make -C $(NUTTX_DIR) install 2>&1 | tee -a $(LOGS_DIR)/$@.log
|
|
@$(BUILD_DIR)/nvt-tools/encrypt_bin SUM $(NUTTX_DIR)/bin/$(NUTTX_IMGNAME) 0x150 sec$(SDK_CODENAME_SUFFIX)
|
|
@cp -afL $(NUTTX_DIR)/bin/$(NUTTX_IMGNAME) $(OUTPUT_DIR)/
|
|
|
|
#0x16C: bin info (0x100) + crc offset(0x50) + tee header(0x1C)
|
|
optee_os: checkenv
|
|
@echo "##### Build secure OS (optee kernel) na$(SDK_CODENAME_SUFFIX) #####"
|
|
@$(call log_remove)
|
|
@CROSS_PREFIX=${NVT_HOST} PLATFORM=novatek PLATFORM_FLAVOR=na$(SDK_CODENAME_SUFFIX) make -C $(OPTEE_DIR)/optee_os CFG_TEE_CORE_LOG_LEVEL=3 CFG_NS_ENTRY_ADDR=$(BOARD_UBOOT_ADDR) -j$(MULTI_CORES) 2>&1 | tee -a $(LOGS_DIR)/$@.log;
|
|
@$(BUILD_DIR)/nvt-tools/encrypt_bin SUM $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(OPTEE_IMGNAME) 0x150 te$(SDK_CODENAME_SUFFIX)
|
|
@cp -afL $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(OPTEE_IMGNAME) $(OUTPUT_DIR)
|
|
|
|
optee_os_encrypt:
|
|
#$(BUILD_DIR)/nvt-tools/encrypt_uboot $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(OPTEE_IMGNAME) $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(ENCRYPT_OPTEE_IMGNAME) $(CONFIG_DIR)/cfg_gen/aes.txt $(ENCRYPT_MSG_DISPLAY) 1024
|
|
$(BUILD_DIR)/nvt-tools/encrypt_sign_tool 0 $(CONFIG_DIR)/cfg_gen/public $(CONFIG_DIR)/cfg_gen/private $(CONFIG_DIR)/cfg_gen/aes_key.txt $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(OPTEE_IMGNAME) $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(ENCRYPT_OPTEE_IMGNAME)
|
|
@cp -af $(OPTEE_DIR)/optee_os/out/arm-plat-novatek/core/$(ENCRYPT_OPTEE_IMGNAME) $(OUTPUT_DIR)
|
|
|
|
optee_client: checkenv
|
|
@echo "##### Build secure OS (optee client) #####"
|
|
@$(call log_remove)
|
|
@make -C $(OPTEE_DIR)/optee_client 2>&1 | tee -a $(LOGS_DIR)/$@.log; make -C $(OPTEE_DIR)/optee_client install 2>&1 | tee -a $(LOGS_DIR)/$@.log
|
|
|
|
modules: checkenv
|
|
@if [ ! -e $(KERNELDIR)/vmlinux ]; then \
|
|
echo "##### Please run \"make linux\" firstly #####";\
|
|
exit 1;\
|
|
fi
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(KERNELDIR) modules -j$(MULTI_CORES))
|
|
@echo "##### Build modules #####"
|
|
@rm -rf $(KERNELDIR)/_install_modules/
|
|
@$(call log_stdout, make -C $(KERNELDIR) INSTALL_MOD_PATH=$(KERNELDIR)/_install_modules/ modules_install -j$(MULTI_CORES))
|
|
# copy kernel objects to rootfs
|
|
@echo "##### Copy kernel objects to rootFS #####"
|
|
@cp -af $(KERNELDIR)/_install_modules/lib/modules $(ROOTFS_DIR)/rootfs/lib/
|
|
|
|
driver: checkenv
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@if [ ! -e $(KERNELDIR)/_install_modules ]; then \
|
|
echo "##### Please run \"make modules\" firstly #####";\
|
|
exit 1;\
|
|
fi
|
|
endif
|
|
@echo "##### Build drivers #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_DRIVER_DIR) modules $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_DRIVER_DIR) modules_install $(MAKE_QUIET_FLAGS))
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@echo "##### Copy modules to rootFS #####"
|
|
cp -af $(KERNELDIR)/_install_modules/lib/modules $(ROOTFS_DIR)/rootfs/lib/
|
|
endif
|
|
|
|
rtos: checkenv
|
|
@echo "##### Build rtos #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(KERNELDIR)/demos/novatek/$(SDK_CODENAME)/source $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(KERNELDIR)/demos/novatek/$(SDK_CODENAME)/source install $(MAKE_QUIET_FLAGS))
|
|
|
|
vos: checkenv
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@if [ ! -e $(KERNELDIR)/_install_modules ]; then \
|
|
echo "##### Please run \"make modules\" firstly #####";\
|
|
exit 1;\
|
|
fi
|
|
endif
|
|
@echo "##### Build vos #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_VOS_DIR) $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_VOS_DIR) install $(MAKE_QUIET_FLAGS))
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@echo "##### Copy kernel objects to rootFS #####"
|
|
@cp -af $(KERNELDIR)/_install_modules/lib/modules $(ROOTFS_DIR)/rootfs/lib/
|
|
endif
|
|
|
|
hdal: checkenv
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@if [ ! -e $(KERNELDIR)/_install_modules ]; then \
|
|
echo "##### Please run \"make modules\" firstly #####";\
|
|
exit 1;\
|
|
fi
|
|
endif
|
|
@echo "##### Build hdal #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) install $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) sample $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) sample_install $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) test $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) test_install $(MAKE_QUIET_FLAGS))
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@echo "##### Copy kernel objects to rootFS #####"
|
|
@cp -af $(KERNELDIR)/_install_modules/lib/modules $(ROOTFS_DIR)/rootfs/lib/
|
|
endif
|
|
|
|
mbr: checkenv
|
|
@echo "##### Build mbr #####"
|
|
@$(call gen_mbr);
|
|
|
|
alg: checkenv
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@if [ ! -e $(KERNELDIR)/_install_modules ]; then \
|
|
echo "##### Please run \"make modules\" firstly #####";\
|
|
exit 1;\
|
|
fi
|
|
endif
|
|
@echo "##### Build alg #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR)/vendor/alg $(MAKE_QUIET_FLAGS))
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@echo "##### Copy kernel objects to rootFS #####"
|
|
@cp -af $(KERNELDIR)/_install_modules/lib/modules $(ROOTFS_DIR)/rootfs/lib/
|
|
endif
|
|
|
|
dsp: checkenv
|
|
@echo "##### Build dsp #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_DSP_DIR)/FreeRTOS/FreeRTOS_8.1.2_CEVA-XM4/CEVA_FreeRTOS $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C $(NVT_DSP_DIR)/FreeRTOS/FreeRTOS_8.1.2_CEVA-XM4/CEVA_FreeRTOS install $(MAKE_QUIET_FLAGS))
|
|
|
|
uboot: checkenv
|
|
@echo "##### Build u-boot loader$(UBOOT_DEFCONFIG) #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, CROSS_COMPILE=${UBOOT_CROSS_COMPILE} && make -C $(UBOOT_DIR) O="" distclean)
|
|
@$(call log_stdout, CROSS_COMPILE=${UBOOT_CROSS_COMPILE} && make -C $(UBOOT_DIR) O="" $(UBOOT_DEFCONFIG))
|
|
@$(call log_stdout, CROSS_COMPILE=${UBOOT_CROSS_COMPILE} && make -C $(UBOOT_DIR) O="" -j$(MULTI_CORES))
|
|
@$(call log_stdout, CROSS_COMPILE=${UBOOT_CROSS_COMPILE} && make -C $(UBOOT_DIR) O="" env)
|
|
@$(call log_stdout, CROSS_COMPILE=${UBOOT_CROSS_COMPILE} && make -C $(UBOOT_DIR) O="" examples)
|
|
@$(BUILD_DIR)/nvt-tools/encrypt_bin SUM $(UBOOT_DIR)/u-boot.bin 0x350 ub$(UBOOT_ENCRYPT_TAG)
|
|
@$(BUILD_DIR)/nvt-tools/bfc c lz $(UBOOT_DIR)/u-boot.bin $(UBOOT_DIR)/u-boot.lz.bin 0 0
|
|
@$(BUILD_DIR)/nvt-tools/bfc c lzma $(UBOOT_DIR)/u-boot.bin $(UBOOT_DIR)/u-boot.lzma.bin 0 0
|
|
@cp -af $(UBOOT_DIR)/u-boot.bin $(UBOOT_DIR)/u-boot.lz.bin $(UBOOT_DIR)/u-boot.lzma.bin $(OUTPUT_DIR)/
|
|
|
|
|
|
|
|
uboot_encrypt: checkenv
|
|
$(BUILD_DIR)/nvt-tools/encrypt_sign_tool 0 $(CONFIG_DIR)/cfg_gen/public $(CONFIG_DIR)/cfg_gen/private $(CONFIG_DIR)/cfg_gen/aes_key.txt $(UBOOT_DIR)/u-boot.bin $(UBOOT_DIR)/$(ENCRYPT_UBOOT_IMGNAME)
|
|
@cp -af $(UBOOT_DIR)/$(ENCRYPT_UBOOT_IMGNAME) $(OUTPUT_DIR)/
|
|
|
|
linux_encrypt: checkenv
|
|
$(BUILD_DIR)/nvt-tools/encrypt_sign_tool 0 $(CONFIG_DIR)/cfg_gen/public $(CONFIG_DIR)/cfg_gen/private $(CONFIG_DIR)/cfg_gen/aes_key.txt $(OUTPUT_DIR)/$(KERNEL_IMGNAME) $(OUTPUT_DIR)/$(ENCRYPT_KERNEL_IMGNAME)
|
|
|
|
uboot_config: checkenv
|
|
@echo "##### u-boot Menuconfig #####"
|
|
@cp $(UBOOT_DIR)/configs/$(UBOOT_DEFCONFIG) $(UBOOT_DIR)/.config
|
|
make -C $(UBOOT_DIR) O="" menuconfig
|
|
@cp $(UBOOT_DIR)/.config $(UBOOT_DIR)/configs/$(UBOOT_DEFCONFIG)
|
|
|
|
busybox: checkenv
|
|
@echo "##### Build busybox #####"
|
|
cp $(BUSYBOX_DIR)/$(BUSYBOX_CFG) $(BUSYBOX_DIR)/.config
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(BUSYBOX_DIR) -j$(MULTI_CORES))
|
|
@$(call log_stdout, make -C $(BUSYBOX_DIR) -j$(MULTI_CORES) install)
|
|
@cp -af $(BUSYBOX_DIR)/_install/* $(ROOTFS_DIR)/rootfs
|
|
|
|
toybox: checkenv
|
|
@echo "##### Build toybox #####"
|
|
cd $(TOYBOX_DIR)/; if [ ! -f generated/Config.probed ]; then ./scripts/genconfig.sh; fi
|
|
cp $(TOYBOX_DIR)/$(TOYBOX_CFG) $(TOYBOX_DIR)/.config
|
|
@$(call log_remove)
|
|
# $(call removeimg,$(ROOTFS_DIR)/rootfs/bin/busybox)
|
|
$(call remove_lost_symbolic, $(ROOTFS_DIR)/rootfs)
|
|
@$(call log_stdout, CROSS_COMPILE="" make -C $(TOYBOX_DIR) -j$(MULTI_CORES))
|
|
# @$(call log_stdout, cd $(TOYBOX_DIR)/mksh; CC=$(CC) bash ./Build.sh)
|
|
# @$(call log_stdout, CROSS_COMPILE="" PREFIX=$(ROOTFS_DIR)/rootfs make -C $(TOYBOX_DIR) -j$(MULTI_CORES) install)
|
|
# @$(call gen_toybox_symbolic, $(ROOTFS_DIR)/rootfs)
|
|
|
|
library: checkenv
|
|
@echo "##### Build library #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${LIBRARY_DIR})
|
|
@$(call log_stdout, make -C ${LIBRARY_DIR} install)
|
|
|
|
rootfs: checkenv
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@echo "##### Build rootfs #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(ROOTFS_DIR))
|
|
@$(call log_stdout, make -C $(ROOTFS_DIR) install)
|
|
endif
|
|
|
|
sample: checkenv
|
|
@echo "##### Build device driver test #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${SAMPLE_DIR})
|
|
@$(call log_stdout, make -C ${SAMPLE_DIR} install)
|
|
|
|
app: checkenv
|
|
@echo "##### Build app #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${APP_DIR} $(MAKE_QUIET_FLAGS))
|
|
@$(call log_stdout, make -C ${APP_DIR} install $(MAKE_QUIET_FLAGS))
|
|
ifeq ($(NVT_PRJCFG_CFG), rtos)
|
|
@cp ${APP_DIR}/output/*.bin $(OUTPUT_DIR)
|
|
endif
|
|
|
|
tools: checkenv
|
|
@echo "##### Build tools #####"
|
|
@cd ${TOOLS_DIR}; make; make install;
|
|
|
|
cfg: checkenv
|
|
@echo "##### Build config #####"
|
|
@if [ -f build/nvt-tools/nvt_pinctrl_tool/$(PINMUX_CONFIG) ]; then \
|
|
MODEL=`echo $(NVT_PRJCFG_MODEL_CFG) | awk -F'/' '{print $$(NF-1)}' | awk -F'cfg_' '{print $$NF}'`; \
|
|
cp build/nvt-tools/nvt_pinctrl_tool/$(PINMUX_CONFIG) configs/cfg_$$MODEL/; \
|
|
fi
|
|
@if [ -f build/nvt-tools/nvt_pinctrl_tool/$(GPIO_CONFIG) ]; then \
|
|
MODEL=`echo $(NVT_PRJCFG_MODEL_CFG) | awk -F'/' '{print $$(NF-1)}' | awk -F'cfg_' '{print $$NF}'`; \
|
|
cp build/nvt-tools/nvt_pinctrl_tool/$(GPIO_CONFIG) configs/cfg_$$MODEL/; \
|
|
fi
|
|
@$(call log_remove)
|
|
@$(call log_stdout, cd ${CONFIG_DIR}; make; make install)
|
|
|
|
post: checkenv
|
|
@echo "##### run postprocessing script #####";
|
|
@if [ ! -z $(NVT_MAKE_POST) ] && [ -f $(dir $(NVT_PRJCFG_MODEL_CFG))/$(NVT_MAKE_POST) ] ; then \
|
|
sh $(dir $(NVT_PRJCFG_MODEL_CFG))/$(NVT_MAKE_POST); \
|
|
fi
|
|
|
|
publish: checkenv
|
|
@echo "##### remove some sources for publish #####";
|
|
@find $(LINUX_BUILD_TOP) -name publish.json -print0 | xargs -n 1 -0 build/nvt-tools/publish.py -s -j
|
|
|
|
busybox_config: checkenv
|
|
@echo "##### busybox Menuconfig #####"
|
|
cp $(BUSYBOX_DIR)/$(BUSYBOX_CFG) $(BUSYBOX_DIR)/.config
|
|
make -C $(BUSYBOX_DIR) -j$(MULTI_CORES) menuconfig
|
|
cp $(BUSYBOX_DIR)/.config $(BUSYBOX_DIR)/$(BUSYBOX_CFG)
|
|
|
|
toybox_config: checkenv
|
|
@echo "##### toybox Menuconfig #####"
|
|
cd $(TOYBOX_DIR)/; if [ ! -f generated/Config.probed ]; then ./scripts/genconfig.sh; fi
|
|
cp $(TOYBOX_DIR)/$(TOYBOX_CFG) $(TOYBOX_DIR)/.config
|
|
CROSS_COMPILE="" make -C $(TOYBOX_DIR) -j$(MULTI_CORES) menuconfig
|
|
cp $(TOYBOX_DIR)/.config $(TOYBOX_DIR)/$(TOYBOX_CFG)
|
|
|
|
linux_config: checkenv
|
|
@echo "##### linux kernel Menuconfig #####"
|
|
@cp -ap $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG) $(KERNEL_OUTPUT)/.config
|
|
@make -C $(KERNELDIR) menuconfig
|
|
@cp $(KERNEL_OUTPUT)/.config $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG)
|
|
|
|
linux_config_gcov: checkenv
|
|
@echo "##### linux kernel Menuconfig for gcov #####"
|
|
@cd $(KERNELDIR); \
|
|
echo -e "CONFIG_GCOV_KERNEL=y" > gcov.cfg; \
|
|
KCONFIG_CONFIG=./arch/$(ARCH)/configs/$(BOARDCONFIG) \
|
|
./scripts/kconfig/merge_config.sh $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG) gcov.cfg; \
|
|
rm gcov.cfg
|
|
|
|
nuttx_config: checkenv
|
|
@echo "##### nuttx Menuconfig #####"
|
|
@make -C $(NUTTX_DIR) config
|
|
|
|
linux_header: checkenv
|
|
@echo "##### generate linux-kernel out of tree headers #####"
|
|
@cp -ap $(KERNELDIR)/arch/$(ARCH)/configs/$(BOARDCONFIG) $(KERNEL_OUTPUT)/.config
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(KERNELDIR) prepare)
|
|
@$(call log_stdout, make -C $(KERNELDIR) scripts)
|
|
|
|
listpackage:
|
|
make -C ${APP_DIR} listpackage
|
|
|
|
pack_clean:
|
|
@$(call rm_nvt_pack)
|
|
|
|
linux_clean: checkenv
|
|
@echo "##### Clean kernel related objects and config files #####"
|
|
@$(call log_remove)
|
|
@if [ -e $(KERNEL_OUTPUT) ]; then \
|
|
$(call log_stdout, make -C $(KERNELDIR) mrproper -j4) \
|
|
fi
|
|
$(call removeimg,$(OUTPUT_DIR)/$(KERNEL_IMGNAME))
|
|
|
|
nuttx_clean: checkenv
|
|
@echo "##### Clean secure OS (nuttx) #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NUTTX_DIR) clean)
|
|
$(call removeimg,$(OUTPUT_DIR)/$(NUTTX_IMGNAME))
|
|
|
|
optee_os_clean: checkenv
|
|
@echo "##### Clean secure OS (optee_os) #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, CROSS_PREFIX=${NVT_HOST} PLATFORM=novatek PLATFORM_FLAVOR=$(SDK_CODENAME) make -C $(OPTEE_DIR)/optee_os clean)
|
|
$(call removeimg,$(OUTPUT_DIR)/$(OPTEE_IMGNAME))
|
|
|
|
optee_os_encrypt_clean: checkenv
|
|
@echo "##### Clean encrypt optee_os #####"
|
|
$(call removeimg,$(OUTPUT_DIR)/$(ENCRYPT_UBOOT_IMGNAME))
|
|
|
|
optee_client_clean: checkenv
|
|
@echo "##### Clean secure OS (optee_client) #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(OPTEE_DIR)/optee_client clean)
|
|
|
|
rtos_clean: checkenv
|
|
@echo "##### Clean rtos #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(KERNELDIR)/demos/novatek/$(SDK_CODENAME)/source clean $(MAKE_QUIET_FLAGS))
|
|
|
|
vos_clean: checkenv
|
|
@echo "##### Clean vos #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_VOS_DIR) clean $(MAKE_QUIET_FLAGS))
|
|
|
|
hdal_clean: checkenv
|
|
@echo "##### Clean hdal #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR) clean $(MAKE_QUIET_FLAGS))
|
|
|
|
mbr_clean: checkenv
|
|
@echo "##### Clean mbr #####"
|
|
@rm -rf $(OUTPUT_DIR)/MBR*
|
|
|
|
alg_clean: checkenv
|
|
@echo "##### Clean alg #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_HDAL_DIR)/vendor/alg clean $(MAKE_QUIET_FLAGS))
|
|
|
|
dsp_clean: checkenv
|
|
@echo "##### Clean dsp #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_DSP_DIR)/FreeRTOS/FreeRTOS_8.1.2_CEVA-XM4/CEVA_FreeRTOS clean $(MAKE_QUIET_FLAGS))
|
|
|
|
driver_clean: checkenv
|
|
@echo "##### Clean driver modules #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C $(NVT_DRIVER_DIR) clean)
|
|
ifeq ($(NVT_PRJCFG_CFG), Linux)
|
|
@$(call removeimg,$(KERNEL_OUTPUT)/_install_modules/)
|
|
endif
|
|
|
|
uboot_clean: checkenv
|
|
@echo "##### Clean u-boot loader #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${UBOOT_DIR} distclean)
|
|
@$(call removeimg,$(UBOOT_DIR)/u-boot.bin $(UBOOT_DIR)/u-boot.lz.bin $(OUTPUT_DIR)/$(UBOOT_IMGNAME))
|
|
|
|
uboot_encrypt_clean: checkenv
|
|
@echo "##### Clean encrypt u-boot loader #####"
|
|
@$(call removeimg,$(OUTPUT_DIR)/$(ENCRYPT_UBOOT_IMGNAME))
|
|
linux_encrypt_clean: checkenv
|
|
@echo "##### Clean encrypt linux #####"
|
|
@$(call removeimg,$(OUTPUT_DIR)/$(ENCRYPT_RAMDISK_KERNEL_IMGNAME))
|
|
busybox_clean: checkenv
|
|
@echo "##### Clean busybox #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout,make -C ${BUSYBOX_DIR} doc-clean; make -C ${BUSYBOX_DIR} distclean)
|
|
|
|
toybox_clean: checkenv
|
|
@echo "##### Clean toybox #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, CROSS_COMPILE="" make -C $(TOYBOX_DIR) -j$(MULTI_CORES) distclean)
|
|
|
|
library_clean: checkenv
|
|
@echo "##### Clean library #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${LIBRARY_DIR} clean)
|
|
|
|
rootfs_clean: checkenv
|
|
@echo "##### Clean rootfs #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${ROOTFS_DIR} clean)
|
|
|
|
sample_clean: checkenv
|
|
@echo "##### Clean device driver test #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${SAMPLE_DIR} clean)
|
|
|
|
app_clean: checkenv
|
|
@echo "##### Clean applications #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, make -C ${APP_DIR} clean)
|
|
|
|
tools_clean: checkenv
|
|
@echo "##### Clean tools #####"
|
|
@cd ${TOOLS_DIR}; make clean;
|
|
|
|
cfg_clean: checkenv
|
|
@echo "##### Clean config #####"
|
|
@$(call log_remove)
|
|
@$(call log_stdout, cd ${CONFIG_DIR}; make clean)
|
|
|
|
post_clean: checkenv
|
|
@echo "##### run postprocessing clean script #####";
|
|
@if [ ! -z $(NVT_MAKE_POST_CLEAN) ] && [ -f $(dir $(NVT_PRJCFG_MODEL_CFG))/$(NVT_MAKE_POST_CLEAN) ] ; then \
|
|
sh $(dir $(NVT_PRJCFG_MODEL_CFG))/$(NVT_MAKE_POST_CLEAN); \
|
|
fi
|
|
|
|
clean: $(CLEAN_ALL) rm_logs
|
|
$(MAKE) -C ./code/application/sifarsdk clean
|
|
@rm -rf $(OUTPUT_DIR)
|
|
@echo "make clean completed"
|
|
|
|
rm_logs:
|
|
$(call removeimg,$(LOGS_DIR))
|
|
|
|
showenv:
|
|
@echo $(PATH)
|
|
|
|
help:
|
|
@echo "====================================================="
|
|
@echo "make help -> show make command info"
|
|
@echo "make all -> build all"
|
|
@echo "make linux -> build linux-kernel"
|
|
@echo "make linuxram -> build linux-kernel with ramdisk support"
|
|
@echo "make modules -> build built-in kernel modules"
|
|
@echo "make driver -> build NVT linux driver modules"
|
|
@echo "make uboot -> build loader(uboot)"
|
|
@echo "make library -> build library"
|
|
@echo "make busybox -> build busybox"
|
|
@echo "make rootfs -> build rootfs"
|
|
@echo "make app -> build applications"
|
|
@echo "make tools -> build tools"
|
|
@echo "make sample -> build sample code"
|
|
@echo "make post -> run postprocessing script"
|
|
@echo "make pack -> Generate nvtpack image"
|
|
@echo "make publish -> remove some sources for publish"
|
|
@echo "====================================================="
|
|
@echo "make linux_config -> config linux-kernel"
|
|
@echo "make linux_config_gcov-> modify kernel config for code coverage tool"
|
|
@echo "make uboot_config -> config uboot"
|
|
@echo "make busybox_config -> config busybox"
|
|
@echo "make linux_header -> generate linux-kernel out of tree headers"
|
|
@echo "====================================================="
|
|
@echo "make clean -> clean all"
|
|
@echo "make linux_clean -> clean linux-kernel & built-in kernel modules"
|
|
@echo "make driver_clean -> clean NVT linux driver modules"
|
|
@echo "make uboot_clean -> clean loader(uboot)"
|
|
@echo "make library_clean -> clean library"
|
|
@echo "make busybox_clean -> clean busybox"
|
|
@echo "make rootfs_clean -> clean rootfs"
|
|
@echo "make app_clean -> clean applications"
|
|
@echo "make tools_clean -> clean tools"
|
|
@echo "make sample_clean -> clean sample code"
|
|
@echo "make post_clean -> run postprocessing clean script"
|
|
@echo "make pack_clean -> Remove nvtpack image"
|
|
@echo "====================================================="
|
|
|
|
header:
|
|
@echo "Create kernel headers for external driver building, please wait..."
|
|
@cd ${KERNELDIR}; \
|
|
mkdir -p ${KERNEL_HEADER}/arch; \
|
|
mkdir -p ${KERNEL_HEADER}/include/config; \
|
|
mkdir -p ${KERNEL_HEADER}/include/generated; \
|
|
cp -rf arch/${ARCH} ${KERNEL_HEADER}/arch; \
|
|
cp -a usr drivers include init Kbuild Makefile $(KERNEL_OUTPUT)/modules.order $(KERNEL_OUTPUT)/Module.symvers scripts $(KERNEL_OUTPUT)/.config ${KERNEL_HEADER}; \
|
|
cp -a $(KERNEL_OUTPUT)/include/config/auto.conf ${KERNEL_HEADER}/include/config/; \
|
|
cp -a $(KERNEL_OUTPUT)/include/generated/autoconf.h ${KERNEL_HEADER}/include/generated/; \
|
|
find ${KERNEL_HEADER} -name "*.o" | xargs rm -rf; \
|
|
find ${KERNEL_HEADER} -name "*.svn" | xargs rm -rf; \
|
|
find ${KERNEL_HEADER}/arch -name "*.c" | xargs rm -rf; \
|
|
find ${KERNEL_HEADER}/drivers -name "*.c" | xargs rm -rf; \
|
|
find ${KERNEL_HEADER}/init -name "*.c" | xargs rm -rf; \
|
|
tar -czvf $(OUTPUT_DIR)/${KERNEL_HEADER}.tgz ${KERNEL_HEADER}; \
|
|
rm -rf ${KERNEL_HEADER}; \
|
|
cd -;
|
|
|
|
header_clean:
|
|
@echo "##### Clean header #####"
|
|
@$(call log_remove)
|
|
@$(call removeimg,$(OUTPUT_DIR)/${KERNEL_HEADER}.tgz)
|