summaryrefslogtreecommitdiffstats
path: root/package/pkg-waf.mk
blob: 45b9c4136fd01b2d4d9fd13380d0e0139822bf6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
################################################################################
# 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

$(2)_BUILD_OPTS				?=
$(2)_INSTALL_STAGING_OPTS		?=
$(2)_INSTALL_TARGET_OPTS		?=
$(2)_WAF_OPTS				?=

#
# 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) \
		$$($(2)_WAF_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) $$($(2)_BUILD_OPTS) \
		$$($(2)_WAF_OPTS)
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) \
		$$($(2)_INSTALL_STAGING_OPTS) \
		$$($(2)_WAF_OPTS)
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) \
		$$($(2)_INSTALL_TARGET_OPTS) \
		$$($(2)_WAF_OPTS)
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)
OpenPOWER on IntegriCloud