1 # This file is part of the OpenADK project. OpenADK is copyrighted
2 # material, please see the LICENCE file in the top-level directory.
7 ifneq ($(shell umask
2>/dev
/null | sed
's/0*022/OK/'),OK
)
8 $(error your umask is not
022)
11 CONFIG_CONFIG_IN
= Config.in
13 DEFCONFIG
= ADK_DEVELSYSTEM
=n \
16 ADK_FORCE_PARALLEL
=n \
19 BUSYBOX_MODPROBE_SMALL
=n \
21 BUSYBOX_BUILD_LIBBUSYBOX
=n \
22 BUSYBOX_FEATURE_2_4_MODULES
=n \
23 BUSYBOX_LOCALE_SUPPORT
=n \
24 BUSYBOX_FEATURE_PREFER_APPLETS
=n \
25 BUSYBOX_FEATURE_SUID
=n \
26 BUSYBOX_SELINUXENABLED
=n \
27 BUSYBOX_FEATURE_INSTALLER
=n \
29 BUSYBOX_FLASH_LOCK
=n \
30 BUSYBOX_FLASH_UNLOCK
=n \
31 BUSYBOX_FLASH_ERASEALL
=n \
37 ADK_KERNEL_RT2X00_DEBUG
=n \
38 ADK_KERNEL_ATH5K_DEBUG
=n
40 noconfig_targets
:= menuconfig \
45 MAKECLEAN_SYMBOLS
= ADK_TARGET_LIB_UCLIBC \
46 ADK_TARGET_LIB_GLIBC \
47 ADK_TARGET_LIB_ECLIBC \
51 if
[ -f .config.old
];then \
54 for symbol in
${MAKECLEAN_SYMBOLS}; do \
55 newval
=$$(grep
-e
"^$$symbol=" -e
"^\# $$symbol " .config
); \
56 oldval
=$$(cat .cfg
/"$$symbol" 2>&-); \
57 [[ $$newval = $$oldval ]] && continue
; \
59 echo
>&2 "WARNING: Toolchain related options have changed, 'make" \
60 "$$what' might be required!"; \
64 if
[ "$$(grep ^BUSYBOX .config|md5sum)" != "$$(grep ^BUSYBOX .config.old|md5sum)" ];then \
65 if
[ -f build_
*/w-busybox
*/busybox
*/.configure_done
];then \
66 rm build_
*/w-busybox
*/busybox
*/.configure_done
; \
71 # Pull in the user's configuration file
72 ifeq ($(filter $(noconfig_targets
),$(MAKECMDGOALS
)),)
73 -include $(TOPDIR
)/.config
76 ifeq ($(strip $(ADK_HAVE_DOT_CONFIG
)),y
)
77 include $(TOPDIR
)/rules.mk
78 include ${TOPDIR}/mk
/split-cfg.mk
83 $(CP
) $(BIN_DIR
) $(TOPDIR
)/bulkdir
/${d}/
86 .PHONY
: all world
clean cleantarget cleandir
distclean image_clean
88 world
: $(DISTDIR
) $(BUILD_DIR
) $(TARGET_DIR
) $(PACKAGE_DIR
) ${TOPDIR}/.cfg
/ADK_HAVE_DOT_CONFIG
89 ${BASH} ${TOPDIR}/scripts
/scan-pkgs.sh
90 ifeq ($(ADK_NATIVE
),y
)
91 $(MAKE
) -f mk
/build.mk toolchain
/kernel-headers-prepare target
/config-prepare target
/compile package
/compile root_clean package
/install package_index target
/install
93 ifeq ($(ADK_TOOLCHAIN_ONLY
),y
)
94 $(MAKE
) -f mk
/build.mk toolchain
/install package
/compile
96 $(MAKE
) -f mk
/build.mk toolchain
/install target
/config-prepare target
/compile package
/compile root_clean package
/install package_index target
/install
101 ifeq ($(ADK_TARGET_PACKAGE_IPKG
),y
)
102 -cd
${PACKAGE_DIR} && \
103 ${BASH} ${TOPDIR}/scripts
/ipkg-make-index.sh .
>Packages
110 mkdir
-p
$(BUILD_DIR
)
113 mkdir
-p
$(TARGET_DIR
)
116 mkdir
-p
${PACKAGE_DIR}/.stamps
118 ${STAGING_DIR} ${STAGING_DIR}/etc
${STAGING_TOOLS}:
119 mkdir
-p
${STAGING_DIR}/{bin
,etc
,lib
,usr
/include} \
120 ${STAGING_TOOLS}/{bin
,lib
}
122 ${STAGING_DIR}/etc
/ipkg.conf
: ${STAGING_DIR}/etc
123 echo
"dest root /" >${STAGING_DIR}/etc
/ipkg.conf
124 echo
"option offline_root ${TARGET_DIR}" >>$(STAGING_DIR
)/etc
/ipkg.conf
126 package
/%: ${TOPDIR}/.cfg
/ADK_HAVE_DOT_CONFIG
${STAGING_DIR}/etc
/ipkg.conf
127 $(MAKE
) -C package
$(patsubst package
/%,%,$@
)
129 target
/%: ${TOPDIR}/.cfg
/ADK_HAVE_DOT_CONFIG
130 $(MAKE
) -C target
$(patsubst target
/%,%,$@
)
132 toolchain
/%: ${STAGING_DIR}
133 $(MAKE
) -C toolchain
$(patsubst toolchain
/%,%,$@
)
136 $(MAKE
) -C target image
139 echo
"Saving configuration for target: ${ADK_TARGET}"
140 cp
-p .config .config.
${ADK_TARGET}
141 if
[ -f .config.old
];then cp
-p .config.old .config.old.
${ADK_TARGET};fi
142 mv .cfg .cfg.
${ADK_TARGET}
143 if
[ -f .config.
${TARGET} ];then cp
-p .config.
${TARGET} .config
; \
144 cp
-p .config.old.
${TARGET} .config.old
; \
145 mv .cfg.
${TARGET} .cfg
; \
146 echo
"Setting configuration to target: ${TARGET}"; \
147 else echo
"No old target config found";mv .config .config.bak
; make TARGET
=${TARGET};fi
150 cp
$(TOPDIR
)/target
/$(ADK_TARGET
)/kernel.config
$(BUILD_DIR
)/linux
/.config
151 make
-C
$(BUILD_DIR
)/linux
/ ARCH
=$(ARCH
) menuconfig
152 cp
$(BUILD_DIR
)/linux
/.config
$(TOPDIR
)/target
/$(ADK_TARGET
)/kernel.config
154 #############################################################
156 # Cleanup and misc junk
158 #############################################################
162 mkdir
-p
$(TARGET_DIR
)
164 # Do a per-package clean here, too. This way stale headers and
165 # libraries from cross_*/target/ get wiped away, which keeps
166 # future package build's configure scripts from returning false
167 # dependencies information.
171 $(MAKE
) -C
$(CONFIG
) clean
172 for d in
${STAGING_PARENT}; do \
173 for f in
$$(ls
$$d/pkg
/[a-z
]* 2>/dev
/null
); do \
174 while read file
; do \
175 rm $$d/target
/$$file 2>/dev
/null
; \
180 rm -rf
$(BUILD_DIR
) $(BIN_DIR
) $(TARGET_DIR
) ${TOPDIR}/.cfg
181 rm -f
${TOPDIR}/package
/*/info.mk
184 @
$(TRACE
) cleankernel
185 rm -rf
$(TOOLCHAIN_BUILD_DIR
)/linux
* $(BUILD_DIR
)/linux
189 @
$(MAKE
) -C
$(CONFIG
) clean $(MAKE_TRACE
)
190 rm -rf
$(BUILD_DIR_PFX
) $(BIN_DIR_PFX
) $(TARGET_DIR_PFX
) \
192 rm -rf
$(TOOLCHAIN_BUILD_DIR_PFX
) $(STAGING_PARENT_PFX
) $(TOOLS_BUILD_DIR
)
193 rm -f .tmpconfig.h
${TOPDIR}/package
/*/info.mk
196 @
$(TRACE
) cleantarget
197 @
$(MAKE
) -C
$(CONFIG
) clean $(MAKE_TRACE
)
198 rm -rf
$(BUILD_DIR
) $(BIN_DIR
) $(TARGET_DIR
) ${TOPDIR}/.cfg
199 rm -rf
$(TOOLCHAIN_BUILD_DIR
) $(STAGING_PARENT
)
200 rm -f .tmpconfig.h
${TOPDIR}/package
/*/info.mk
204 @
$(MAKE
) -C
$(CONFIG
) clean $(MAKE_TRACE
)
205 rm -rf
$(BUILD_DIR_PFX
) $(BIN_DIR_PFX
) $(TARGET_DIR_PFX
) $(DISTDIR
) \
206 ${TOPDIR}/.cfg
* $(TOPDIR
)/bulkdir
207 rm -rf
$(TOOLCHAIN_BUILD_DIR_PFX
) $(STAGING_PARENT_PFX
) $(TOOLS_BUILD_DIR
)
208 rm -f .config
* .defconfig .tmpconfig.h
all.config \
209 ${TOPDIR}/package
/*/info.mk
211 else # ifeq ($(strip $(ADK_HAVE_DOT_CONFIG)),y)
213 include $(TOPDIR
)/prereq.mk
216 @echo
"Start the build with \"make\" or with \"make v\" to be verbose"
219 # ---------------------------------------------------------------------------
221 # force entering the subdir, as dependency checking is done there
222 .PHONY
: $(CONFIG
)/conf
$(CONFIG
)/mconf
225 @
$(MAKE
) -C
$(CONFIG
) conf
228 @
$(MAKE
) -C
$(CONFIG
)
230 defconfig
: $(CONFIG
)/conf
231 ifeq (${OStype},Linux
)
232 @echo ADK_HOST_LINUX
=y
> $(TOPDIR
)/.defconfig
234 ifeq (${OStype},FreeBSD
)
235 @echo ADK_HOST_FREEBSD
=y
> $(TOPDIR
)/.defconfig
237 ifeq (${OStype},MirBSD
)
238 @echo ADK_HOST_MIRBSD
=y
> $(TOPDIR
)/.defconfig
240 ifeq (${OStype},OpenBSD
)
241 @echo ADK_HOST_OPENBSD
=y
> $(TOPDIR
)/.defconfig
243 ifeq (${OStype},NetBSD
)
244 @echo ADK_HOST_NETBSD
=y
> $(TOPDIR
)/.defconfig
246 @if
[ ! -z
"$(TARGET)" ];then \
247 grep
"^config" target
/Config.in \
248 |grep
-i
"$(TARGET)" \
249 |sed
-e
"s#^config \(.*\)#\1=y#" \
250 >> $(TOPDIR
)/.defconfig
; \
251 for symbol in
${DEFCONFIG}; do \
252 echo
$$symbol >> $(TOPDIR
)/.defconfig
; \
255 ifneq (,$(filter qemu
%,${TARGET}))
256 @echo ADK_LINUX_QEMU
=y
>> $(TOPDIR
)/.defconfig
258 ifneq (,$(filter rescue
%,${TARGET}))
259 @echo ADK_LINUX_RESCUE
=y
>> $(TOPDIR
)/.defconfig
261 ifneq (,$(filter rb
%,${TARGET}))
262 @echo ADK_LINUX_MIKROTIK
=y
>> $(TOPDIR
)/.defconfig
264 @if
[ ! -z
"$(TARGET)" ];then \
265 $(CONFIG
)/conf
-D .defconfig
$(CONFIG_CONFIG_IN
); \
269 ifeq (${OStype},Linux
)
270 @echo ADK_HOST_LINUX
=y
> $(TOPDIR
)/all.config
272 ifeq (${OStype},FreeBSD
)
273 @echo ADK_HOST_FREEBSD
=y
> $(TOPDIR
)/all.config
275 ifeq (${OStype},MirBSD
)
276 @echo ADK_HOST_MIRBSD
=y
> $(TOPDIR
)/all.config
278 ifeq (${OStype},OpenBSD
)
279 @echo ADK_HOST_OPENBSD
=y
> $(TOPDIR
)/all.config
281 ifeq (${OStype},NetBSD
)
282 @echo ADK_HOST_NETBSD
=y
> $(TOPDIR
)/all.config
284 @if
[ ! -z
"$(TARGET)" ];then \
285 grep
"^config" target
/Config.in \
286 |grep
-i
"$(TARGET)" \
287 |sed
-e
"s#^config \(.*\)#\1=y#" \
288 >> $(TOPDIR
)/all.config
; \
289 for symbol in
${DEFCONFIG}; do \
290 echo
$$symbol >> $(TOPDIR
)/all.config
; \
293 @if
[ ! -z
"$(FS)" ];then \
294 grep
"^config" target
/Config.in \
296 |sed
-e
"s#^config \(.*\)#\1=y#" \
297 >> $(TOPDIR
)/all.config
; \
299 @if
[ ! -z
"$(PKG)" ];then \
300 grep
"^config" target
/Config.in \
302 |sed
-e
"s#^config \(.*\)#\1=y#" \
303 >> $(TOPDIR
)/all.config
; \
305 @if
[ ! -z
"$(LIBC)" ];then \
306 grep
"^config" target
/Config.in \
308 |sed
-e
"s#^config \(.*\)#\1=y#" \
309 >> $(TOPDIR
)/all.config
; \
311 ifneq (,$(filter %_qemu
,${TARGET}))
312 @echo ADK_LINUX_QEMU
=y
>> $(TOPDIR
)/all.config
314 ifneq (,$(filter %_rescue
,${TARGET}))
315 @echo ADK_LINUX_RESCUE
=y
>> $(TOPDIR
)/all.config
317 ifneq (,$(filter rb
%,${TARGET}))
318 @echo ADK_LINUX_MIKROTIK
=y
>> $(TOPDIR
)/all.config
321 menuconfig
: $(CONFIG
)/mconf defconfig
322 @if
[ ! -f .config
];then \
323 $(CONFIG
)/conf
-D .defconfig
$(CONFIG_CONFIG_IN
); \
325 @
$(CONFIG
)/mconf
$(CONFIG_CONFIG_IN
)
328 _config
: $(CONFIG
)/conf
330 @
$(CONFIG
)/conf
${W} $(CONFIG_CONFIG_IN
) >/dev
/null
333 .NOTPARALLEL
: _mconfig
334 _mconfig
: ${CONFIG}/conf _mconfig2 _config
335 _mconfig2
: ${CONFIG}/conf modconfig
336 @
${CONFIG}/conf
-m
${RCONFIG} >/dev
/null
339 @
$(MAKE
) -C
$(CONFIG
) clean
340 @
rm -rf
$(BUILD_DIR
) $(TOOLS_BUILD_DIR
) $(BIN_DIR
) $(DISTDIR
) \
341 ${TOPDIR}/.cfg
* $(TOPDIR
)/bulkdir
342 @
rm -rf
$(TOOLCHAIN_BUILD_DIR
) $(STAGING_PARENT
) $(TARGET_DIR
)
343 @
rm -f .config
* .defconfig
all.config .tmpconfig.h \
344 ${TOPDIR}/package
/*/info.mk
346 endif # ! ifeq ($(strip $(ADK_HAVE_DOT_CONFIG)),y)
348 # build all targets and combinations
350 while read target libc fs p
; do \
351 mkdir
-p
$(TOPDIR
)/bulkdir
/$$target-$$libc-$$fs; \
353 echo
=== building
$$target $$libc $$fs on
$$(date
); \
355 $(MAKE
) TARGET
=$$target LIBC
=$$libc FS
=$$fs PKG
=ipkg \
357 if
[ "x$$p" = xy
];then \
358 $(MAKE
) TARGET
=$$target LIBC
=$$libc FS
=$$fs PKG
=ipkg \
361 $(MAKE
) VERBOSE
=1 -f mk
/build.mk allcopy \
362 d
=$$target-$$libc-$$fs && \
363 $(MAKE
) cleantarget
; \
365 ) 2>&1 | tee
$(TOPDIR
)/bulkdir
/$$target-$$libc-$$fs/log
; \
366 done
<${TOPDIR}/target
/bulk.lst