1#
2# Copyright (C) 2006-2010 OpenWrt.org
3#
4# This is free software, licensed under the GNU General Public License v2.
5# See /LICENSE for more information.
6#
7
8include $(INCLUDE_DIR)/download.mk
9
10HOST_BUILD_DIR ?= $(BUILD_DIR_HOST)/$(PKG_NAME)$(if $(PKG_VERSION),-$(PKG_VERSION))
11HOST_INSTALL_DIR ?= $(HOST_BUILD_DIR)/host-install
12HOST_BUILD_PARALLEL ?=
13
14ifneq ($(CONFIG_PKG_BUILD_USE_JOBSERVER),)
15  HOST_MAKE_J:=$(if $(MAKE_JOBSERVER),$(MAKE_JOBSERVER) $(if $(filter 3.% 4.0 4.1,$(MAKE_VERSION)),-j))
16else
17  HOST_MAKE_J:=-j$(CONFIG_PKG_BUILD_JOBS)
18endif
19
20ifeq ($(strip $(HOST_BUILD_PARALLEL)),0)
21HOST_JOBS?=-j1
22else
23HOST_JOBS?=$(if $(HOST_BUILD_PARALLEL)$(CONFIG_PKG_DEFAULT_PARALLEL),\
24	$(if $(CONFIG_PKG_BUILD_PARALLEL),$(HOST_MAKE_J),-j1),-j1)
25endif
26
27include $(INCLUDE_DIR)/host.mk
28include $(INCLUDE_DIR)/unpack.mk
29include $(INCLUDE_DIR)/depends.mk
30
31BUILD_TYPES += host
32HOST_STAMP_PREPARED=$(HOST_BUILD_DIR)/.prepared$(if $(HOST_QUILT)$(DUMP),,$(shell $(call find_md5,${CURDIR} $(PKG_FILE_DEPENDS),)))
33HOST_STAMP_CONFIGURED:=$(HOST_BUILD_DIR)/.configured
34HOST_STAMP_BUILT:=$(HOST_BUILD_DIR)/.built
35HOST_BUILD_PREFIX:=$(if $(IS_PACKAGE_BUILD),$(STAGING_DIR_HOSTPKG),$(STAGING_DIR_HOST))
36HOST_STAMP_INSTALLED:=$(HOST_BUILD_PREFIX)/stamp/.$(PKG_NAME)_installed
37
38override MAKEFLAGS=
39
40include $(INCLUDE_DIR)/quilt.mk
41include $(INCLUDE_DIR)/autotools.mk
42
43Host/Patch:=$(Host/Patch/Default)
44ifneq ($(strip $(HOST_UNPACK)),)
45  define Host/Prepare/Default
46	$(HOST_UNPACK)
47	$(Host/Patch)
48  endef
49endif
50
51define Host/Prepare
52  $(call Host/Prepare/Default)
53endef
54
55ifeq ($(HOST_OS),Darwin)
56  HOST_CFLAGS += -I/usr/local/opt/openssl/include
57  HOST_LDFLAGS += -L/usr/local/opt/openssl/lib
58endif
59
60HOST_CONFIGURE_VARS = \
61	CC="$(HOSTCC)" \
62	CFLAGS="$(HOST_CFLAGS)" \
63	CPPFLAGS="$(HOST_CPPFLAGS)" \
64	LDFLAGS="$(HOST_LDFLAGS)" \
65	SHELL="$(SHELL)"
66
67HOST_CONFIGURE_ARGS = \
68	--target=$(GNU_HOST_NAME) \
69	--host=$(GNU_HOST_NAME) \
70	--build=$(GNU_HOST_NAME) \
71	--program-prefix="" \
72	--program-suffix="" \
73	--prefix=$(HOST_BUILD_PREFIX) \
74	--exec-prefix=$(HOST_BUILD_PREFIX) \
75	--sysconfdir=$(HOST_BUILD_PREFIX)/etc \
76	--localstatedir=$(HOST_BUILD_PREFIX)/var \
77	--sbindir=$(HOST_BUILD_PREFIX)/bin
78
79HOST_MAKE_FLAGS =
80
81HOST_CONFIGURE_CMD = $(BASH) ./configure
82
83define Host/Configure/Default
84	$(if $(HOST_CONFIGURE_PARALLEL),+)(cd $(HOST_BUILD_DIR)/$(3); \
85		if [ -x configure ]; then \
86			$(CP) $(SCRIPT_DIR)/config.{guess,sub} $(HOST_BUILD_DIR)/$(3)/ && \
87			$(2) \
88			$(HOST_CONFIGURE_CMD) \
89			$(HOST_CONFIGURE_VARS) \
90			$(HOST_CONFIGURE_ARGS) \
91			$(1); \
92		fi \
93	)
94endef
95
96define Host/Configure
97  $(call Host/Configure/Default)
98endef
99
100define Host/Compile/Default
101	+$(MAKE) $(HOST_JOBS) -C $(HOST_BUILD_DIR) \
102		$(HOST_MAKE_FLAGS) \
103		$(1)
104endef
105
106define Host/Compile
107  $(call Host/Compile/Default)
108endef
109
110define Host/Install/Default
111	$(_SINGLE)$(MAKE) -C $(HOST_BUILD_DIR) install
112endef
113
114define Host/Install
115  $(call Host/Install/Default,$(HOST_BUILD_PREFIX))
116endef
117
118
119ifneq ($(if $(HOST_QUILT),,$(CONFIG_AUTOREBUILD)),)
120  define HostHost/Autoclean
121    $(call rdep,${CURDIR} $(PKG_FILE_DEPENDS),$(HOST_STAMP_PREPARED))
122    $(if $(if $(Host/Compile),$(filter prepare,$(MAKECMDGOALS)),1),,$(call rdep,$(HOST_BUILD_DIR),$(HOST_STAMP_BUILT)))
123  endef
124endif
125
126define Host/Exports/Default
127  $(1) : export ACLOCAL_INCLUDE=$$(foreach p,$$(wildcard $$(STAGING_DIR_HOST)/share/aclocal $$(STAGING_DIR_HOST)/share/aclocal-* $(if $(IS_PACKAGE_BUILD),$$(STAGING_DIR)/host/share/aclocal $$(STAGING_DIR)/host/share/aclocal-*)),-I $$(p))
128  $(1) : export STAGING_PREFIX=$$(HOST_BUILD_PREFIX)
129  $(1) : export PKG_CONFIG_PATH=$$(STAGING_DIR_HOST)/lib/pkgconfig:$$(HOST_BUILD_PREFIX)/lib/pkgconfig
130  $(1) : export PKG_CONFIG_LIBDIR=$$(HOST_BUILD_PREFIX)/lib/pkgconfig
131  $(1) : export CCACHE_DIR:=$(STAGING_DIR_HOST)/ccache
132  $(if $(IS_PACKAGE_BUILD),$(1) : export PATH=$$(TARGET_PATH_PKG))
133endef
134Host/Exports=$(Host/Exports/Default)
135
136.NOTPARALLEL:
137
138ifndef DUMP
139  define HostBuild
140  $(if $(HOST_QUILT),$(Host/Quilt))
141  $(if $(if $(PKG_HOST_ONLY),,$(STAMP_PREPARED)),,$(if $(strip $(PKG_SOURCE_URL)),$(call Download,default)))
142  $(if $(DUMP),,$(call HostHost/Autoclean))
143
144  $(HOST_STAMP_PREPARED):
145	@-rm -rf $(HOST_BUILD_DIR)
146	@mkdir -p $(HOST_BUILD_DIR)
147	$(foreach hook,$(Hooks/HostPrepare/Pre),$(call $(hook))$(sep))
148	$(call Host/Prepare)
149	$(foreach hook,$(Hooks/HostPrepare/Post),$(call $(hook))$(sep))
150	touch $$@
151
152  $(call Host/Exports,$(HOST_STAMP_CONFIGURED))
153  $(HOST_STAMP_CONFIGURED): $(HOST_STAMP_PREPARED)
154	$(foreach hook,$(Hooks/HostConfigure/Pre),$(call $(hook))$(sep))
155	$(call Host/Configure)
156	$(foreach hook,$(Hooks/HostConfigure/Post),$(call $(hook))$(sep))
157	touch $$@
158
159  $(call Host/Exports,$(HOST_STAMP_BUILT))
160  $(HOST_STAMP_BUILT): $(HOST_STAMP_CONFIGURED)
161		$(foreach hook,$(Hooks/HostCompile/Pre),$(call $(hook))$(sep))
162		$(call Host/Compile)
163		$(foreach hook,$(Hooks/HostCompile/Post),$(call $(hook))$(sep))
164		touch $$@
165
166  $(call Host/Exports,$(HOST_STAMP_INSTALLED))
167  $(HOST_STAMP_INSTALLED): $(HOST_STAMP_BUILT) $(if $(FORCE_HOST_INSTALL),FORCE)
168		$(call Host/Install,$(HOST_BUILD_PREFIX))
169		$(foreach hook,$(Hooks/HostInstall/Post),$(call $(hook))$(sep))
170		mkdir -p $$(shell dirname $$@)
171		touch $(HOST_STAMP_BUILT)
172		touch $$@
173
174  ifndef STAMP_BUILT
175    prepare: host-prepare
176    compile: host-compile
177    install: host-install
178    clean: host-clean
179    update: host-update
180    refresh: host-refresh
181  endif
182
183  host-prepare: $(HOST_STAMP_PREPARED)
184  host-configure: $(HOST_STAMP_CONFIGURED)
185  host-compile: $(HOST_STAMP_BUILT) $(if $(STAMP_BUILT),$(HOST_STAMP_INSTALLED))
186  host-install: $(HOST_STAMP_INSTALLED)
187  host-clean: FORCE
188	$(call Host/Clean)
189	$(call Host/Uninstall)
190	rm -rf $(HOST_BUILD_DIR) $(HOST_STAMP_INSTALLED) $(HOST_STAMP_BUILT)
191
192  endef
193
194  download:
195  prepare:
196  compile:
197  install:
198  clean:
199
200endif
201