all: world
-.pkginfo: FORCE
ifneq ($(shell ./scripts/timestamp.pl -p .pkginfo package Makefile),.pkginfo)
+.pkginfo: FORCE
+.config: FORCE
+endif
+
+.pkginfo:
@echo Collecting package info...
@-for dir in package/*/; do \
echo Source-Makefile: $${dir}Makefile; \
$(NO_TRACE_MAKE) --no-print-dir DUMP=1 -C $$dir 2>&- || true; \
done > $@
-endif
.config.in: .pkginfo
@./scripts/gen_menuconfig.pl < $< > $@ || rm -f $@
toolchain/%: FORCE
$(MAKE) -C toolchain $(patsubst toolchain/%,%,$@)
-.config: ./scripts/config/conf FORCE
+.config: ./scripts/config/conf
@[ -f .config ] || $(NO_TRACE_MAKE) menuconfig
@$< -D .config Config.in &> /dev/null
-.prereq: $(TOPDIR)/include/prereq.mk .pkginfo
- @$(NO_TRACE_MAKE) -s -f $(TOPDIR)/include/prereq.mk prereq 2>/dev/null || { \
+.prereq-build: $(TOPDIR)/include/prereq-build.mk
+ @$(NO_TRACE_MAKE) -s -f $(TOPDIR)/include/prereq-build.mk prereq 2>/dev/null || { \
echo "Prerequisite check failed. Use FORCE=1 to override."; \
false; \
}
@touch $@
-prereq: .prereq FORCE
+.prereq-packages: $(TOPDIR)/include/prereq.mk .pkginfo .config
+ @$(NO_TRACE_MAKE) -s -C package prereq 2>/dev/null || { \
+ echo "Prerequisite check failed. Use FORCE=1 to override."; \
+ false; \
+ }
+ @touch $@
+
+prereq: .prereq-build .prereq-packages FORCE
download: .config FORCE
$(MAKE) toolchain/download
$(MAKE) target/download
ifeq ($(FORCE),)
-world: .prereq
+.config ./scripts/config/conf ./scripts/config/mconf: .prereq-build
+world: .prereq-packages
endif
world: .config FORCE
all: compile
endif
+include $(INCLUDE_DIR)/prereq.mk
+
define Build/DefaultTargets
ifeq ($(DUMP),)
ifeq ($(CONFIG_AUTOREBUILD),y)
--- /dev/null
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+include $(INCLUDE_DIR)/prereq.mk
+
+# Required for the toolchain
+define Require/working-make
+ echo 'all: test' > $(TMP_DIR)/check.mk
+ echo 'e0 = $$$$(foreach s,foobar,$$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
+ echo 'e1 = $$$$(foreach s,foobar, $$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
+ echo 'test: $$$$(strip $$$$(e0)) $$$$(strip $$$$(e1))' >> $(TMP_DIR)/check.mk
+ $(NO_TRACE_MAKE) -f $(TMP_DIR)/check.mk
+endef
+
+$(eval $(call Require,working-make, \
+ Your make version is buggy. Please install GNU make v3.81 or later. \
+))
+
+define Require/working-gcc
+ echo 'int main(int argc, char **argv) { return 0; }' | \
+ gcc -x c -o $(TMP_DIR)/a.out -
+endef
+
+$(eval $(call Require,working-gcc, \
+ No working GNU C Compiler (gcc) was found on your system. \
+))
+
+define Require/working-g++
+ echo 'int main(int argc, char **argv) { return 0; }' | \
+ g++ -x c++ -o $(TMP_DIR)/a.out -lstdc++ -
+endef
+
+$(eval $(call Require,working-g++, \
+ No working GNU C++ Compiler (g++) was found on your system. \
+))
+
+define Require/ncurses
+ echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \
+ gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out -lncurses -
+endef
+
+$(eval $(call Require,ncurses, \
+ No ncurses development files were not found on your system. \
+))
+
+
+define Require/zlib
+ echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
+ gcc -include zlib.h -x c -o $(TMP_DIR)/a.out -lz -
+endef
+
+$(eval $(call Require,zlib, \
+ No zlib development files were not found on your system. \
+))
+
+
+$(eval $(call RequireCommand,bison, \
+ Please install GNU bison. \
+))
+
+$(eval $(call RequireCommand,flex, \
+ Please install flex. \
+))
+
+$(eval $(call RequireCommand,python, \
+ Please install python. \
+))
+
+$(eval $(call RequireCommand,unzip, \
+ Please install unzip. \
+))
+
+$(eval $(call RequireCommand,bzip2, \
+ Please install bzip2. \
+))
+
+$(eval $(call RequireCommand,patch, \
+ Please install patch. \
+))
+
+$(eval $(call RequireCommand,perl, \
+ Please install perl. \
+))
# See /LICENSE for more information.
#
-include $(TOPDIR)/rules.mk
-
$(TMP_DIR):
mkdir -p $@
prereq:
- echo
if [ -f $(TMP_DIR)/.prereq-error ]; then \
+ echo; \
cat $(TMP_DIR)/.prereq-error; \
echo; \
rm -rf $(TMP_DIR); \
prereq-$(1): $(TMP_DIR) FORCE
echo -n "Checking '$(1)'... "
- if $(NO_TRACE_MAKE) -f $(INCLUDE_DIR)/prereq.mk check-$(1) >/dev/null 2>/dev/null; then \
+ if $(NO_TRACE_MAKE) -f $(firstword $(MAKEFILE_LIST)) check-$(1) >/dev/null 2>/dev/null; then \
echo 'ok.'; \
else \
echo 'failed.'; \
$$(eval $$(call Require,$(1),$(2)))
endef
-# Required for the toolchain
-define Require/working-make
- echo 'all: test' > $(TMP_DIR)/check.mk
- echo 'e0 = $$$$(foreach s,foobar,$$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
- echo 'e1 = $$$$(foreach s,foobar, $$$$(eval $$$$s:))' >> $(TMP_DIR)/check.mk
- echo 'test: $$$$(strip $$$$(e0)) $$$$(strip $$$$(e1))' >> $(TMP_DIR)/check.mk
- $(NO_TRACE_MAKE) -f $(TMP_DIR)/check.mk
-endef
-
-$(eval $(call Require,working-make, \
- Your make version is buggy. Please install GNU make v3.81 or later. \
-))
-
-define Require/working-gcc
- echo 'int main(int argc, char **argv) { return 0; }' | \
- gcc -x c -o $(TMP_DIR)/a.out -
-endef
-
-$(eval $(call Require,working-gcc, \
- No working GNU C Compiler (gcc) was found on your system. \
-))
-
-define Require/working-g++
- echo 'int main(int argc, char **argv) { return 0; }' | \
- g++ -x c++ -o $(TMP_DIR)/a.out -lstdc++ -
-endef
-
-$(eval $(call Require,working-g++, \
- No working GNU C++ Compiler (g++) was found on your system. \
-))
-
-define Require/ncurses
- echo 'int main(int argc, char **argv) { initscr(); return 0; }' | \
- gcc -include ncurses.h -x c -o $(TMP_DIR)/a.out -lncurses -
-endef
-
-$(eval $(call Require,ncurses, \
- No ncurses development files were not found on your system. \
-))
-
-
-define Require/zlib
- echo 'int main(int argc, char **argv) { gzdopen(0, "rb"); return 0; }' | \
- gcc -include zlib.h -x c -o $(TMP_DIR)/a.out -lz -
-endef
-
-$(eval $(call Require,zlib, \
- No zlib development files were not found on your system. \
-))
-
-
-$(eval $(call RequireCommand,bison, \
- Please install GNU bison. \
-))
-
-$(eval $(call RequireCommand,flex, \
- Please install flex. \
-))
-
-$(eval $(call RequireCommand,python, \
- Please install python. \
-))
-
-$(eval $(call RequireCommand,unzip, \
- Please install unzip. \
-))
-
-$(eval $(call RequireCommand,bzip2, \
- Please install bzip2. \
-))
-
-$(eval $(call RequireCommand,patch, \
- Please install patch. \
-))
-
-$(eval $(call RequireCommand,perl, \
- Please install perl. \
-))
include $(TOPDIR)/.config
include $(TOPDIR)/.pkgdeps
-SOURCE_PACKAGES:=$(patsubst %,%-download,$(package-y) $(package-m))
+PREREQ_PACKAGES:=$(patsubst %,%-prereq,$(package-y) $(package-m))
+DOWNLOAD_PACKAGES:=$(patsubst %,%-download,$(package-y) $(package-m))
COMPILE_PACKAGES:=$(patsubst %,%-compile,$(package-y) $(package-m))
INSTALL_PACKAGES:=$(patsubst %,%-install,$(package-y))
$(STAMP_DIR) $(TARGET_DIR):
mkdir -p $@
+%-prereq: $(STAMP_DIR) $(TARGET_DIR)
+ $(MAKE) -C $(patsubst %-prereq,%,$@) prereq MAKEFLAGS="$(BUILD_MAKEFLAGS)"
+
%-download: $(STAMP_DIR) $(TARGET_DIR)
$(MAKE) -C $(patsubst %-download,%,$@) download MAKEFLAGS="$(BUILD_MAKEFLAGS)"
all: compile
clean: $(patsubst %,%-clean,$(package-) $(package-y) $(package-m))
-download: $(SOURCE_PACKAGES)
+prereq: $(PREREQ_PACKAGES)
+download: $(DOWNLOAD_PACKAGES)
compile-targets: $(COMPILE_PACKAGES)
compile:
$(MAKE) -j$(CONFIG_JLEVEL) compile-targets
ifneq ($(DUMP),1)
TARGET:=-$(BOARD)-$(KERNEL)
-UCLIBC_VERSION:=${shell cat $(STAGING_DIR)/uclibc_version}
-LIBGCC_VERSION:=${shell cat $(STAGING_DIR)/gcc_version}
+UCLIBC_VERSION:=${shell cat $(STAGING_DIR)/uclibc_version 2>/dev/null}
+LIBGCC_VERSION:=${shell cat $(STAGING_DIR)/gcc_version 2>/dev/null}
else
UCLIBC_VERSION:=<UCLIBC_VERSION>
LIBGCC_VERSION:=<LIBGCC_VERSION>