summaryrefslogtreecommitdiff
path: root/core/mk/linux.mk
diff options
context:
space:
mode:
Diffstat (limited to 'core/mk/linux.mk')
-rw-r--r--core/mk/linux.mk138
1 files changed, 138 insertions, 0 deletions
diff --git a/core/mk/linux.mk b/core/mk/linux.mk
new file mode 100644
index 0000000..b9a08ff
--- /dev/null
+++ b/core/mk/linux.mk
@@ -0,0 +1,138 @@
+#################################################################################
+# Embtoolkit
+# Copyright(C) 2009-2014 Abdoulaye Walsimou GAYE.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# 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 the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+################################################################################
+#
+# \file linux.mk
+# \brief linux.mk of Embtoolkit
+# \author Abdoulaye Walsimou GAYE <awg@embtoolkit.org>
+# \date May 2009
+################################################################################
+
+__LINUX_SITE_BASE = http://ftp.kernel.org/pub/linux/kernel
+__LINUX_SITE_LONGTERM = $(strip $(if $(LINUX_LONGTERMV), \
+ /longterm/$(LINUX_LONGTERMV)))
+__LINUX_SITE = $(strip $(if $(CONFIG_EMBTK_LINUX_HAVE_MIRROR), \
+ $(patsubst '"',,$(strip $(CONFIG_EMBTK_LINUX_HAVE_MIRROR_SITE))), \
+ $(__LINUX_SITE_BASE)/$(LINUX_MAJORV)$(__LINUX_SITE_LONGTERM)))
+
+LINUX_NAME := linux
+LINUX_MAJORV := $(call embtk_get_pkgversion,linux_major)
+LINUX_LONGTERMV := $(call embtk_get_pkgversion,linux_longterm)
+LINUX_VERSION := $(call embtk_get_pkgversion,linux)
+LINUX_SITE := $(call __LINUX_SITE)
+LINUX_PACKAGE := linux-$(LINUX_VERSION).tar.xz
+LINUX_SRC_DIR := $(embtk_toolsb)/linux-$(LINUX_VERSION)
+LINUX_BUILD_DIR := $(embtk_toolsb)/linux-$(LINUX_VERSION)
+LINUX_KEEP_SRC_DIR := $(CONFIG_EMBTK_BUILD_LINUX_KERNEL)
+
+LINUX_HEADERS_NAME := linux_headers
+LINUX_HEADERS_VERSION := $(LINUX_VERSION)
+LINUX_HEADERS_SITE := $(LINUX_SITE)
+LINUX_HEADERS_PACKAGE := $(LINUX_PACKAGE)
+LINUX_HEADERS_SRC_DIR := $(LINUX_SRC_DIR)
+LINUX_HEADERS_BUILD_DIR := $(LINUX_BUILD_DIR)
+LINUX_HEADERS_KCONFIGS_NAME := LINUX
+LINUX_HEADERS_KEEP_SRC_DIR := $(CONFIG_EMBTK_BUILD_LINUX_KERNEL)
+
+LINUX_MAKE_OPTS := quiet=quiet_
+LINUX_MAKE_OPTS += ARCH=$(LINUX_ARCH)
+LINUX_MAKE_OPTS += CROSS_COMPILE=$(CROSS_COMPILE_CACHED)
+LINUX_MAKE_OPTS += HOSTCC="$(HOSTCC)" HOSTCXX="$(HOSTCXX)"
+
+define __embtk_install_linux_headers
+ $(call embtk_pinfo,"Installing linux-$(LINUX_VERSION) headers...")
+ $(call embtk_download_pkg,linux)
+ $(call embtk_decompress_pkg,linux)
+ $(MAKE) -C $(LINUX_BUILD_DIR) $(LINUX_MAKE_OPTS) \
+ INSTALL_HDR_PATH=$(embtk_sysroot)/usr headers_install
+ $(call __embtk_setinstalled_pkg,linux_headers)
+ $(call __embtk_pkg_gen_dotkconfig_f,linux_headers)
+ $(eval __embtk_linux_headers_installed := y)
+endef
+define embtk_install_linux_headers
+ $(if $(call __embtk_pkg_runrecipe-y,linux_headers),$(__embtk_install_linux_headers))
+endef
+
+#
+# linux install macros
+#
+
+__embtk_linux_dotconfig_f := $(call __embtk_mk_uquote,$(CONFIG_EMBTK_LINUX_DOTCONFIG))
+__embtk_linux_srcdir := $(call __embtk_mk_uquote,$(or $(CONFIG_EMBTK_LINUX_BUILD_EXTSRC),$(LINUX_SRC_DIR)))
+__embtk_linux_support_modules := $(shell grep MODULES=y "$(__embtk_linux_dotconfig_f)" 2>/dev/null)
+
+define __embtk_install_linux_check_config
+ if [ "x" = "x$(__embtk_linux_dotconfig_f)" ]; then \
+ $(call embtk_perror,"Unable to build linux kernel image: no config file");\
+ exit 1; \
+ fi
+ if [ ! -e $(__embtk_linux_dotconfig_f) ]; then \
+ $(call embtk_perror,"Unable to build linux kernel image: config file $(__embtk_linux_dotconfig_f) not found");\
+ exit 1; \
+ fi
+endef
+
+define __embtk_install_linux_check_extsrc
+ if [ "x" = "x$(__embtk_linux_srcdir)" ]; then \
+ $(call embtk_perror,"Unable to build linux kernel image: External source tree not specified");\
+ exit 1; \
+ fi
+ if [ ! -d $(__embtk_linux_srcdir) ]; then \
+ $(call embtk_perror,"Unable to build linux kernel image: External source tree $(__embtk_linux_srcdir) not found");\
+ exit 1; \
+ fi
+endef
+
+define __embtk_install_linux
+ $(call embtk_pinfo,"Generating linux kernel image...")
+ $(__embtk_install_linux_check_config)
+ $(if $(CONFIG_EMBTK_LINUX_BUILD_USE_EXTSRC),
+ $(__embtk_install_linux_check_extsrc))
+ $(if $(CONFIG_EMBTK_LINUX_BUILD_TOOLCHAIN_SRC),
+ $(call embtk_download_pkg,linux)
+ $(call embtk_decompress_pkg,linux))
+ $(MAKE) -C $(__embtk_linux_srcdir) $(LINUX_MAKE_OPTS) distclean
+ cp $(CONFIG_EMBTK_LINUX_DOTCONFIG) $(__embtk_linux_srcdir)/.config
+ $(MAKE) -C $(__embtk_linux_srcdir) $(LINUX_MAKE_OPTS) silentoldconfig
+ $(MAKE) -C $(__embtk_linux_srcdir) $(LINUX_MAKE_OPTS) $(J)
+ $(call __embtk_setinstalled_pkg,linux)
+ $(call __embtk_pkg_gen_dotkconfig_f,linux)
+ $(eval __embtk_linux_installed := y)
+endef
+
+define embtk_install_linux
+ $(if $(call __embtk_pkg_runrecipe-y,linux),$(__embtk_install_linux))
+ $(if $(__embtk_linux_support_modules),$(embtk_postinstall_linux))
+endef
+
+define embtk_postinstall_linux
+ $(call embtk_pinfo,"Install linux kernel modules...")
+ $(MAKE) -C $(__embtk_linux_srcdir) $(LINUX_MAKE_OPTS) \
+ INSTALL_MOD_PATH=$(embtk_rootfs) modules_install
+endef
+
+#
+# clean target and macros
+#
+define embtk_cleanup_linux
+ [ -d $(LINUX_BUILD_DIR) ] && $(call __embtk_unsetinstalled_pkg,linux) ||:
+endef
+
+define embtk_cleanup_linux_headers
+ [ -d $(LINUX_BUILD_DIR) ] && $(call __embtk_unsetinstalled_pkg,linux_headers) ||:
+endef