IMAGE = $(IMAGEDIR)/$(USER)_uImage
MODEL = ap906


CUR_DIR = $(shell pwd)
UGW_DIR = $(ROOTDIR)/$(UGW_FOLDER_NAME)
UGW_OPENWRT_DIR = $(UGW_DIR)/openwrt
INCLUDE_DIR = $(UGW_OPENWRT_DIR)/include
TARGET_DIR = $(ROMFSDIR)
#TARGET_DIR=$(UGW_OPENWRT_DIR)/source/root-intel_mips
#TARGET_DIR_2=$(UGW_OPENWRT_DIR)/source/target-dir
#TARGET_DIR_2=$(UGW_OPENWRT_DIR)/source/target-dir-929dc63e
TARGET_DIR_2 = $(ROMFSDIR)
#UGW_OPENWRT_ROOT_FS_DIR = $(UGW_OPENWRT_DIR)/source/root-intel_mips
UGW_OPENWRT_ROOT_FS_DIR=$(UGW_OPENWRT_DIR)/source/target-dir
#UGW_OPENWRT_ROOT_FS_DIR=$(UGW_OPENWRT_DIR)/source/target-dir-929dc63e
UGW_OPENWRT_TARGET_IMAGE_DIR = $(UGW_OPENWRT_DIR)/target/linux/intel_mips/image
UGW_OPENWRT_TARGET_DTS_DIR = $(UGW_OPENWRT_DIR)/target/linux/intel_mips/dts
TMP_DIR = $(UGW_OPENWRT_DIR)/tmp

CP = cp -fpR
FIND = find
XARGS = xargs -r
INSTALL_DIR = install -d -m0755
BASH = bash
MAKE = make

BOARD = intel_mips
SUBTARGET = xrx500
BUILD_SUFFIX = axepoint_gw_sec

## .config is from UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/.config
-include $(UGW_OPENWRT_DIR)/.config

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/include/rules.mk
TOPDIR = $(UGW_OPENWRT_DIR)
OUTPUT_DIR = $(TOPDIR)/bin
BIN_DIR = $(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET)$(if $(BUILD_SUFFIX),/$(BUILD_SUFFIX))
SCRIPT_DIR = $(UGW_OPENWRT_DIR)/scripts
SH_FUNC = $(UGW_OPENWRT_DIR)/include/shell.sh
STAGING_DIR_HOST = $(UGW_OPENWRT_DIR)/staging_dir/host
HOST_CPPFLAGS = -I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include)
HOST_CFLAGS = -O2 $(HOST_CPPFLAGS)
STAGING_DIR_HOST_BIN = $(STAGING_DIR_HOST)/bin

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/include/target.mk
GENERIC_PLATFORM_DIR := $(UGW_OPENWRT_DIR)/target/linux/generic

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/kernel.mk
KERNEL_CC = $(CC)
KERNEL_CROSS = $(CROSS_COMPILE)
TARGET_CROSS = $(CROSS_COMPILE)
KERNEL_BUILD_DIR = $(UGW_OPENWRT_DIR)/build_dir/target-mips_24kc+nomips16_musl_axepoint_gw_sec/linux-$(BOARD)$(if $(SUBTARGET),_$(SUBTARGET))
LINUX_VERSION = 4.9.218

LINUX_DIR = $(ROOTDIR)/linux-$(LINUX_VERSION)
LINUX_KARCH = mips
LINUX_KERNEL = $(KERNEL_BUILD_DIR)/vmlinux

KERNELNAME =
LINUX_CONF_CMD = $(UGW_OPENWRT_DIR)/scripts/kconfig.pl  + + $(UGW_OPENWRT_DIR)/target/linux/generic/config-4.9 $(UGW_OPENWRT_DIR)/target/linux/intel_mips/config-4.9 $(UGW_OPENWRT_DIR)/target/linux/intel_mips/xrx500/config-default 

KERNEL_PATCHVER = 4.9
IMAGES_DIR = 

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/include/kernel.mk
KERNEL_MAKE = $(MAKE) -j $(BUILD_SDK_NCPU) $(KERNEL_MAKEOPTS)

KERNEL_MAKE_FLAGS = \
	HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \
	CROSS_COMPILE="$(KERNEL_CROSS)" \
	ARCH="$(LINUX_KARCH)" \
	KBUILD_HAVE_NLS=no \
	CONFIG_DEBUG_SECTION_MISMATCH=y \
	KBUILD_BUILD_USER="$(call qstrip,$(CONFIG_KERNEL_BUILD_USER))" \
	KBUILD_BUILD_HOST="$(call qstrip,$(CONFIG_KERNEL_BUILD_DOMAIN))" \
	KBUILD_BUILD_TIMESTAMP="$(KBUILD_BUILD_TIMESTAMP)" \
	KBUILD_BUILD_VERSION="0" \
	HOST_LOADLIBES="-L$(STAGING_DIR_HOST)/lib" \
	KBUILD_HOSTLDLIBS="-L$(STAGING_DIR_HOST)/lib" \
	CONFIG_SHELL="$(BASH)" \
	$(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') \
	$(if $(PKG_BUILD_ID),LDFLAGS_MODULE=--build-id=0x$(PKG_BUILD_ID)) \
	cmd_syscalls=

KERNEL_MAKEOPTS := -C $(LINUX_DIR) $(KERNEL_MAKE_FLAGS)

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/include/kernel-defaults.mk
INITRAMFS_EXTRA_FILES ?= $(GENERIC_PLATFORM_DIR)/image/initramfs-base-files.txt

ifneq (,$(KERNEL_CC))
  KERNEL_MAKEOPTS += CC="$(KERNEL_CC)"
endif

ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y)
  ifeq ($(strip $(CONFIG_EXTERNAL_CPIO)),"")
    define Kernel/SetInitramfs/PreConfigure
	grep -v -e INITRAMFS -e CONFIG_RD_ -e CONFIG_BLK_DEV_INITRD $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
	echo 'CONFIG_BLK_DEV_INITRD=y' >> $(LINUX_DIR)/.config
	echo 'CONFIG_INITRAMFS_SOURCE="$(strip $(TARGET_DIR) $(INITRAMFS_EXTRA_FILES))"' >> $(LINUX_DIR)/.config
    endef
  else
    define Kernel/SetInitramfs/PreConfigure
	grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config
	echo 'CONFIG_INITRAMFS_SOURCE="$(call qstrip,$(CONFIG_EXTERNAL_CPIO))"' >> $(LINUX_DIR)/.config
    endef
  endif

  define Kernel/SetInitramfs
	rm -f $(LINUX_DIR)/.config.prev
	mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old
	$(call Kernel/SetInitramfs/PreConfigure)
	echo 'CONFIG_INITRAMFS_ROOT_UID=$(shell id -u)' >> $(LINUX_DIR)/.config
	echo 'CONFIG_INITRAMFS_ROOT_GID=$(shell id -g)' >> $(LINUX_DIR)/.config
	echo "$(if $(CONFIG_TARGET_INITRAMFS_FORCE),CONFIG_INITRAMFS_FORCE=y,# CONFIG_INITRAMFS_FORCE is not set)" >> $(LINUX_DIR)/.config
	echo "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_NONE),CONFIG_INITRAMFS_COMPRESSION_NONE=y,# CONFIG_INITRAMFS_COMPRESSION_NONE is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_GZIP),CONFIG_INITRAMFS_COMPRESSION_GZIP=y\nCONFIG_RD_GZIP=y,# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set\n# CONFIG_RD_GZIP is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_BZIP2),CONFIG_INITRAMFS_COMPRESSION_BZIP2=y\nCONFIG_RD_BZIP2=y,# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set\n# CONFIG_RD_BZIP2 is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZMA),CONFIG_INITRAMFS_COMPRESSION_LZMA=y\nCONFIG_RD_LZMA=y,# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set\n# CONFIG_RD_LZMA is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZO),CONFIG_INITRAMFS_COMPRESSION_LZO=y\nCONFIG_RD_LZO=y,# CONFIG_INITRAMFS_COMPRESSION_LZO is not set\n# CONFIG_RD_LZO is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_XZ),CONFIG_INITRAMFS_COMPRESSION_XZ=y\nCONFIG_RD_XZ=y,# CONFIG_INITRAMFS_COMPRESSION_XZ is not set\n# CONFIG_RD_XZ is not set)" >> $(LINUX_DIR)/.config
	echo -e "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_LZ4),CONFIG_INITRAMFS_COMPRESSION_LZ4=y\nCONFIG_RD_LZ4=y,# CONFIG_INITRAMFS_COMPRESSION_LZ4 is not set\n# CONFIG_RD_LZ4 is not set)" >> $(LINUX_DIR)/.config
  endef
else
endif

define Kernel/SetNoInitramfs
	mv $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.old
	grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config.set
	echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config.set
	echo '# CONFIG_INITRAMFS_FORCE is not set' >> $(LINUX_DIR)/.config.set
endef

define Kernel/Configure/Default
	rm -f $(LINUX_DIR)/localversion
	$(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target
# copy CONFIG_KERNEL_* settings over to .config.target
	awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(TOPDIR)/.config >> $(LINUX_DIR)/.config.target
	echo "# CONFIG_KALLSYMS_EXTRA_PASS is not set" >> $(LINUX_DIR)/.config.target
	echo "# CONFIG_KALLSYMS_ALL is not set" >> $(LINUX_DIR)/.config.target
	echo "CONFIG_KALLSYMS_UNCOMPRESSED=y" >> $(LINUX_DIR)/.config.target
	$(SCRIPT_DIR)/package-metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config $(KERNEL_PATCHVER) > $(LINUX_DIR)/.config.override
	$(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config.set
	$(call Kernel/SetNoInitramfs)
	rm -rf $(KERNEL_BUILD_DIR)/modules
	cmp -s $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev || { \
		cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config; \
		cp $(LINUX_DIR)/.config.set $(LINUX_DIR)/.config.prev; \
	}
	$(_SINGLE) [ -d $(LINUX_DIR)/user_headers ] || $(KERNEL_MAKE) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install
	grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(STAGING_DIR_HOST_BIN)/mkhash md5 > $(LINUX_DIR)/.vermagic
endef

define Kernel/Configure/Initramfs
	$(call Kernel/SetInitramfs)
endef

OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id

define Kernel/CopyImage
	cmp -s $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).debug || { \
		$(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL)$(1); \
		$(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).elf; \
		$(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux$(1).debug; \
		$(foreach k, \
			$(if $(KERNEL_IMAGES),$(KERNEL_IMAGES),$(filter-out vmlinux dtbs,$(KERNELNAME))), \
			$(CP) $(LINUX_DIR)/arch/$(LINUX_KARCH)/boot/$(IMAGES_DIR)/$(k) $(KERNEL_BUILD_DIR)/$(k)$(1); \
		) \
	}
endef

define Kernel/CompileImage/Default
	rm -f $(TARGET_DIR)/init
	$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules;\
	$(call Kernel/CopyImage)
endef

ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
define Kernel/CompileImage/Initramfs
	$(call Kernel/Configure/Initramfs)
	$(CP) $(GENERIC_PLATFORM_DIR)/other-files/init $(TARGET_DIR)/init
	rm -rf $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/usr/initramfs_data.cpio*
	+$(KERNEL_MAKE) $(if $(KERNELNAME),$(KERNELNAME),all) modules
	$(call Kernel/CopyImage,-initramfs)
endef
else
define Kernel/CompileImage/Initramfs
endef
endif

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/include/kernel-build.mk
define Kernel/Configure
	$(call Kernel/Configure/Default)
endef

define Kernel/CompileImage
	$(call Kernel/CompileImage/Default)
	$(call Kernel/CompileImage/Initramfs)
endef

ifdef CONFIG_COLLECT_KERNEL_DEBUG
  define Kernel/CollectDebug
	rm -rf $(KERNEL_BUILD_DIR)/debug
	mkdir -p $(KERNEL_BUILD_DIR)/debug/modules
	$(CP) $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/debug/
	-$(CP) \
		$(STAGING_DIR_ROOT)/lib/modules/$(LINUX_VERSION)/* \
		$(KERNEL_BUILD_DIR)/debug/modules/
	$(FIND) $(KERNEL_BUILD_DIR)/debug -type f | $(XARGS) $(KERNEL_CROSS)strip --only-keep-debug
	$(TAR) c -C $(KERNEL_BUILD_DIR) debug \
		$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
		| bzip2 -c -9 > $(BIN_DIR)/kernel-debug.tar.bz2
  endef
endif

define BuildKernel
	$(call Kernel/Configure)
	$(call Kernel/CompileImage)
	$(call Kernel/CollectDebug)
	touch $(LINUX_DIR)/.image
endef

## UGW-8.4.2.60-SW-CD/ugw_sw/openwrt/target/linux/intel_mips/image/Makefile
include $(UGW_OPENWRT_DIR)/target/linux/intel_mips/image/Makefile

ROMFS_DIRS = \
	bin \
	dev \
	home \
	etc etc/modules.d etc/hotplug.d \
	etc_ro etc_ro/web \
	etc_ro/wlan etc_ro/Wireless etc_ro/xml \
	etc_ro/lighttpd \
	etc_ro/linuxigd etc_ro/Wireless/RT2860AP \
	lib lib/modules lib/ipsec lib/firmware \
	mnt \
	proc \
	rom \
	root \
	sbin \
	sys \
	tmp \
	usr usr/bin usr/sbin usr/codepages usr/share usr/lib \
	overlay srv
	
clean:
	rm -rf $(KERNEL_BUILD_DIR)/*
	rm -rf $(BIN_DIR)/$(FULL_IMAGE_NAME)

romfs:
	[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)
	for i in $(ROMFS_DIRS); do \
		[ -d $(ROMFSDIR)/$$i ] || mkdir -p $(ROMFSDIR)/$$i; \
	done
	-ln -sf tmp $(ROMFSDIR)/var
	
	$(CP) $(UGW_OPENWRT_ROOT_FS_DIR)/* $(ROMFSDIR)
	
	$(ROMFSINST) /etc_ro/Wireless/RT2860AP/RT2860_default_vlan_$(MODEL)
	mv $(ROMFSDIR)/etc_ro/Wireless/RT2860AP/RT2860_default_vlan_$(MODEL) $(ROMFSDIR)/etc_ro/Wireless/RT2860AP/RT2860_default_vlan

	if [ ! -d $(UGW_OPENWRT_DIR)/build_dir ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/build_dir/target-mips_24kc+nomips16_musl_axepoint_gw_sec/linux-intel_mips_xrx500; \
	fi
	if [ ! -d $(UGW_OPENWRT_DIR)/bin ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/bin/targets/intel_mips/xrx500/axepoint_gw_sec; \
	fi
	
	# fix sudo cmd error
	-chmod 644 $(ROMFSDIR)/usr/lib/sudo/sudoers.so

romfs.post::
	[ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
	
image:
	if [ ! -d $(UGW_OPENWRT_DIR)/build_dir ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/build_dir/target-mips_24kc+nomips16_musl_axepoint_gw_sec/linux-intel_mips_xrx500; \
	fi
	if [ ! -d $(UGW_OPENWRT_DIR)/bin ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/bin/targets/intel_mips/xrx500/axepoint_gw_sec; \
	fi

	$(call BuildImageAlt)
	
	cp $(BIN_DIR)/$(FULL_IMAGE_NAME) $(IMAGE)
	#cp $(BIN_DIR)/$(FULL_IMAGE_NAME) $(BIN_DIR)/fullimage.img
	
vendor_kernel:
	if [ ! -d $(UGW_OPENWRT_DIR)/build_dir ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/build_dir/target-mips_24kc+nomips16_musl_axepoint_gw_sec/linux-intel_mips_xrx500; \
	fi
	if [ ! -d $(UGW_OPENWRT_DIR)/bin ]; then \
		mkdir -p $(UGW_OPENWRT_DIR)/bin/targets/intel_mips/xrx500/axepoint_gw_sec; \
	fi
	
	$(call BuildKernel)
	
vendor_kernel_config:
	$(call Kernel/Configure)