################################################################################ # Embtoolkit # Copyright(C) 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 . # ################################################################################ # # \file include.mk # \brief include.mk of Embtoolkit # \author Abdoulaye Walsimou GAYE # \date January 2014 ################################################################################ # # Macros to include a package in the build system # $(1): pkgname => pkgname/pkgname.mk should exist (required) # $(2): kconfig: package specific kconfig symbol name used in .kconfig # This parameter is optional. define embtk_include_pkg $(eval $(call __embtk_include_pkg,$(1),$(2))) endef define __embtk_include_pkg $(eval __embtk_inc_pkgname := $(or $(2),$(PKGV))) $(eval __embtk_incmk := $(embtk_pkgincdir)/$(pkgv)/$(pkgv).mk) $(eval __embtk_incinstalled-y := $(if $(wildcard $(__embtk_pkg_dotinstalled_f)),y)) $(eval __embtk_incenabled-y := $(CONFIG_EMBTK_HAVE_$(__embtk_inc_pkgname))) $(eval __embtk_incmk-y := $(if $(__embtk_incenabled-y)$(__embtk_incinstalled-y),y)) # Is it necessary to include the .mk file? $(eval __embtk_incmk-y := $(if $(findstring $(__embtk_incmk),$(MAKEFILE_LIST)),,$(__embtk_incmk-y))) ifeq (x$(__embtk_incmk-y),xy) include $(__embtk_incmk) endif ifeq (x$(__embtk_incenabled-y),xy) ROOTFS_COMPONENTS-y += $(pkgv)_install # also include old package kconfig entries if any -include $(__embtk_pkg_dotkconfig_f) else ifeq (x$(__embtk_incinstalled-y),xy) ROOTFS_COMPONENTS- += $(pkgv)_install endif # Preset build system installed variable for this packages, if installed ifeq (x$(__embtk_incinstalled-y),xy) __embtk_$(pkgv)_installed = y else __embtk_$(pkgv)_installed = endif # preset some variables $(eval __embtk_$(pkgv)_category := $(call __embtk_mk_uquote,$(or $(CONFIG_EMBTK_$(PKGV)_REFSPEC),$(CONFIG_EMBTK_$(PKGV)_CATEGORY)))) $(eval __embtk_xpkg_category := $(lastword $(subst /,$(embtk_space),$(embtk_pkgincdir)))) __embtk_$(pkgv)_category := $(or $(__embtk_$(pkgv)_category),$(__embtk_xpkg_category)) endef define embtk_include_hostpkg $(eval $(call __embtk_include_hostpkg,$(1),$(2))) endef define __embtk_include_hostpkg $(eval __embtk_inc_pkgname := $(or $(2),$(PKGV))) # Case where foo and foo_host are in the same .mk file $(eval __embtk_incmk0 := $(embtk_pkgincdir)/$(pkgv)/$(pkgv).mk) $(eval __embtk_incmk1 := $(embtk_pkgincdir)/$(patsubst %_host,%,$(pkgv))/$(patsubst %_host,%,$(pkgv)).mk) $(eval __embtk_incmk := $(or $(wildcard $(__embtk_incmk0)),$(wildcard $(__embtk_incmk1)),$(wildcard $(__embtk_incmk0)))) $(eval __embtk_incinstalled-y := $(if $(wildcard $(__embtk_pkg_dotinstalled_f)),y)) $(eval __embtk_incenabled-y := $(CONFIG_EMBTK_HOST_HAVE_$(patsubst %_HOST,%,$(__embtk_inc_pkgname)))) $(eval __embtk_incmk-y := $(if $(__embtk_incenabled-y)$(__embtk_incinstalled-y),y)) # Is it necessary to include the .mk file? $(eval __embtk_incmk-y := $(if $(findstring $(__embtk_incmk),$(MAKEFILE_LIST)),,$(__embtk_incmk-y))) ifeq (x$(__embtk_incmk-y),xy) include $(__embtk_incmk) endif ifeq (x$(__embtk_incenabled-y),xy) HOSTTOOLS_COMPONENTS-y += $(pkgv)_install # also include old package kconfig entries if any -include $(__embtk_pkg_dotkconfig_f) else ifeq (x$(__embtk_incinstalled-y),xy) HOSTTOOLS_COMPONENTS- += $(pkgv)_install endif # Preset build system installed variable for this packages, if installed ifeq (x$(__embtk_incinstalled-y),xy) __embtk_$(pkgv)_installed = y else __embtk_$(pkgv)_installed = endif endef # # Macros to include toolchain packages in the build system # $(1): pkgname => pkgname/pkgname.mk should exist (required) # $(2): xtool component: toolchain_predeps, toolchain_deps or # toolchain_addons_deps (required). # $(3): kconfig: package specific kconfig symbol name used in .kconfig # This parameter is optional. define embtk_include_xtoolpkg $(eval $(call __embtk_include_xtoolpkg,$(1),$(2),$(3))) endef define __embtk_include_xtoolpkg $(eval __embtk_inc_pkgname := $(or $(3),$(PKGV))) # Case where foo and foo_host are in the same .mk file $(eval __embtk_incmk0 := $(embtk_pkgincdir)/$(pkgv)/$(pkgv).mk) $(eval __embtk_incmk1 := $(embtk_pkgincdir)/$(patsubst %_host,%,$(pkgv))/$(patsubst %_host,%,$(pkgv)).mk) $(eval __embtk_incmk := $(or $(wildcard $(__embtk_incmk0)),$(wildcard $(__embtk_incmk1)),$(wildcard $(__embtk_incmk0)))) $(eval __embtk_incinstalled-y := $(if $(wildcard $(__embtk_pkg_dotinstalled_f)),y)) $(eval __embtk_incenabled0-y := $(CONFIG_EMBTK_HAVE_$(__embtk_inc_pkgname))) $(eval __embtk_incenabled1-y := $(CONFIG_EMBTK_HOST_HAVE_$(patsubst %_HOST,%,$(__embtk_inc_pkgname)))) $(eval __embtk_incenabled-y := $(or $(__embtk_incenabled0-y),$(__embtk_incenabled1-y))) $(eval __embtk_incmk-y := $(if $(__embtk_incenabled-y)$(__embtk_incinstalled-y),y)) # Is it necessary to include the .mk file? $(eval __embtk_incmk-y := $(if $(findstring $(__embtk_incmk),$(MAKEFILE_LIST)),,$(__embtk_incmk-y))) ifeq (x$(__embtk_incmk-y),xy) include $(__embtk_incmk) endif ifeq (x$(__embtk_incenabled-y),xy) EMBTK_$(call embtk_ucase,$(2))-y += $(pkgv)_install # also include old package kconfig entries if any -include $(__embtk_pkg_dotkconfig_f) else ifeq (x$(__embtk_incinstalled-y),xy) EMBTK_$(call embtk_ucase,$(2))- += $(pkgv)_install endif # Preset build system installed variable for this packages, if installed ifeq (x$(__embtk_incinstalled-y),xy) __embtk_$(pkgv)_installed = y else __embtk_$(pkgv)_installed = endif # preset some variables $(eval __embtk_$(pkgv)_category := $(call __embtk_mk_uquote,$(or $(CONFIG_EMBTK_$(PKGV)_REFSPEC),$(CONFIG_EMBTK_$(PKGV)_CATEGORY)))) __embtk_$(pkgv)_category := $(or $(__embtk_$(pkgv)_category),$(2)) endef