1# 2# Copyright (c) 2013 The Linux Foundation. All rights reserved. 3# Copyright (C) 2006-2011 OpenWrt.org 4# 5# This is free software, licensed under the GNU General Public License v2. 6# See /LICENSE for more information. 7# 8 9KERNEL_MAKEOPTS := -C $(LINUX_DIR)/sourcecode O=$(LINUX_DIR) 10 11KERNEL_MAKEOPTS += CROSS_COMPILE="$(KERNEL_CROSS)" \ 12 HOSTCFLAGS="$(HOST_CFLAGS) -Wall -Wmissing-prototypes -Wstrict-prototypes" \ 13 ARCH="$(LINUX_KARCH)" \ 14 KBUILD_HAVE_NLS=no \ 15 CONFIG_SHELL="$(BASH)" \ 16 $(if $(findstring c,$(OPENWRT_VERBOSE)),V=1,V='') 17 18ifdef CONFIG_STRIP_KERNEL_EXPORTS 19 KERNEL_MAKEOPTS += \ 20 EXTRA_LDSFLAGS="-I$(KERNEL_BUILD_DIR) -include symtab.h" 21endif 22 23ifdef CONFIG_KERNEL_SPARSE 24 KERNEL_MAKEOPTS += \ 25 C=1 CHECK=$(STAGING_DIR_HOST)/bin/sparse 26endif 27 28# Kernel compiles well in parallel 29# Enable // build if selected in the menuconfig 30ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER)$(MAKE_JOBSERVER),) 31 ifeq ($(MAKE_JOBSERVER),) 32 KERNEL_JFLAG ?= -j1 33 else 34 KERNEL_JFLAG ?= $(MAKE_JOBSERVER) -j 35 endif 36else 37 KERNEL_JFLAG ?= $(if $(CONFIG_PKG_BUILD_JOBS),-j$(CONFIG_PKG_BUILD_JOBS),-j1) 38endif 39 40INITRAMFS_EXTRA_FILES ?= $(GENERIC_PLATFORM_DIR)/image/initramfs-base-files.txt 41 42ifneq (,$(KERNEL_CC)) 43 KERNEL_MAKEOPTS += CC="$(KERNEL_CC)" 44endif 45 46export HOST_EXTRACFLAGS=-I$(STAGING_DIR_HOST)/include 47 48# defined in quilt.mk 49Kernel/Patch:=$(Kernel/Patch/Default) 50define Kernel/Prepare/Default 51 -mkdir -p $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) 52 $(CP) $(GIT_HOME)/linux.git/* $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/ 53 @echo "please syn with dniserver" 54 $(Kernel/Patch) 55endef 56 57ifeq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) 58 ifeq ($(strip $(CONFIG_EXTERNAL_CPIO)),"") 59 define Kernel/SetInitramfs 60 mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old 61 grep -v -e INITRAMFS -e CONFIG_RD_ -e CONFIG_BLK_DEV_INITRD $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config 62 echo 'CONFIG_BLK_DEV_INITRD=y' >> $(LINUX_DIR)/.config 63 echo 'CONFIG_INITRAMFS_SOURCE="$(strip $(TARGET_DIR) $(INITRAMFS_EXTRA_FILES))"' >> $(LINUX_DIR)/.config 64 echo 'CONFIG_INITRAMFS_ROOT_UID=$(shell id -u)' >> $(LINUX_DIR)/.config 65 echo 'CONFIG_INITRAMFS_ROOT_GID=$(shell id -g)' >> $(LINUX_DIR)/.config 66 echo "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_NONE),CONFIG_INITRAMFS_COMPRESSION_NONE=y,# CONFIG_INITRAMFS_COMPRESSION_NONE is not set)" >> $(LINUX_DIR)/.config 67 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 68 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 69 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 70 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 71 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 72 endef 73 else 74 define Kernel/SetInitramfs 75 mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old 76 grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config 77 echo 'CONFIG_INITRAMFS_SOURCE="$(call qstrip,$(CONFIG_EXTERNAL_CPIO))"' >> $(LINUX_DIR)/.config 78 echo 'CONFIG_INITRAMFS_ROOT_UID=$(shell id -u)' >> $(LINUX_DIR)/.config 79 echo 'CONFIG_INITRAMFS_ROOT_GID=$(shell id -g)' >> $(LINUX_DIR)/.config 80 echo "$(if $(CONFIG_TARGET_INITRAMFS_COMPRESSION_NONE),CONFIG_INITRAMFS_COMPRESSION_NONE=y,# CONFIG_INITRAMFS_COMPRESSION_NONE is not set)" >> $(LINUX_DIR)/.config 81 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 82 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 83 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 84 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 85 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 86 endef 87 endif 88else 89 define Kernel/SetInitramfs 90 mv $(LINUX_DIR)/.config $(LINUX_DIR)/.config.old 91 grep -v INITRAMFS $(LINUX_DIR)/.config.old > $(LINUX_DIR)/.config 92 echo 'CONFIG_INITRAMFS_SOURCE=""' >> $(LINUX_DIR)/.config 93 endef 94endif 95 96define Kernel/Configure/Default 97 $(LINUX_CONF_CMD) > $(LINUX_DIR)/.config.target 98# copy CONFIG_KERNEL_* settings over to .config.target 99 awk '/^(#[[:space:]]+)?CONFIG_KERNEL/{sub("CONFIG_KERNEL_","CONFIG_");print}' $(TOPDIR)/.config >> $(LINUX_DIR)/.config.target 100 echo "# CONFIG_KPROBES is not set" >> $(LINUX_DIR)/.config.target 101 $(SCRIPT_DIR)/metadata.pl kconfig $(TMP_DIR)/.packageinfo $(TOPDIR)/.config > $(LINUX_DIR)/.config.override 102 $(SCRIPT_DIR)/kconfig.pl 'm+' '+' $(LINUX_DIR)/.config.target /dev/null $(LINUX_DIR)/.config.override > $(LINUX_DIR)/.config 103 $(call Kernel/SetInitramfs) 104 sed -i "s/# CONFIG_KALLSYMS is not set/CONFIG_KALLSYMS=y/g" $(LINUX_DIR)/.config 105 rm -rf $(KERNEL_BUILD_DIR)/modules 106 [ -d $(LINUX_DIR)/user_headers ] || $(MAKE) $(KERNEL_MAKEOPTS) INSTALL_HDR_PATH=$(LINUX_DIR)/user_headers headers_install 107 $(SH_FUNC) grep '=[ym]' $(LINUX_DIR)/.config | LC_ALL=C sort | md5s > $(LINUX_DIR)/.vermagic 108endef 109 110define Kernel/CompileModules/Default 111 rm -f $(LINUX_DIR)/vmlinux $(LINUX_DIR)/System.map 112 +$(MAKE) $(KERNEL_MAKEOPTS) $(KERNEL_JFLAG) modules 113endef 114 115OBJCOPY_STRIP = -R .reginfo -R .notes -R .note -R .comment -R .mdebug -R .note.gnu.build-id 116 117define Kernel/CompileImage/Default 118 $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),,rm -f $(TARGET_DIR)/init) 119 +$(MAKE) $(KERNEL_MAKEOPTS) $(KERNEL_JFLAG) $(subst ",,$(KERNELNAME)) 120 $(KERNEL_CROSS)objcopy -O binary $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(LINUX_KERNEL) 121 $(KERNEL_CROSS)objcopy $(OBJCOPY_STRIP) -S $(LINUX_DIR)/vmlinux $(KERNEL_BUILD_DIR)/vmlinux.elf 122endef 123 124define Kernel/Clean/Default 125 rm -f $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION)/.configured 126 rm -f $(LINUX_KERNEL) 127 $(_SINGLE)$(MAKE) -C $(KERNEL_BUILD_DIR)/linux-$(LINUX_VERSION) clean 128endef 129 130 131