#!/bin/bash
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.

KERNEL_STRIP=${STRIP_ORI}

skip=0

ModCrypto=" \
	${KernelDir}/crypto/ansi_cprng.ko \
	${KernelDir}/crypto/cbc.ko \
	${KernelDir}/crypto/des_generic.ko \
	${KernelDir}/crypto/ecb.ko \
	${KernelDir}/crypto/hmac.ko \
	${KernelDir}/crypto/md4.ko \
	${KernelDir}/crypto/md5.ko \
	${KernelDir}/crypto/sha1_generic.ko \
	${KernelDir}/crypto/sha256_generic.ko \
	${KernelDir}/crypto/cts.ko \
	"
#FIXME: The modules below should be included when porting is done
#	${KernelDir}/crypto/aead.ko
#	${KernelDir}/crypto/aes_generic.ko
#	${KernelDir}/crypto/chainiv.ko
#	${KernelDir}/crypto/crypto_algapi.ko
#	${KernelDir}/crypto/crypto_blkcipher.ko
#	${KernelDir}/crypto/crypto_hash.ko
#	${KernelDir}/crypto/crypto_wq.ko
#	${KernelDir}/crypto/cryptomgr.ko
#	${KernelDir}/crypto/rng.ko
#	${KernelDir}/crypto/pcompress.ko
#	${KernelDir}/crypto/krng.ko
#	${KernelDir}/crypto/eseqiv.ko

ModFS=" \
	${KernelDir}/fs/fat/fat.ko \
	${KernelDir}/fs/fat/vfat.ko \
	${KernelDir}/lib/zlib_deflate/zlib_deflate.ko \
	${KernelDir}/lib/libcrc32c.ko \
	${KernelDir}/fs/hfsplus/hfsplus.ko \
	${KernelDir}/drivers/md/dm-flakey.ko \
	"
ModEncFS=" \
	${KernelDir}/fs/ecryptfs/ecryptfs.ko \
	"
ModFUSE=" \
	${KernelDir}/fs/fuse/fuse.ko \
	"
ModISOFS=" \
	${KernelDir}/drivers/block/loop.ko \
	${KernelDir}/fs/isofs/isofs.ko \
	${KernelDir}/fs/udf/udf.ko \
	${KernelDir}/lib/crc-itu-t.ko \
	"
Mod2Lan=" \
	${KernelDir}/drivers/net/bonding/bonding.ko \
	"
ModAppleTalk=" \
	${KernelDir}/net/802/psnap.ko \
	${KernelDir}/net/802/p8022.ko \
	${KernelDir}/net/appletalk/appletalk.ko \
	${KernelDir}/net/llc/llc.ko \
	"
ModFirewall=" \
	${KernelDir}/net/ipv4/netfilter/ip_tables.ko \
	${KernelDir}/net/netfilter/xt_REDIRECT.ko \
	${KernelDir}/net/ipv4/netfilter/iptable_filter.ko \
	${KernelDir}/net/ipv4/netfilter/iptable_nat.ko \
	${KernelDir}/net/ipv4/netfilter/nf_conntrack_ipv4.ko \
	${KernelDir}/net/ipv4/netfilter/nf_defrag_ipv4.ko \
	${KernelDir}/net/netfilter/nf_nat.ko \
	${KernelDir}/net/ipv4/netfilter/nf_nat_ipv4.ko \
	${KernelDir}/net/netfilter/nf_conntrack.ko \
	${KernelDir}/net/netfilter/x_tables.ko \
	${KernelDir}/net/netfilter/xt_multiport.ko \
	${KernelDir}/net/netfilter/xt_state.ko \
	${KernelDir}/net/netfilter/xt_tcpudp.ko \
	${KernelDir}/net/netfilter/xt_LOG.ko \
	${KernelDir}/net/netfilter/xt_limit.ko \
	${KernelDir}/net/netfilter/xt_iprange.ko \
	${KernelDir}/net/netfilter/xt_recent.ko \
	${KernelDir}/net/netfilter/nfnetlink.ko \
	${KernelDir}/net/netfilter/nfnetlink_queue.ko \
	${KernelDir}/net/netfilter/ipset/ip_set.ko \
	${KernelDir}/net/netfilter/ipset/ip_set_hash_ip.ko \
	${KernelDir}/net/netfilter/xt_set.ko \
	${KernelDir}/net/netfilter/xt_nat.ko \
	${KernelDir}/net/netfilter/xt_TCPMSS.ko \
	"
ModIPv6FW=" \
	${KernelDir}/net/ipv6/netfilter/ip6_tables.ko \
	${KernelDir}/net/ipv6/netfilter/ip6table_filter.ko \
	${KernelDir}/net/ipv6/netfilter/nf_defrag_ipv6.ko \
	${KernelDir}/net/ipv6/netfilter/nf_conntrack_ipv6.ko \
	${KernelDir}/net/netfilter/xt_LOG.ko \
	"
ModIPv6=" \
	${KernelDir}/net/ipv6/ipv6.ko \
	"
ModIPv6Tun=" \
	${KernelDir}/net/ipv4/ip_tunnel.ko \
	${KernelDir}/net/ipv4/tunnel4.ko \
	${KernelDir}/net/ipv6/sit.ko \
	"
ModNFQ=" \
	${KernelDir}/net/netfilter/nfnetlink.ko \
	${KernelDir}/net/netfilter/nfnetlink_queue.ko \
	${KernelDir}/net/netfilter/xt_NFQUEUE.ko \
	"
ModPPP=" \
	${KernelDir}/drivers/net/ppp/ppp_async.ko \
	${KernelDir}/drivers/net/ppp/ppp_generic.ko \
	${KernelDir}/drivers/net/ppp/ppp_synctty.ko \
	${KernelDir}/drivers/net/ppp/pppox.ko \
	${KernelDir}/drivers/net/ppp/pppoe.ko \
	${KernelDir}/drivers/net/ppp/bsd_comp.ko \
	${KernelDir}/drivers/net/ppp/ppp_deflate.ko \
	${KernelDir}/drivers/net/ppp/ppp_mppe.ko \
	${KernelDir}/drivers/net/ppp/pptp.ko \
	${KernelDir}/net/l2tp/l2tp_core.ko \
	${KernelDir}/net/l2tp/l2tp_ppp.ko \
	${KernelDir}/net/ipv4/gre.ko \
	${KernelDir}/drivers/net/slip/slhc.ko \
	${KernelDir}/drivers/tty/n_hdlc.ko \
	${KernelDir}/lib/crc-ccitt.ko \
	"
ModTunnel=" \
	${KernelDir}/drivers/net/tun.ko \
	"
ModISCSI=" \
	${KernelDir}/lib/libcrc32c.ko \
	${KernelDir}/drivers/scsi/libiscsi.ko \
	${KernelDir}/drivers/scsi/libiscsi_tcp.ko \
	${KernelDir}/drivers/scsi/iscsi_tcp.ko \
	"
ModNFSD=" \
	${KernelDir}/fs/exportfs/exportfs.ko \
	${KernelDir}/fs/nfsd/nfsd.ko \
	${KernelDir}/net/sunrpc/auth_gss/rpcsec_gss_krb5.ko \
	"
ModCIFS=" \
	${KernelDir}/fs/cifs/cifs.ko \
	"
ModQuota=" \
	${KernelDir}/fs/quota/quota_tree.ko \
	${KernelDir}/fs/quota/quota_v2.ko \
	"
ModSCSI=" \
	${KernelDir}/drivers/scsi/sg.ko \
	"
ModSnapshot=" \
	${KernelDir}/drivers/md/dm-snapshot.ko \
	"
ModSound=" \
	${KernelDir}/sound/soundcore.ko \
	"
ModUSBLP=" \
	${KernelDir}/drivers/usb/class/usblp.ko \
	"
ModUSB=" \
	${KernelDir}/drivers/hid/hid.ko \
	${KernelDir}/drivers/hid/hid-generic.ko \
	${KernelDir}/drivers/hid/usbhid/usbhid.ko \
	${ModUSBLP} \
	"
ModUSBIP=" \
	${KernelDir}/drivers/staging/usbip/usbip-host.ko \
	${KernelDir}/drivers/staging/usbip/usbip-core.ko
	"
ModUSBWimax=" \
	${KernelDir}/drivers/net/mii.ko \
	${KernelDir}/drivers/net/usb/usbnet.ko \
	${KernelDir}/drivers/net/usb/cdc_ether.ko \
	"
ModCPUFreq=" \
	${KernelDir}/drivers/cpufreq/freq_table.ko \
	${KernelDir}/drivers/cpufreq/cpufreq_stats.ko \
	"
ModBridge=" \
	${KernelDir}/net/bridge/bridge.ko \
	${KernelDir}/net/802/stp.ko	\
	"
ModTC=" \
	${KernelDir}/net/sched/sch_htb.ko \
	${KernelDir}/net/sched/sch_sfq.ko \
	${KernelDir}/net/sched/cls_fw.ko \
	${KernelDir}/net/sched/sch_netem.ko \
	${KernelDir}/net/netfilter/xt_mark.ko \
	${KernelDir}/net/ipv4/netfilter/iptable_mangle.ko \
	${KernelDir}/net/ipv6/netfilter/ip6table_mangle.ko \
	${KernelDir}/net/sched/cls_u32.ko
	"
ModFwSecurity=" \
	${KernelDir}/net/netfilter/nf_conntrack_proto_gre.ko \
	${KernelDir}/net/netfilter/nf_conntrack_pptp.ko \
	${KernelDir}/net/ipv4/netfilter/nf_nat_proto_gre.ko \
	${KernelDir}/net/ipv4/netfilter/nf_nat_pptp.ko \
	"
ModVlan=" \
	${KernelDir}/net/8021q/8021q.ko \
	"
ModRfkill=" \
    ${KernelDir}/net/rfkill/rfkill.ko \
    "
ModIPsec=" \
	${KernelDir}/crypto/deflate.ko \
	${KernelDir}/crypto/authenc.ko \
	${KernelDir}/crypto/authencesn.ko \
	${KernelDir}/net/ipv4/ah4.ko \
	${KernelDir}/net/ipv4/esp4.ko \
	${KernelDir}/net/ipv4/ipcomp.ko \
	${KernelDir}/net/ipv4/xfrm4_tunnel.ko \
	${KernelDir}/net/ipv4/xfrm4_mode_beet.ko \
	${KernelDir}/net/ipv4/tunnel4.ko \
	${KernelDir}/net/ipv4/xfrm4_mode_transport.ko \
	${KernelDir}/net/ipv4/xfrm4_mode_tunnel.ko \
	${KernelDir}/net/xfrm/xfrm_algo.ko \
	${KernelDir}/net/xfrm/xfrm_user.ko \
	${KernelDir}/net/xfrm/xfrm_ipcomp.ko \
	${KernelDir}/net/ipv6/ah6.ko \
	${KernelDir}/net/ipv6/esp6.ko \
	${KernelDir}/net/ipv6/ipcomp6.ko \
	${KernelDir}/net/ipv6/xfrm6_tunnel.ko \
	${KernelDir}/net/ipv6/tunnel6.ko \
	${KernelDir}/net/ipv6/xfrm6_mode_transport.ko \
	${KernelDir}/net/ipv6/xfrm6_mode_tunnel.ko \
	${KernelDir}/net/ipv6/xfrm6_mode_beet.ko \
	${KernelDir}/net/key/af_key.ko \
	"
ModZram=" \
	${KernelDir}/drivers/staging/zram/zram.ko \
	"
ModAlsa=" \
	${KernelDir}/sound/core/snd-pcm.ko \
	${KernelDir}/sound/usb/snd-usbmidi-lib.ko \
	${KernelDir}/sound/usb/snd-usb-audio.ko \
	${KernelDir}/sound/core/seq/snd-seq-device.ko \
	${KernelDir}/sound/core/snd.ko \
	${KernelDir}/sound/core/snd-hwdep.ko \
	${KernelDir}/sound/core/snd-rawmidi.ko \
	${KernelDir}/sound/core/oss/snd-pcm-oss.ko \
	${KernelDir}/sound/core/oss/snd-mixer-oss.ko \
	${KernelDir}/sound/core/snd-timer.ko \
	${KernelDir}/sound/core/snd-page-alloc.ko \
	${KernelDir}/sound/usb/hiface/snd-usb-hiface.ko \
	"
ModDocker=" \
	${KernelDir}/drivers/net/macvlan.ko \
	${KernelDir}/drivers/net/veth.ko \
	${KernelDir}/net/netfilter/xt_addrtype.ko \
	${KernelDir}/net/netfilter/xt_conntrack.ko \
	${KernelDir}/fs/aufs/aufs.ko \
	"
ModuleList=" \
	${ModCrypto} \
	${ModFS} \
	${ModEncFS} \
	${ModFUSE} \
	${ModISOFS} \
	${Mod2Lan} \
	${ModAppleTalk} \
	${ModFirewall} \
	${ModIPv6FW} \
	${ModIPv6} \
	${ModPPP} \
	${ModTunnel} \
	${ModISCSI} \
	${ModNFSD} \
	${ModCIFS} \
	${ModQuota} \
	${ModSCSI} \
	${ModSnapshot} \
	${ModSound} \
	${ModUSB} \
	${ModUSBIP} \
	${ModUSBWimax} \
	${ModAlsa} \
	${ModDocker} \
	"
##################################################
ModTalitos=" \
	${KernelDir}/crypto/authenc.ko \
	${KernelDir}/drivers/char/hw_random/rng-core.ko \
	${KernelDir}/drivers/crypto/talitos.ko \
	"
ModOCF=" \
	${KernelDir}/crypto/ocf/cryptodev.ko \
	${KernelDir}/crypto/ocf/cryptosoft.ko \
	${KernelDir}/crypto/ocf/ocf.ko \
	"
ModRaid=" \
	${KernelDir}/drivers/md/dm-mod.ko \
	${KernelDir}/drivers/md/linear.ko \
	${KernelDir}/drivers/md/md-mod.ko \
	${KernelDir}/drivers/md/raid0.ko \
	${KernelDir}/drivers/md/raid1.ko \
	${KernelDir}/drivers/md/raid10.ko \
	${KernelDir}/drivers/md/raid456.ko \
	${KernelDir}/lib/raid6/raid6_pq.ko \
	${KernelDir}/crypto/async_tx/async_tx.ko \
	${KernelDir}/crypto/async_tx/async_memcpy.ko \
	${KernelDir}/crypto/async_tx/async_xor.ko \
	${KernelDir}/crypto/async_tx/async_pq.ko \
	${KernelDir}/crypto/async_tx/async_raid6_recov.ko \
	${KernelDir}/crypto/xor.ko \
	"
ModUSBModem=" \
	${KernelDir}/drivers/usb/serial/usb_wwan.ko \
	${KernelDir}/drivers/usb/serial/option.ko \
	${KernelDir}/drivers/usb/class/cdc-acm.ko \
	${KernelDir}/drivers/usb/serial/sierra.ko \
	"
#FIXME: The modules below should be included when porting is done
#	${KernelDir}/drivers/usb/serial/usb_wwan_syno.ko
#	${KernelDir}/drivers/usb/class/cdc-wdm_syno.ko
#	${KernelDir}/drivers/net/usb/qmi_wwan_syno.ko

##################################################

ModUSBserial=" \
	${KernelDir}/drivers/usb/serial/usbserial.ko \
	${KernelDir}/drivers/usb/serial/ftdi_sio.ko \
	"

case "$BUILD_TARGET" in
	ALPINE)
		ModuleList="${ModuleList} ${KernelDir}/net/ipv4/netfilter/ipt_MASQUERADE.ko"
		ModuleList="${ModuleList} ${KernelDir}/lib/zlib_deflate/zlib_deflate.ko"
		ModuleList="${ModuleList} ${KernelDir}/crypto/arc4.ko"
		ModuleList="${ModuleList} ${KernelDir}/crypto/cryptodev-linux/cryptodev.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/i2c/algos/i2c-algo-bit.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/etxhci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/usb-common.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/core/usbcore.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/storage/usb-storage.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/class/cdc-acm.ko"
		ModuleList="${ModuleList} ${ModBridge} ${ModTC} ${ModFwSecurity}"
		ModuleList="${ModuleList} ${ModVlan}"
		ModuleList="${ModuleList} ${ModUSBserial}"
		ModuleList="${ModuleList} ${ModIPsec}"
		ModuleList="${ModuleList} ${ModUSBModem}"
		ModuleList="${ModuleList} ${KernelDir}/net/netfilter/xt_mac.ko"
		ModuleList="${ModuleList} ${ModZram}"
		ModuleList="${ModuleList} ${ModIPv6Tun}"
		ModuleList="${ModuleList} ${ModNFQ}"
		ModuleList="${ModuleList} ${ModOVS}"

		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/cbc.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/hmac.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/sha256_generic.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/authenc.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/authencesn.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/des_generic.ko==g"`
		;;
	STM_MONACO)
		MediaModuleList=`find ${KernelDir}/scripts/DVB/3.10.x -name '*.ko'`
		ModuleList="${ModuleList} ${KernelDir}/net/ipv4/netfilter/ipt_MASQUERADE.ko"
		ModuleList="${ModuleList} ${KernelDir}/lib/zlib_deflate/zlib_deflate.ko"
		ModuleList="${ModuleList} ${KernelDir}/crypto/arc4.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/usb-common.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/core/usbcore.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ohci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/xhci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-pci.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/st-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-platform.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/storage/usb-storage.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/dwc3/dwc3.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/dwc3/dwc3-st.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/phy/phy-stih407-usb.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/phy/phy-st-usb3.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/class/cdc-acm.ko"
		ModuleList="${ModuleList} ${ModBridge} ${ModTC} ${ModFwSecurity}"
		ModuleList="${ModuleList} ${ModVlan}"
		ModuleList="${ModuleList} ${ModUSBserial}"
		ModuleList="${ModuleList} ${ModIPsec}"
		ModuleList="${ModuleList} ${ModUSBModem}"
		ModuleList="${ModuleList} ${KernelDir}/net/netfilter/xt_mac.ko"
		ModuleList="${ModuleList} ${ModNetlink}"
		ModuleList="${ModuleList} ${ModIPv6Tun}"
		ModuleList="${ModuleList} ${ModNFQ}"

		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/net/mii.ko==g"`
		;;
	MARVELL_ARMADA38X)
		ModuleList="${ModuleList} ${KernelDir}/net/ipv4/netfilter/ipt_MASQUERADE.ko"
		ModuleList="${ModuleList} ${KernelDir}/lib/zlib_deflate/zlib_deflate.ko"
		ModuleList="${ModuleList} ${KernelDir}/crypto/arc4.ko"
		ModuleList="${ModuleList} ${KernelDir}/crypto/ocf/cryptodev.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/i2c/algos/i2c-algo-bit.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/usb-common.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/core/usbcore.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-pci.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-orion.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/xhci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/storage/usb-storage.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/class/cdc-acm.ko"
		ModuleList="${ModuleList} ${ModBridge} ${ModTC} ${ModFwSecurity}"
		ModuleList="${ModuleList} ${ModVlan}"
		ModuleList="${ModuleList} ${ModUSBserial}"
		ModuleList="${ModuleList} ${ModIPsec}"
		ModuleList="${ModuleList} ${ModUSBModem}"
		ModuleList="${ModuleList} ${KernelDir}/net/netfilter/xt_mac.ko"
		ModuleList="${ModuleList} ${ModIPv6Tun}"
		ModuleList="${ModuleList} ${ModNFQ}"

		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/cbc.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/hmac.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/sha256_generic.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/authenc.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/authencesn.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/des_generic.ko==g"`
		ModuleList=`echo ${ModuleList} | sed -e "s=${KernelDir}/lib/libcrc32c.ko==g"`
		;;
	HISILICON_HI3536)
		ModuleList="${ModuleList} ${KernelDir}/net/ipv4/netfilter/ipt_MASQUERADE.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/usb-common.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/core/usbcore.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ehci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/ohci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/xhci-hcd.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/hiusb-ehci-hi3536.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/host/hiusb-xhci-hi3536.ko"
		ModuleList="${ModuleList} ${KernelDir}/drivers/usb/storage/usb-storage.ko"
		ModuleList="${ModuleList} ${ModBridge} ${ModTC} ${ModFwSecurity}"
		ModuleList="${ModuleList} ${ModVlan}"
		ModuleList="${ModuleList} ${ModUSBserial}"
		ModuleList="${ModuleList} ${ModIPsec}"
		ModuleList="${ModuleList} ${ModUSBModem}"
		ModuleList="${ModuleList} ${KernelDir}/net/netfilter/xt_mac.ko"
		ModuleList="${ModuleList} ${ModIPv6Tun}"
		ModuleList="${ModuleList} ${ModNFQ}"

		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/deflate.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/md5.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/crypto/sha1_generic.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/net/mii.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/scsi/iscsi_tcp.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/scsi/libiscsi.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/scsi/libiscsi_tcp.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/tty/n_hdlc.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/lib/zlib_deflate/zlib_deflate.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/lib/libcrc32c.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv6/ipv6.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/fs/ecryptfs/ecryptfs.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/lib/crc-itu-t.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/xt_REDIRECT.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/iptable_nat.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/nf_conntrack_ipv4.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/nf_defrag_ipv4.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/nf_nat.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/nf_nat_ipv4.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/nf_conntrack.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/xt_state.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/xt_nat.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv6/netfilter/nf_defrag_ipv6.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv6/netfilter/nf_conntrack_ipv6.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/scsi/sg.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/soundcore.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/usb/class/usblp.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/staging/usbip/usbip-host.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/staging/usbip/usbip-core.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/net/usb/usbnet.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/drivers/net/usb/cdc_ether.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd-pcm.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/usb/snd-usbmidi-lib.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/usb/snd-usb-audio.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/seq/snd-seq-device.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd-hwdep.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd-rawmidi.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/oss/snd-pcm-oss.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/oss/snd-mixer-oss.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd-timer.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/core/snd-page-alloc.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/sound/usb/hiface/snd-usb-hiface.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/xt_conntrack.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/fs/aufs/aufs.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/ipt_MASQUERADE.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/sched/sch_htb.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/sched/sch_sfq.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/sched/cls_fw.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/sched/sch_netem.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/sched/cls_u32.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/nf_conntrack_proto_gre.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/netfilter/nf_conntrack_pptp.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/nf_nat_proto_gre.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/ipv4/netfilter/nf_nat_pptp.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/xfrm/xfrm_algo.ko==g")
		ModuleList=$(echo ${ModuleList} | sed -e "s=${KernelDir}/net/key/af_key.ko==g")
		;;
	*)
		SkipThisProject
		return
		;;
esac

rm -f ${ImageDir}/modules/*
mkdir -p ${DebDevBuild}/image/modules

# Check if modules are built correctly
for EACHFILE in ${ModuleList};
do
	if [ -f "${EACHFILE}" ]; then
		cp -f ${EACHFILE} ${DebDevBuild}/image/modules
		FN=$(basename ${EACHFILE})
		echo "${KERNEL_STRIP} -d ${DebDevBuild}/image/modules/${FN}"
		${KERNEL_STRIP} -d ${DebDevBuild}/image/modules/${FN}
		ls -l ${EACHFILE}
	else
		echo "Error! file ${EACHFILE} does not existed!"
	fi
done

case "$BUILD_TARGET" in
	STM_MONACO)
		mkdir -p ${DebDevBuild}/image/modules/backports_dvb/
		cp -f ${MediaModuleList} ${DebDevBuild}/image/modules/backports_dvb/
		;;
esac

skip=0
case ${BUILD_TARGET} in
	ALPINE|STM_MONACO|MARVELL_ARMADA38X|HISILICON_HI3536)
		ZIMAGE="${KernelDir}/arch/arm/boot/uImage"
		;;
	*)
		skip=1
		;;
esac

KernelDirBase=$(basename ${KernelDir})
CurDirBase=$(basename $(pwd))
if [ "${KernelDirBase}" != "${CurDirBase}" ]; then
	skip=1
fi

if [ ${skip} -eq 1 ]; then
	SkipThisProject
	return
fi

if [ -r "${ZIMAGE}" ]; then
	cp -fv ${ZIMAGE} ${DebDevBuild}/image/zImage
else
	echo "${ZIMAGE} does not exist...."
	exit 1
fi

SystemMap="${KernelDir}/System.map"
VmLinux="${KernelDir}/vmlinux"

mkdir -p ${DebDevBuild}/image/synodebug

if [ -r "${SystemMap}" ]; then
	cp -fv ${SystemMap} ${DebDevBuild}/image/synodebug/
fi
if [ -r "${VmLinux}" ]; then
	cp -fv ${VmLinux} ${DebDevBuild}/image/synodebug/
	gzip -f9 ${DebDevBuild}/image/synodebug/vmlinux
fi

install -Dm755 "scripts/sign-file" "${DebDevBuild}/usr/syno/bin/sign-file"

# shellcheck source=/dev/null
source "$ScriptsDir/include/kernel-devel"

install -Dm644 "include/linux/syno_gpio.h" "$WRKDIR/include/linux/syno_gpio.h"

# FIXME: we put the file with different path here
case "${BUILD_TARGET}" in
	ALPINE|STM_MONACO)
		cryptodev_h="crypto/cryptodev-linux/crypto/cryptodev.h"
		;;
	MARVELL_ARMADA38X)
		cryptodev_h="crypto/ocf/cryptodev.h"
		;;
	*)
		;;
esac

[ -n "$cryptodev_h" ] && install -Dm644 "$cryptodev_h" "$DebDevDir/$IncludeDir/crypto/cryptodev.h"
