#/* SPDX-License-Identifier: LGPL-2.1-only OR BSD-3-Clause */
#/******************************************************************************
#*
#* This file is provided under a dual license. When you use or
#* distribute this software, you may choose to be licensed under
#* version 2.1 of the GNU Lesser General Public License
#* ("LGPLv2.1 License") or BSD License.
#*
#* LGPLv2.1 License
#*
#* Copyright(C) 2019 MediaTek Inc.
#*
#* This program is free software; you can redistribute it and/or modify
#* it under the terms of version 2.1 of the GNU Lesser General Public
#* License as published by the Free Software Foundation.
#*
#* This program is distributed in the hope that it will be useful, but
#* WITHOUT ANY WARRANTY; without even the implied warranty of
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#* See https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html for more
#* details.
#*
#* BSD LICENSE
#*
#* Copyright(C) 2019 MediaTek Inc.
#* All rights reserved.
#*
#* Redistribution and use in source and binary forms, with or without
#* modification, are permitted provided that the following conditions
#* are met:
#*
#* * Redistributions of source code must retain the above copyright
#* notice, this list of conditions and the following disclaimer.
#* * Redistributions in binary form must reproduce the above copyright
#* notice, this list of conditions and the following disclaimer in
#* the documentation and/or other materials provided with the
#* distribution.
#* * Neither the name of the copyright holder nor the names of its
#* contributors may be used to endorse or promote products derived
#* from this software without specific prior written permission.
#*
#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
#* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
#* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
#* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
#* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
#* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
#* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
#* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#*
#*****************************************************************************/
#

###########################################################################
# $RCSfile: Makefile,v $
# $Revision$
# $Date$
# $Author$
# $CCRevision: /main/DTV_X_ATSC/6 $
# $SWAuthor: Joshuah Huang $
# $MD5HEX: e2c57029ea8dd3e986bb5c3b4fa60554 $
#
# Description:
#         For each main program to define the executable file name.
#
#         Specify the source files to be compile in SRC.
#############################################################################

ROOTDIR	:= $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else bash -c pwd -L; fi)
export ROOTDIR

ifndef CUSTOMER
CUSTOMER	:= cmtk / mtk
endif

ifndef MODEL_NAME
MODEL_NAME := mt5395_atsc_linux
endif

ifndef THIS_ROOT
THIS_ROOT	:= $(shell bash -c pwd -L)
endif

ifndef LOCKFILE
export LOCKFILE = lockfile -1 -l 30
endif

ifneq (,$(findstring $(TOOL_CHAIN), 4.9.1 4.9.2))
export USE_PRIVATE_LIBGCC := $(CHILING_ROOT)/rootfs/$(LIB_SUB_ROOT)/without-multi-arch-lib
endif

#uboot arch:arm
export ARCH := arm

#
# Override Object Type
#
export APPEND_OBJ_TYPE := uboot

FROMELF := fromelf

JOBS  ?= 12

SHOW_BUILD_COMMAND=
V ?= 0
ifeq "$(V)" "0"
SHOW_BUILD_COMMAND = -s
endif

ifndef TARGET_IC
TARGET_IC = mt5392b
endif

ifndef UBOOT_VERSION
UBOOT_VERSION = 1.3.4
endif

export UBOOT_DIR = u-boot-$(UBOOT_VERSION)

ifdef LOADER_MAX_SIZE
export DEFINES += -DLOADER_MAX_SIZE=$(LOADER_MAX_SIZE)
endif

ifeq "$(BOOT_TYPE)" "ROM2EMMC"
export DEFINES += -DCC_EMMC_BOOT
ifeq "$(EMMC_4BIT)" "true"
export DEFINES += -DCC_EMMC_4BIT
endif
ifeq "$(EMMC_HS200)" "true"
export DEFINES += -DCC_EMMC_HS200
endif
ifeq "$(EMMC_DDR50)" "true"
export DEFINES += -DCC_EMMC_DDR50
endif
endif

ifeq "$(KERNEL_ON_NOR)" "y"
export DEFINES += -DCC_KERNEL_ON_NOR
endif

ifeq "$(UBOOT_NO_LOG)" "y"
export DEFINES += -DCONFIG_LOG_SILENT=1 -DNOLOG
export DEFINES += -DCONFIG_SILENT_CONSOLE
endif



ifeq ($(USB_ADB_PORT), 2)
export DEFINES += -DCC_USB3_ADB_ENABLE
endif

ifeq ($(USB_DELAY_RESUME_SUPPORT),true)
export DEFINES += -DCC_USB_DELAY_RESUME_SUPPORT
endif
ifeq ($(ANDROID_SECURE_BOOT),true)
export DEFINES += -DCC_ANDROID_SECURE_BOOT
ifeq ($(ANDROID_SECURE_BOOT_CLASS_B),true)
export DEFINES += -DCC_ANDROID_SECURE_BOOT_CLASS_B
ifeq ($(ANDROID_SECURE_BOOT_UNLOCK),true)
export DEFINES += -DCC_ANDROID_SECURE_BOOT_UNLOCK
endif
endif
endif

define nptv_symlink
	@for i in `cd $(TARGET_ROOT)/$(TARGET_DRIVER)/$1/inc; find . -type f -o -type l -follow`; \
	do \
		FILE_NAME=`basename $$i`; \
		DIR_NAME=`dirname $$i`; \
		if [ ! -h $(DRVLIB_NPTV_DIR)/inc/$$i ]; then \
			echo "Symlink: $$i"; \
			mkdir -p $(DRVLIB_NPTV_DIR)/inc/$$DIR_NAME; \
			$(call if_file_notexist_w_sym_fct, $(TARGET_ROOT)/$(TARGET_DRIVER)/$1/inc/$$i, $(DRVLIB_NPTV_DIR)/inc/$$i); \
		fi; \
	done
endef

#LN = ln
#LN_FLAG = -sf
#if_file_notexist_w_sym_fct     = if [ -e $(1) -o -h $(1) ] && [ ! -e $(2) -a ! -h $(2) ]; then echo "symlink: `basename $(1)`";$(LN) $(LN_FLAG) $(1) $(2);if [ "$(SYMLINK_LOG)" != "" ]; then echo $(2) >> $(SYMLINK_LOG); fi ;k fi

#
# Find the local cfg.mak, if existed, include it
#
CFG_MAK_NAME := cfg.mak

INC_CFG_MAK := $(shell if [ -e $(UBOOT_CFG_DIR)/$(CFG_MAK_NAME) ];then echo "$(UBOOT_CFG_DIR)/$(CFG_MAK_NAME)"; else echo ""; fi)

ifneq "$(INC_CFG_MAK)" ""
include $(INC_CFG_MAK)
DEFINES := $(sort $(DEFINES))
endif

RLS_CUSTOM_BUILD ?= false
ifndef CUSTOMER_ARCH_BUILD
export PROJECT_ROOT      = $(word 1, $(subst /linux_core/,/linux_core /, $(shell bash -c pwd -L)))
export TARGET_ROOT       = $(PROJECT_ROOT)/driver/target/open/$(TARGET_IC)

include $(DTV_LINUX_MAK_ROOT)/host.mak

#ifeq "$(RLS_CUSTOM_BUILD)" "false"
#export MTKLOADER_SUBPATH = _build/_mtkloader/project_x
#else
#export MTKLOADER_SUBPATH =  linux_core/dtv_mtkloader/project_x
#endif

#export MTKLOADER_SUBPATH = _build/_mtkloader/project_x

#export MTKLOADER_ROOT    = $(VM_LINUX_ROOT)/$(MTKLOADER_SUBPATH)
#export UTARGET_ROOT      = $(MTKLOADER_ROOT)/target/$(TARGET_IC)
endif

MODULE_DIR_LIST = drv_cust inc
NPTV_DIR_LIST =
MIDDLEWARE_LIST = $(PROJECT_ROOT)/driver/linux/lib/mw/x_inc
PRELOADER_FILE_LIST = $(wildcard $(TARGET_ROOT)/$(TARGET_DRIVER)/bsp/*.c $(TARGET_ROOT)/$(TARGET_DRIVER)/bsp/*.h)

BOARDDIR		:= $(ROOTDIR)/$(UBOOT_DIR)/board/$(TARGET_IC)

DRV_LIB_DIR := $(ROOTDIR)/drv_lib

export DRVLIB_DRVCUST_DIR := $(DRV_LIB_DIR)/$(TARGET_IC)/drv_cust
export DRVLIB_NPTV_DIR := $(DRV_LIB_DIR)/$(TARGET_IC)/nptv
export DRVLIB_DRV_INC_DIR := $(DRV_LIB_DIR)/$(TARGET_IC)/drv_inc


PRELOADER_DIR := preloader/$(TARGET_IC)
PACK_DIR := pack
SECURE_DIR := secure

export UBOOT_NEW_ARCH = y
#TARGET_DRIVER=$(shell echo $(TARGET_IC) | sed 's/^[a-zA-Z]*//')_driver
TARGET_DRIVER=$(subst mt,,$(TARGET_IC))_driver
export TARGET_DRIVER
export UBOOT_LIBRARY = y

include config.mak
PLATFORM_LIBS = -L $(shell dirname `$(CC) $(CFLAGS) -print-libgcc-file-name`) -lgcc
export UBOOT_NEW_LIBRARY = y

ifeq "$(BUILD_CFG)" "debug"
export MODE ?= debug
export DEFINES += -DCC_DEBUG
endif

ifeq "$(BUILD_CFG)" "cli"
export MODE ?= debug
endif

export MODE ?= release

ifndef EXE_NAME
EXE_NAME = $(MODEL)
endif

ifeq ($(UBOOT_NEW_ARCH),y)
ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5365 mt5395))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc/*.c pdwnc/*.h \
	nand/nandhw_reg.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx/dmx_aes_reg.h \
	nor/eeprom_hw.c nor/eeprom_if.c sif/sif_diag.c sif/sif_if.c sif/sif_if.h sif/sif_isr.c sif/sif_hw_v1.c sif/sif_hw_v2.c sif/sif_debug.h sif/sif_hw.h sif/sif_isr.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_io.h ir/ir_debug.h ir/ir_ph.h ir/ir_reg.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5396 mt5368 mt5389))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc6896/*.c pdwnc6896/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx6896/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif6896/sif_diag.c sif6896/sif_if.c sif6896/sif_if.h sif6896/sif_isr.c sif6896/sif_hw_v1.c sif6896/sif_hw_v2.c sif6896/sif_debug.h sif6896/sif_hw.h sif6896/sif_isr.h \
	ir6896/ir_ph.c ir6896/ir_hw.c ir6896/irrx_if.c ir6896/ir_io.h ir6896/ir_debug.h ir6896/ir_ph.h ir6896/ir_reg.h dmx6896/gcpu_hw.c dmx6896/gcpu_api.c \
	dmx6896/gcpu_if.c dmx6896/*.h dmx6896/gcpu/*.h dmx6896/dmx_drm_if.c dmx6896/dmx_dtcp_api.c

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5398 mt5880))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc6896/*.c pdwnc6896/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx6896/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif6896/sif_diag.c sif6896/sif_if.c sif6896/sif_if.h sif6896/sif_isr.c sif6896/sif_hw_v1.c sif6896/sif_hw_v2.c sif6896/sif_debug.h sif6896/sif_hw.h sif6896/sif_isr.h \
	ir6896/ir_ph.c ir6896/ir_hw.c ir6896/irrx_if.c ir6896/ir_io.h ir6896/ir_debug.h ir6896/ir_ph.h ir6896/ir_reg.h dmx9880/gcpu/gcpu_hw.c dmx9880/gcpu/gcpu_api.c \
	dmx9880/gcpu/gcpu_if.c dmx9880/include/*.h dmx9880/gcpu/*.h dmx9880/gcpu/iram/*.h dmx9880/drv/dmx_drm_if.c dmx9880/drv/dmx_dtcp_api.c

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5881))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc5881/*.c pdwnc5881/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx6896/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif6896/sif_diag.c sif6896/sif_if.c sif6896/sif_if.h sif6896/sif_isr.c sif6896/sif_hw_v1.c sif6896/sif_hw_v2.c sif6896/sif_debug.h sif6896/sif_hw.h sif6896/sif_isr.h \
	ir6896/ir_ph.c ir6896/ir_hw.c ir6896/irrx_if.c ir6896/ir_io.h ir6896/ir_debug.h ir6896/ir_ph.h ir6896/ir_reg.h dmx9880/gcpu/gcpu_hw.c dmx9880/gcpu/gcpu_api.c \
	dmx9880/gcpu/gcpu_if.c dmx9880/include/*.h dmx9880/gcpu/*.h dmx9880/gcpu/iram/*.h dmx9880/drv/dmx_drm_if.c dmx9880/drv/dmx_dtcp_api.c

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5399))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc5399/*.c pdwnc5399/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx5399/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif5399/sif_diag.c sif5399/sif_if.c sif5399/sif_if.h sif5399/sif_isr.c sif5399/sif_hw_v1.c sif5399/sif_hw_v2.c sif5399/sif_debug.h sif5399/sif_hw.h sif5399/sif_isr.h \
	ir6896/ir_ph.c ir6896/ir_hw.c ir6896/irrx_if.c ir6896/ir_io.h ir6896/ir_debug.h ir6896/ir_ph.h ir6896/ir_reg.h dmx5399/gcpu/gcpu_hw.c dmx5399/gcpu/gcpu_api.c \
	dmx5399/gcpu/gcpu_if.c dmx5399/include/*.h dmx5399/gcpu/*.h dmx5399/gcpu/iram/*.h dmx5399/drv/dmx_drm_if.c dmx5399/drv/dmx_dtcp_api.c

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5890))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif5399/sif_diag.c sif5399/sif_if.c sif5399/sif_if.h sif5399/sif_isr.c sif5399/sif_hw_v1.c sif5399/sif_hw_v2.c sif5399/sif_debug.h sif5399/sif_hw.h sif5399/sif_isr.h \
	ir8290_8563/ir_ph.c ir8290_8563/ir_hw.c ir8290_8563/irrx_if.c ir8290_8563/ir_debug.h ir8290_8563/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	nptv8290/api/ostg_if.c nptv8290/drv/ostg/drv_display.c nptv8290/drv/ostg/drv_lvds.c nptv8290/sys/hw_vdoin.c \
	nptv8290/drv/io/drv_pwm.c ckgen/ckgen.c nptv8290/drv/ostg/drv_vbyone.c nptv8290/drv/ostg/drv_tcon.c ckgen/setpll.c \
	nptv8290/drv/ostg/drv_scaler_psc.c nptv8290/drv/ostg/drv_scaler_psc_hw.c nptv8290/drv/ostg/drv_scaler_hw.c nptv8290/drv/ostg/drv_uhd_hw.c \
	nptv8290/sys/vdo_evtflg.c nptv8290/sys/video_data.c nptv8290/nlibs/patent/drv_vdoclk.c nptv8290/nlibs/patent/drv_vdoclk.h
MODULE_FILE_LIST += \
	osd6896/osd_base_hw.c osd6896/osd_base_if.c \
	osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
	osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
	osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5891))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif8391/sif_diag.c sif8391/sif_if.c sif8391/sif_if.h sif8391/sif_isr.c sif8391/sif_hw_m0.c sif8391/sif_hw_m1.c sif8391/sif_hw_m2.c sif8391/sif_hw_pdm0.c sif8391/sif_hw_pdm1.c sif8391/sif_hw_secm0.c sif8391/sif_debug.h sif8391/sif_hw.h sif8391/sif_isr.h \
	ir8290_8563/ir_ph.c ir8290_8563/ir_hw.c ir8290_8563/irrx_if.c ir8290_8563/ir_debug.h ir8290_8563/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	nptv5891/api/ostg_if.c nptv5891/drv/ostg/drv_display.c nptv5891/drv/ostg/drv_lvds.c nptv5891/sys/hw_vdoin.c \
	nptv5891/drv/io/drv_pwm.c ckgen/ckgen.c nptv5891/drv/ostg/drv_vbyone.c nptv5891/drv/ostg/drv_tcon.c ckgen/setpll.c \
	nptv5891/drv/ostg/drv_scaler_psc.c nptv5891/drv/ostg/drv_scaler_psc_hw.c nptv5891/drv/ostg/drv_scaler_hw.c \
	nptv5891/sys/vdo_evtflg.c nptv5891/sys/video_data.c nptv5891/nlibs/patent/drv_vdoclk.c nptv5891/nlibs/patent/drv_vdoclk.h
MODULE_FILE_LIST += \
	osd6896/osd_base_hw.c osd6896/osd_base_if.c \
	osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
	osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
	osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h
MODULE_FILE_LIST += \
	msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
	msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
	msdc/msdc_autok.c msdc/msdc_autok.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5893))
MODULE_FILE_LIST = \
	bsp/gcpu_lite.c bsp/lzhs.c bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h spi5895/*.c spi5895/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif5893/sif_diag.c sif5893/sif_if.c sif5893/sif_if.h sif5893/sif_isr.c sif5893/sif_hw.c sif5893/sif_debug.h sif5893/sif_hw.h sif5893/sif_isr.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_debug.h ir/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	nptv5893/api/ostg_if.c nptv5893/drv/ostg/drv_display.c nptv5893/drv/ostg/drv_lvds.c nptv5893/sys/hw_vdoin.c \
	nptv5893/drv/io/drv_pwm.c ckgen/ckgen.c nptv5893/drv/ostg/drv_vbyone.c nptv5893/drv/ostg/drv_tcon.c ckgen/setpll.c \
	nptv5893/drv/ostg/drv_scaler_psc.c nptv5893/drv/ostg/drv_scaler_psc_hw.c nptv5893/drv/ostg/drv_scaler_hw.c  \
	nptv5893/sys/vdo_evtflg.c nptv5893/sys/video_data.c
MODULE_FILE_LIST += \
	osd6896/osd_base_hw.c osd6896/osd_base_if.c \
	osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
	osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
	osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h
MODULE_FILE_LIST += \
	msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
	msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
	msdc/msdc_autok.c msdc/msdc_autok.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5895))
MODULE_FILE_LIST = \
        bsp/gcpu_lite.c bsp/lzhs.c bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h spi5895/*.c spi5895/*.h \
        nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
        sif5893/sif_diag.c sif5893/sif_if.c sif5893/sif_if.h sif5893/sif_isr.c sif5893/sif_hw.c sif5893/sif_debug.h sif5893/sif_hw.h sif5893/sif_isr.h \
        ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_debug.h ir/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
        dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
        nptv5895/api/ostg_if.c nptv5895/drv/ostg/drv_display.c nptv5895/drv/ostg/drv_lvds.c nptv5895/sys/hw_vdoin.c \
        nptv5895/drv/io/drv_pwm.c ckgen/ckgen.c nptv5895/drv/ostg/drv_vbyone.c nptv5895/drv/ostg/drv_tcon.c ckgen/setpll.c \
        nptv5895/drv/ostg/drv_scaler_psc.c nptv5895/drv/ostg/drv_scaler_psc_hw.c nptv5895/drv/ostg/drv_scaler_hw.c  \
        nptv5895/sys/vdo_evtflg.c nptv5895/sys/video_data.c
MODULE_FILE_LIST += \
        osd6896/osd_base_hw.c osd6896/osd_base_if.c \
        osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
        osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
        osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h
MODULE_FILE_LIST += \
        msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
        msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
        msdc/msdc_autok.c msdc/msdc_autok.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5863))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx5882/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif8391/sif_diag.c sif8391/sif_if.c sif8391/sif_if.h sif8391/sif_isr.c sif8391/sif_hw_m0.c sif8391/sif_hw_m1.c sif8391/sif_hw_pdm0.c sif8391/sif_hw_pdm1.c sif8391/sif_hw_secm0.c sif8391/sif_debug.h sif8391/sif_hw.h sif8391/sif_isr.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_io.h ir/ir_debug.h ir/ir_ph.h ir/ir_reg.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	nptv5863/api/ostg_if.c nptv5863/drv/ostg/drv_display.c nptv5863/drv/ostg/drv_lvds.c nptv5863/sys/hw_vdoin.c \
	nptv5863/drv/io/drv_pwm.c ckgen/ckgen.c nptv5863/drv/ostg/drv_vbyone.c nptv5863/drv/ostg/drv_tcon.c ckgen/setpll.c \
	nptv5863/drv/ostg/drv_scaler_psc.c nptv5863/drv/ostg/drv_scaler_psc_hw.c nptv5863/drv/ostg/drv_scaler_hw.c \
	nptv5863/sys/vdo_evtflg.c nptv5863/sys/video_data.c
MODULE_FILE_LIST += \
	osd6896/osd_base_hw.c osd6896/osd_base_if.c \
	osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
	osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
	osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h
MODULE_FILE_LIST += \
	msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
	msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
	msdc/msdc_autok.c msdc/msdc_autok.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5886))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif8391/sif_diag.c sif8391/sif_if.c sif8391/sif_if.h sif8391/sif_isr.c sif8391/sif_hw_m0.c sif8391/sif_hw_m1.c sif8391/sif_hw_m2.c sif8391/sif_hw_pdm0.c sif8391/sif_hw_pdm1.c sif8391/sif_hw_secm0.c sif8391/sif_debug.h sif8391/sif_hw.h sif8391/sif_isr.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_debug.h ir/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	nptv5886/api/ostg_if.c nptv5886/drv/ostg/drv_display.c nptv5886/drv/ostg/drv_lvds.c nptv5886/sys/hw_vdoin.c \
	nptv5886/drv/io/drv_pwm.c ckgen/ckgen.c nptv5886/drv/ostg/drv_vbyone.c nptv5886/drv/ostg/drv_tcon.c ckgen/setpll.c \
	nptv5886/drv/ostg/drv_scaler_psc.c nptv5886/drv/ostg/drv_scaler_psc_hw.c nptv5886/drv/ostg/drv_scaler_hw.c \
	nptv5886/sys/vdo_evtflg.c nptv5886/sys/video_data.c
MODULE_FILE_LIST += \
	osd6896/osd_base_hw.c osd6896/osd_base_if.c \
	osd6896/osd_plane_hw.c osd6896/osd_plane_if.c osd6896/osd_region_hw.c osd6896/osd_region_if.c \
	osd6896/osd_scaler_if.c osd6896/osd_scaler_hw.c osd6896/osd_exp_if.c \
	osd6896/osd_debug.h osd6896/osd_drvif.h osd6896/osd_hw.h osd6896/osd_if.h osd6896/osd_exp.h
MODULE_FILE_LIST += pmx/pmx_hw.c pmx/pmx_if.c pmx/pmx_drvif.h pmx/pmx_hw.h pmx/pmx_if.h
MODULE_FILE_LIST += \
	msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
	msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
	msdc/msdc_autok.c msdc/msdc_autok.h

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5882))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc5399/*.c pdwnc5399/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx5882/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif5399/sif_diag.c sif5399/sif_if.c sif5399/sif_if.h sif5399/sif_isr.c sif5399/sif_hw_v1.c sif5399/sif_hw_v2.c sif5399/sif_debug.h sif5399/sif_hw.h sif5399/sif_isr.h \
	ir6896/ir_ph.c ir6896/ir_hw.c ir6896/irrx_if.c ir6896/ir_io.h ir6896/ir_debug.h ir6896/ir_ph.h ir6896/ir_reg.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c

else ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5865))
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc8290/*.c pdwnc8290/*.h \
	nand/nandhw_reg.h msdc/msdc_host_hw.h msdc/msdc_slave_hw.h msdc/msdc_drv.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h dmx8290/dmx_aes_reg.h nor/eeprom_hw.c nor/eeprom_if.c \
	sif8391/sif_diag.c sif8391/sif_if.c sif8391/sif_if.h sif8391/sif_isr.c sif8391/sif_hw_m0.c sif8391/sif_hw_m1.c sif8391/sif_hw_pdm0.c sif8391/sif_hw_pdm1.c sif8391/sif_hw_secm0.c sif8391/sif_debug.h sif8391/sif_hw.h sif8391/sif_isr.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_debug.h ir/ir_ph.h dmx8290/gcpu/gcpu_hw.c dmx8290/gcpu/gcpu_api.c \
	dmx8290/gcpu/gcpu_if.c dmx8290/include/*.h dmx8290/gcpu/*.h dmx8290/gcpu/iram/*.h dmx8290/drv/dmx_drm_if.c dmx8290/drv/dmx_dtcp_api.c
MODULE_FILE_LIST += \
	msdc/msdc_basic.c msdc/msdc_basic.h msdc/msdc_ett_setting.c msdc/msdc_ett_setting.h \
	msdc/msdc_mmc_protocal.c msdc/msdc_mmc_protocal.h msdc/msdc_ext.c msdc/msdc_ext.h \
	msdc/msdc_autok.c msdc/msdc_autok.h

else
MODULE_FILE_LIST = \
	bsp/hal_io.c ckgen/ckgen.c ckgen/gpio.c ckgen/pinmux.c ckgen/setpll.c inc/x_gpio.h inc/x_pdwnc.h pdwnc/*.c pdwnc/*.h \
	nand/nandhw_reg.h nor/serialflash_hw.c nor/serialflash_hw.h nor/nor_debug.h \
	nor/eeprom_hw.c nor/eeprom_if.c sif/sif_diag.c sif/sif_if.c sif/sif_if.h sif/sif_debug.h sif/sif_hw.h \
	ir/ir_ph.c ir/ir_hw.c ir/irrx_if.c ir/ir_io.h ir/ir_debug.h ir/ir_ph.h ir/ir_reg.h
endif
endif #UBOOT_NEW_ARCH

export BUILD_TARGET_OBJ_ROOT := $(OBJ_ROOT)/uboot
export UBOOT_OBJ_ROOT     := $(shell mkdir -p $(BUILD_TARGET_OBJ_ROOT)/$(UBOOT_DIR) && cd $(BUILD_TARGET_OBJ_ROOT)/$(UBOOT_DIR) && /bin/pwd)
export UBOOT_PACK_ROOT     := $(shell mkdir -p $(BUILD_TARGET_OBJ_ROOT)/pack && cd $(BUILD_TARGET_OBJ_ROOT)/pack && /bin/pwd)
export UBOOT_SECURE_PACK_ROOT     := $(shell mkdir -p $(BUILD_TARGET_OBJ_ROOT)/secure && cd $(BUILD_TARGET_OBJ_ROOT)/secure && /bin/pwd)
export MTKLOADER_OBJ_ROOT := $(shell mkdir -p $(BUILD_TARGET_OBJ_ROOT)/mtkloader && cd $(BUILD_TARGET_OBJ_ROOT)/mtkloader && /bin/pwd)
export O                  := $(UBOOT_OBJ_ROOT)

export DRV_INC_ROOT := $(VM_LINUX_ROOT)/linux_core/driver/ko/$(TARGET_IC)/$(TARGET_DRIVER)/drv_inc

MODULE_DIR_LIST_TXT=  $(UBOOT_OBJ_ROOT)/module_dir_list.txt



.PHONY:	drv_lib uboot_cfg pre_link uboot_linux mtkloader preloader_linux packing_linux packing_secure_linux

#ALL = clean

INIT = drv_lib

INIT += pre_link

ALL =

ALL += uboot_linux
ALL += mtkloader

#DRV_FILE_LIST = $(UTARGET_ROOT)/drv_file_list.txt

all:
	$(MAKE) $(if $(filter -j,$(MAKEFLAGS)),,-j $(JOBS)) uboot_init
	$(MAKE) packing_linux
ifeq ($(SECURE_BOOT),y)
	$(MAKE) packing_secure_linux
endif

uboot_init: $(INIT)

pre_link:
	@echo 'do nothing'
ifeq "$(AVB_ENABLE)" "true"
ifneq ($(wildcard $(AVB_PUBLIC_KEY0)),)
	if [ -e $(UBOOT_DIR)/include/key.h ]; then \
		rm -rf $(UBOOT_DIR)/include/key.h; \
	fi
	python con2header.py $(AVB_PUBLIC_KEY0)
	cp  key.h $(UBOOT_DIR)/include/key.h
	rm -rf key.h
endif
else
ifeq ($(ANDROID_SECURE_BOOT),true)
ifneq ($(wildcard $(ANDROID_DM_VERITY_KEY)_key),)
	if [ -e $(UBOOT_DIR)/include/key.h ]; then \
		rm -rf $(UBOOT_DIR)/include/key.h; \
	fi
	python con2header.py $(ANDROID_DM_VERITY_KEY)_key
	cp  key.h $(UBOOT_DIR)/include/key.h
	rm -rf key.h
endif
endif
endif
pre_linka :
	@echo "BUILD_UBOOT_$@_START_TIME   = `$(DATE) $(DATE_FLAG)`"
	@if [ ! -d $(UTARGET_ROOT) ]; then \
		mkdir -p $(UTARGET_ROOT); \
	fi

	rm -rf $(DRV_FILE_LIST).need_to_do_link
	if [ ! -e $(DRV_FILE_LIST) ]; then \
		cd $(TARGET_ROOT)/; \
		find . -type l -o -type f -follow 2>&1 |uniq |sed -r "s/[\`\']//g"|sed -r 's/find: //g; s/:.*//g'|grep -v .o.cmd |grep -v modules.order > $(DRV_FILE_LIST); \
		touch $(DRV_FILE_LIST).need_to_do_link;\
	else \
		cd $(TARGET_ROOT)/; \
		find . -type l -o -type f -follow 2>&1 |sed -r 's/find: //g; s/:.*//g'|grep -v .o.cmd |grep -v modules.order > $(DRV_FILE_LIST).tmp; \
		if [ "`diff -q $(DRV_FILE_LIST).tmp $(DRV_FILE_LIST) 2>/dev/null`" != '' ]; then \
			cp $(DRV_FILE_LIST).tmp $(DRV_FILE_LIST); \
			touch $(DRV_FILE_LIST).need_to_do_link; \
			rm -rf $(DRV_FILE_LIST).tmp; \
		fi; \
	fi

	$(MAKE) -f ./symlink.mak $(if $(filter -j,$(MAKEFLAGS)),,-j $(JOBS)) --no-print-directory
	@rm -rf $(DRV_FILE_LIST).need_to_do_link
	@echo "BUILD_UBOOT_$@_END_TIME   = `$(DATE) $(DATE_FLAG)`"

uboot_cfg:
	@echo "BUILD_UBOOT_$@_START_TIME   = `$(DATE) $(DATE_FLAG)`"
	$(MAKE) -C $(UBOOT_DIR) $(TARGET_IC)_config O=$(UBOOT_OBJ_ROOT)
	$(call if_file_notexist_w_sym_fct, $(DRV_INC_ROOT), $(DRVLIB_DRV_INC_DIR));
	@echo "BUILD_UBOOT_$@_END_TIME   = `$(DATE) $(DATE_FLAG)`"

packing_linux:$(ALL)

	@echo "Do packing..."
	$(MAKE) -C $(PACK_DIR) 5365_package MODEL=$(MODEL) BOARD=$(TARGET_IC) TARGET_IC=$(TARGET_IC)

packing_secure_linux:
	@echo "Do packing secure boot loader..."
	$(MAKE) -C $(SECURE_DIR) 5365_package MODEL=$(MODEL) BOARD=$(TARGET_IC) TARGET_IC=$(TARGET_IC)


clean_packing_secure_linux:
	$(MAKE) -C $(SECURE_DIR) clean MODEL=$(MODEL) BOARD=$(TARGET_IC) TARGET_IC=$(TARGET_IC)

preloader_linux:
	@echo "Build preloader..."
	$(MAKE) -C $(DRVLIB_DRVCUST_DIR) clean BOARD=$(TARGET_IC) SECURE_BOOT=$(SECURE_BOOT)
ifeq "$(TARGET_IC)" "mt5392b"
	$(MAKE) -C $(DRVLIB_DRVCUST_DIR) PRELOADER_DEF=CC_5391_PRELOADER BOARD=$(TARGET_IC) SECURE_BOOT=$(SECURE_BOOT)
endif
ifeq "$(TARGET_IC)" "mt5363"
	$(MAKE) -C $(DRVLIB_DRVCUST_DIR) PRELOADER_DEF=CC_MTK_PRELOADER BOARD=$(TARGET_IC) SECURE_BOOT=$(SECURE_BOOT)
endif
	$(MAKE) -C $(PRELOADER_DIR) clean MODEL=$(MODEL) BOARD=$(TARGET_IC) SECURE_BOOT=$(SECURE_BOOT)
	$(MAKE) -C $(PRELOADER_DIR) MODEL=$(MODEL) BOARD=$(TARGET_IC) SECURE_BOOT=$(SECURE_BOOT)
	@cd $(PRELOADER_DIR)
ifeq ($(BOOT),nand)
ifeq  ($(ROM_CODE),y)
	$(LD) -Bstatic -T $(PRELOADER_DIR)/rom2nand.lds \
	--start-group $(PRELOADER_DIR)/libpreloader.a $(DRVLIB_DRVCUST_DIR)/libdrv_cust.a  \
	--end-group $(PLATFORM_LIBS) -Map $(MODEL)_preloader_$(BOOT).map -o $(MODEL)_preloader_$(BOOT)
	$(OBJCOPY) ${OBJCFLAGS} -O binary $(MODEL)_preloader_$(BOOT) $(MODEL)_preloader_$(BOOT).bin
else
	$(LD) -Bstatic -T $(PRELOADER_DIR)/nand.lds \
	--start-group $(PRELOADER_DIR)/libpreloader.a $(DRVLIB_DRVCUST_DIR)/libdrv_cust.a  \
	--end-group $(PLATFORM_LIBS) -Map $(MODEL)_preloader_$(BOOT).map -o $(MODEL)_preloader_$(BOOT)
	$(OBJCOPY) ${OBJCFLAGS} -O binary $(MODEL)_preloader_$(BOOT) $(MODEL)_preloader_$(BOOT).bin
endif
else
	$(LD) -Bstatic -T $(PRELOADER_DIR)/nor.lds \
	--start-group $(PRELOADER_DIR)/libpreloader.a $(DRVLIB_DRVCUST_DIR)/libdrv_cust.a  \
	--end-group $(PLATFORM_LIBS) -Map $(MODEL)_preloader_$(BOOT).map -o $(MODEL)_preloader_$(BOOT)
	$(OBJCOPY) ${OBJCFLAGS} -O binary $(MODEL)_preloader_$(BOOT) $(MODEL)_preloader_$(BOOT).bin
endif
	mv $(MODEL)_preloader_$(BOOT)* preloader

uboot_linux: uboot_cfg
	@echo "BUILD_UBOOT_$@_START_TIME   = `$(DATE) $(DATE_FLAG)`"
	$(MAKE) -C $(UBOOT_DIR) all TARGET_IC=$(TARGET_IC) $(if $(filter -j,$(MAKEFLAGS)),,-j $(JOBS)) $(SHOW_BUILD_COMMAND) --no-print-directory O=$(UBOOT_OBJ_ROOT) 2>&1 | tee $(UBOOT_OBJ_ROOT)/make.log
	@$(call chk_err_fct, $(UBOOT_OBJ_ROOT)/make.log);
	@rm -f $(UBOOT_OBJ_ROOT)/make.log $(UBOOT_OBJ_ROOT)/temp.log
	@rm -f $(UBOOT_OBJ_ROOT)/u-boot.srec
	@echo "BUILD_UBOOT_$@_END_TIME   = `$(DATE) $(DATE_FLAG)`"

drv_lib:

	@echo "BUILD_UBOOT_$@_START_TIME   = `$(DATE) $(DATE_FLAG)`"
	@echo "TARGET_ROOT:$(TARGET_ROOT) TARGET_DRIVER:$(TARGET_DRIVER)"
	echo TARGET_IC: $(TARGET_IC)
	mkdir -p $(DRVLIB_DRVCUST_DIR)
	@if [ ! -h $(UBOOT_DIR)/include/configs/$(TARGET_IC)/drv_cust ]; then \
		echo "Symlink: drv_cust"; \
		mkdir -p $(UBOOT_DIR)/include/configs/$(TARGET_IC) ; \
		$(call if_file_notexist_w_sym_fct, $(DRVLIB_DRVCUST_DIR) , $(ROOTDIR)/$(UBOOT_DIR)/include/configs/$(TARGET_IC)/drv_cust) ; \
	fi
	@if [ ! -h $(ROOTDIR)/$(UBOOT_DIR)/board ]; then \
		echo "Symlink: board"; \
		$(call if_file_notexist_w_sym_fct, $(ROOTDIR)/board , $(ROOTDIR)/$(UBOOT_DIR)/board) ; \
	fi
	@if [ ! -e $(ROOTDIR)/$(UBOOT_DIR)/board/$(TARGET_IC)/drv_lib ]; then \
		mkdir -p $(ROOTDIR)/$(UBOOT_DIR)/board/$(TARGET_IC)/drv_lib ; \
	fi
	for i in `cd $(ROOTDIR)/drv_lib/$(TARGET_IC) ; ls ` ; do  \
		if [ ! -h $(ROOTDIR)/$(UBOOT_DIR)/board/$(TARGET_IC)/drv_lib/$$i ]; then \
			echo "Symlink: drv_lib $$i ";\
	  $(call if_file_notexist_w_sym_fct, $(ROOTDIR)/drv_lib/$(TARGET_IC)/$$i , $(ROOTDIR)/$(UBOOT_DIR)/board/$(TARGET_IC)/drv_lib/$$i) ; \
	fi ; \
	done

	@if [ ! -e $(UBOOT_INC_DIR)/linux/module.h ]; then \
		mkdir -p $(UBOOT_INC_DIR)/linux; \
		touch $(UBOOT_INC_DIR)/linux/module.h; \
	fi

	@if [ ! -h $(DRV_LIB_DIR)/include/d_drv_cust.h ]; then \
		echo "Symlink: d_drv_cust.h"; \
		$(call if_file_notexist_w_sym_fct, $(PROJECT_ROOT)/driver/target/open/d_inc/d_drv_cust.h , $(DRV_LIB_DIR)/include/d_drv_cust.h ) ; \
	fi

	@mkdir -p $(DRVLIB_NPTV_DIR)

	@mkdir -p $(BOARDDIR)/module
	@for i in $(MODULE_FILE_LIST); do \
		for j in $(TARGET_ROOT)/$(TARGET_DRIVER)/$$i; do \
			if [ ! -e $$j -a ! -h $$j ]; then \
				echo $$j does not exist, could not do symlink; \
			else \
				FILE_NAME=`basename $$j`; \
				if [ ! -h $(BOARDDIR)/module/$$FILE_NAME ]; then \
					echo "Symlink : $$j $(BOARDDIR)/module/$$FILE_NAME"; \
					$(call if_file_notexist_w_sym_fct, $$j , $(BOARDDIR)/module/$$FILE_NAME ) ; \
				fi; \
			fi; \
		done; \
	done
	@if [ ! -h $(DRV_LIB_DIR)/include/$(MODEL).def ]; then \
		echo "Symlink: $(MODEL).def"; \
		$(call if_file_notexist_w_sym_fct, $(TARGET_ROOT)/drv_opt/$(COMPANY)/$(MODEL).def , $(DRV_LIB_DIR)/include/$(MODEL).def ) ; \
	fi

	$(call if_file_notexist_w_sym_fct, $(BOARDDIR)/../mt53xx_com, $(BOARDDIR)/common);
	$(call if_file_notexist_w_sym_fct, $(DRV_INC_ROOT), $(TARGET_ROOT)/$(TARGET_DRIVER)/drv_inc);

	@cd $(TARGET_ROOT)/$(TARGET_DRIVER) && \
	find $(MODULE_DIR_LIST) -type f -o -type l|grep -v '\.[oa]$$' |grep -v '\.o\.cmd$$' > $(MODULE_DIR_LIST_TXT).tmp

	@if [ ! -e $(MODULE_DIR_LIST_TXT) ]; then \
		touch $(MODULE_DIR_LIST_TXT).need.to.do.link; \
		cp -au $(MODULE_DIR_LIST_TXT).tmp $(MODULE_DIR_LIST_TXT); \
	else \
		if [ "`diff -q $(MODULE_DIR_LIST_TXT).tmp $(MODULE_DIR_LIST_TXT) 2>/dev/null`" != '' ]; then \
			touch $(MODULE_DIR_LIST_TXT).need.to.do.link; \
			cp -au $(MODULE_DIR_LIST_TXT).tmp $(MODULE_DIR_LIST_TXT); \
		fi; \
	fi
	@rm -rf $(MODULE_DIR_LIST_TXT).tmp

	for j in `cd $(TARGET_ROOT)/$(TARGET_DRIVER); find $(MODULE_DIR_LIST) -type f -o -type l|grep -v '\.[oa]$$' |grep -v '\.o\.cmd$$'`; do \
		FILE_NAME=`basename $$j`; \
		DIR_NAME=`dirname $$j`; \
		if [ ! -h $(DRV_LIB_DIR)/$(TARGET_IC)/$$j ]; then \
			echo "Symlink: $$FILE_NAME"; \
			mkdir -p $(DRV_LIB_DIR)/$(TARGET_IC)/$$DIR_NAME; \
			$(call if_file_notexist_w_sym_fct, $(TARGET_ROOT)/$(TARGET_DRIVER)/$$j , $(DRV_LIB_DIR)/$(TARGET_IC)/$$j ) ; \
		fi;\
	done; \
	rm -rf $(MODULE_DIR_LIST_TXT).need.to.do.link; \

	@mkdir -p $(DRVLIB_NPTV_DIR)
	@for i in $(NPTV_DIR_LIST); do \
		cp -rfL  $(TARGET_ROOT)/$(TARGET_DRIVER)/$(TARGET_IC)/nptv/$$i $(DRVLIB_NPTV_DIR); \
	done

	@mkdir -p ./preloader/$(TARGET_IC)
	@for i in $(PRELOADER_FILE_LIST); do \
		FILE_NAME=`basename $$i`; \
		if [ ! -h ./preloader/$(TARGET_IC)/$$FILE_NAME ]; then \
			echo "Symlink: $$FILE_NAME"; \
			$(call if_file_notexist_w_sym_fct, $$i , $(ROOTDIR)/preloader/$(TARGET_IC)/$$FILE_NAME ) ; \
		fi; \
	done

	@if [ ! -h ./preloader/$(TARGET_IC)/preloader_main.c ]; then \
		echo "Symlink: preloader_main.c"; \
		$(call if_file_notexist_w_sym_fct, $(TARGET_ROOT)/preloader/preloader_main.c , $(ROOTDIR)/preloader/$(TARGET_IC)/preloader_main.c ) ; \
	fi

ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5396 mt5368 mt5389))
	$(call nptv_symlink,nptv6896)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5398 mt5880))
	$(call nptv_symlink,nptv8098)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5881))
	$(call nptv_symlink,nptv5881)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5399 mt5882 mt5883))
	$(call nptv_symlink,nptv5399)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC), mt5365 mt5395))
	$(call nptv_symlink,nptv6595)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5890))
	$(call nptv_symlink,nptv8290)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5891))
	$(call nptv_symlink,nptv5891)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5893))
	$(call nptv_symlink,nptv5893)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5895))
	$(call nptv_symlink,nptv5895)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5886))
	$(call nptv_symlink,nptv5886)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5863))
	$(call nptv_symlink,nptv5863)
else
ifeq ($(TARGET_IC), $(filter $(TARGET_IC),mt5865))
	$(call nptv_symlink,nptv5865)
else
	@for i in `cd $(TARGET_ROOT)/$(TARGET_DRIVER)/nptv/inc; find . -type f -o -type l`; do \
		FILE_NAME=`basename $$i`; \
		DIR_NAME=`dirname $$i`; \
		if [ ! -h $(DRVLIB_NPTV_DIR)/inc/$$i ]; then \
			echo "Symlink: $$i"; \
			mkdir -p $(DRVLIB_NPTV_DIR)/inc/$$DIR_NAME; \
			$(call if_file_notexist_w_sym_fct, $(TARGET_ROOT)/$(TARGET_DRIVER)/nptv/inc/$$i , $(DRVLIB_NPTV_DIR)/inc/$$i ) ; \
		fi; \
	done
endif
endif #82
endif #90
endif #81
endif #91
endif #93
endif #95
endif #86
endif #63
endif #98
endif #95
endif #5863

	@echo "BUILD_UBOOT_$@_END_TIME   = `$(DATE) $(DATE_FLAG)`"

mtkloader:

	@echo "BUILD_UBOOT_$@_START_TIME   = `$(DATE) $(DATE_FLAG)`"
	$(MAKE) -f ./mtkloader.mak IC_NAME=$(subst mt,,$(TARGET_IC))
	@echo "BUILD_UBOOT_$@_END_TIME   = `$(DATE) $(DATE_FLAG)`"

clean_mtkloader:
	$(MAKE) -f ./mtkloader.mak IC_NAME=$(subst mt,,$(TARGET_IC)) clean

clean: clean_packing_secure_linux clean_mtkloader
	$(FCLEAN) $(MTKLOADER_OBJ_ROOT) $(UBOOT_OBJ_ROOT)
	rm -rf $(DRV_LIB_DIR)/$(TARGET_IC) $(ROOTDIR)/board/$(TARGET_IC)/drv_lib $(ROOTDIR)/board/$(TARGET_IC)/module $(ROOTDIR)/board/$(TARGET_IC)/common
	rm -rf $(UBOOT_DIR)/board $(UBOOT_DIR)/include/configs/$(TARGET_IC)/drv_cust
	@if [ -e $(SYMLINK_LOG) ] ; then \
		grep $(ROOTDIR) $(SYMLINK_LOG) | xargs rm -rf ; \
	fi
	rm -rf $(ROOTDIR)/*.bin
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/.depend
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/lib*.a
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/*.o
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/*.cmd
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/module/*.o
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/module/*.cmd
	rm -rf $(ROOTDIR)/pack/*.bin
	rm -rf $(ROOTDIR)/pack/.dummy.hdr
	rm -rf $(ROOTDIR)/pack/packimg
	rm -rf $(ROOTDIR)/pack/temp1.sc
	rm -rf $(ROOTDIR)/pack/temp2.sc
	rm -rf $(ROOTDIR)/pack/u-boot_pack.lzhs
	rm -rf $(DRV_LIB_DIR)/include/linux/module.h
	rm -rf $(THIS_ROOT)/bin/* $(THIS_ROOT)/obj/*
	rm -rf $(MODULE_DIR_LIST_TXT)
	rm -rf $(ROOTDIR)/*.bin
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/.depend
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/*.d
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/lib*.a
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/*.o
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/*.cmd
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/module/*.o
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/module/*.cmd
	rm -rf $(ROOTDIR)/pack/*.bin
	rm -rf $(ROOTDIR)/pack/.dummy.hdr
	rm -rf $(ROOTDIR)/pack/packimg
	rm -rf $(ROOTDIR)/pack/temp1.sc
	rm -rf $(ROOTDIR)/pack/temp2.sc
	rm -rf $(ROOTDIR)/pack/u-boot_pack.lzhs
	rm -rf $(DRV_LIB_DIR)/include/linux
	rm -rf $(THIS_ROOT)/bin/* $(THIS_ROOT)/obj/*
	rm -rf $(MODULE_DIR_LIST_TXT)
	rm -rf preloader
	rm -rf $(ROOTDIR)/board/$(TARGET_IC)/module
	rm -rf $(UBOOT_DIR)/include/configs/$(TARGET_IC)
