mirror of
https://git.busybox.net/buildroot.git
synced 2024-11-27 07:23:30 +08:00
core: add waf-package infra
This new waf-package infrastructure simplifies writing waf-based packages. It can be used by our six current such packages, plus a later-incoming one by Romain. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Cc: Romain Naour <romain.naour@openwide.fr> Reviewed-by: Romain Naour <romain.naour@gmail.com> Tested-by: Romain Naour <romain.naour@gmail.com> [Thomas: - rename <pkg>_BUNDLED_WAF to <pkg>_NEEDS_EXTERNAL_WAF, which involves inverting the meaning of the boolean. - always add the host-python dependency - add a default value for <pkg>_NEEDS_EXTERNAL_WAF (defaults to NO) - remove the unneeded <pkg>_MAKE related definitions.] Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
parent
879136d4c7
commit
24d23bbce7
@ -398,3 +398,4 @@ include package/pkg-generic.mk
|
||||
include package/pkg-kconfig.mk
|
||||
include package/pkg-rebar.mk
|
||||
include package/pkg-kernel-module.mk
|
||||
include package/pkg-waf.mk
|
||||
|
113
package/pkg-waf.mk
Normal file
113
package/pkg-waf.mk
Normal file
@ -0,0 +1,113 @@
|
||||
################################################################################
|
||||
# WAF package infrastructure
|
||||
#
|
||||
# This file implements an infrastructure that eases development of package
|
||||
# .mk files for WAF packages. It should be used for all packages that use
|
||||
# WAF as their build system.
|
||||
#
|
||||
# See the Buildroot documentation for details on the usage of this
|
||||
# infrastructure
|
||||
#
|
||||
# In terms of implementation, this WAF infrastructure requires the .mk file
|
||||
# to only specify metadata information about the package: name, version,
|
||||
# download URL, etc.
|
||||
#
|
||||
# We still allow the package .mk file to override what the different steps
|
||||
# are doing, if needed. For example, if <PKG>_BUILD_CMDS is already defined,
|
||||
# it is used as the list of commands to perform to build the package,
|
||||
# instead of the default WAF behaviour. The package can also define some
|
||||
# post operation hooks.
|
||||
#
|
||||
################################################################################
|
||||
|
||||
################################################################################
|
||||
# inner-waf-package -- defines how the configuration, compilation and
|
||||
# installation of a waf package should be done, implements a few hooks
|
||||
# to tune the build process for waf specifities and calls the generic
|
||||
# package infrastructure to generate the necessary make targets
|
||||
#
|
||||
# argument 1 is the lowercase package name
|
||||
# argument 2 is the uppercase package name, including a HOST_ prefix
|
||||
# for host packages
|
||||
# argument 3 is the uppercase package name, without the HOST_ prefix
|
||||
# for host packages
|
||||
# argument 4 is the type (target or host)
|
||||
################################################################################
|
||||
|
||||
define inner-waf-package
|
||||
|
||||
# We need host-python to run waf
|
||||
$(2)_DEPENDENCIES += host-python
|
||||
|
||||
$(2)_NEEDS_EXTERNAL_WAF ?= NO
|
||||
|
||||
# If the package does not have its own waf, use our own.
|
||||
ifeq ($$($(2)_NEEDS_EXTERNAL_WAF),YES)
|
||||
$(2)_DEPENDENCIES += host-waf
|
||||
$(2)_WAF = $(HOST_DIR)/usr/bin/waf
|
||||
else
|
||||
$(2)_WAF = ./waf
|
||||
endif
|
||||
|
||||
#
|
||||
# Configure step. Only define it if not already defined by the package
|
||||
# .mk file.
|
||||
#
|
||||
ifndef $(2)_CONFIGURE_CMDS
|
||||
define $(2)_CONFIGURE_CMDS
|
||||
cd $$(@D) && \
|
||||
$$(TARGET_CONFIGURE_OPTS) \
|
||||
$$($(2)_CONF_ENV) \
|
||||
$$(HOST_DIR)/usr/bin/python2 $$($(2)_WAF) configure \
|
||||
--prefix=/usr \
|
||||
--libdir=/usr/lib \
|
||||
$$($(2)_CONF_OPTS)
|
||||
endef
|
||||
endif
|
||||
|
||||
#
|
||||
# Build step. Only define it if not already defined by the package .mk
|
||||
# file.
|
||||
#
|
||||
ifndef $(2)_BUILD_CMDS
|
||||
define $(2)_BUILD_CMDS
|
||||
cd $$(@D) && \
|
||||
$$(TARGET_MAKE_ENV) $$(HOST_DIR)/usr/bin/python2 $$($(2)_WAF) build -j $$(PARALLEL_JOBS)
|
||||
endef
|
||||
endif
|
||||
|
||||
#
|
||||
# Staging installation step. Only define it if not already defined by
|
||||
# the package .mk file.
|
||||
#
|
||||
ifndef $(2)_INSTALL_STAGING_CMDS
|
||||
define $(2)_INSTALL_STAGING_CMDS
|
||||
cd $$(@D) && \
|
||||
$$(TARGET_MAKE_ENV) $$(HOST_DIR)/usr/bin/python2 $$($(2)_WAF) \
|
||||
install --destdir=$$(STAGING_DIR)
|
||||
endef
|
||||
endif
|
||||
|
||||
#
|
||||
# Target installation step. Only define it if not already defined by
|
||||
# the package .mk file.
|
||||
#
|
||||
ifndef $(2)_INSTALL_TARGET_CMDS
|
||||
define $(2)_INSTALL_TARGET_CMDS
|
||||
cd $$(@D) && \
|
||||
$$(TARGET_MAKE_ENV) $$(HOST_DIR)/usr/bin/python2 $$($(2)_WAF) \
|
||||
install --destdir=$$(TARGET_DIR)
|
||||
endef
|
||||
endif
|
||||
|
||||
# Call the generic package infrastructure to generate the necessary
|
||||
# make targets
|
||||
$(call inner-generic-package,$(1),$(2),$(3),$(4))
|
||||
|
||||
endef
|
||||
|
||||
################################################################################
|
||||
# waf-package -- the target generator macro for WAF packages
|
||||
################################################################################
|
||||
|
||||
waf-package = $(call inner-waf-package,$(pkgname),$(call UPPERCASE,$(pkgname)),$(call UPPERCASE,$(pkgname)),target)
|
Loading…
Reference in New Issue
Block a user