From: nbd Date: Sat, 28 Jul 2007 13:00:43 +0000 (+0000) Subject: more build system cleanup X-Git-Url: http://git.ozo.com/?p=openwrt-10.03%2F.git;a=commitdiff_plain;h=389529fe3599b90544f09cdae2d6318eefbe2352 more build system cleanup git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8206 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- diff --git a/Makefile b/Makefile index ad3b3b8e1..92b84bb2a 100644 --- a/Makefile +++ b/Makefile @@ -7,132 +7,37 @@ # See /LICENSE for more information. # -RELEASE:=Kamikaze -#VERSION:=2.0 # uncomment for final release - -#-------------------------------------------------------------- -# Just run 'make menuconfig', configure stuff, then run 'make'. -# You shouldn't need to mess with anything beyond this point... -#-------------------------------------------------------------- - all: world -SHELL:=/usr/bin/env bash -export LC_ALL=C -export LANG=C -export TOPDIR=${CURDIR} -export IS_TTY=$(shell tty -s && echo 1 || echo 0) - -include ./rules.mk -include $(INCLUDE_DIR)/depends.mk -include $(INCLUDE_DIR)/subdir.mk -include tools/Makefile - -OPENWRTVERSION:=$(RELEASE) -ifneq ($(VERSION),) - OPENWRTVERSION:=$(VERSION) ($(OPENWRTVERSION)) -else - REV:=$(shell LANG=C svn info | awk '/^Revision:/ { print$$2 }' ) - ifneq ($(REV),) - OPENWRTVERSION:=$(OPENWRTVERSION)/r$(REV) - endif -endif -export OPENWRTVERSION - -ifeq ($(FORCE),) - .config scripts/config/conf scripts/config/mconf: tmp/.prereq-build - world: tmp/.prereq-package tmp/.prereq-target -endif - -package/%/Makefile: ; -target/%/Makefile: ; - -SCAN_COOKIE?=$(shell echo $$$$) -export SCAN_COOKIE - -tmp/.packageinfo tmp/.targetinfo: FORCE - mkdir -p tmp/info - $(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk" SCAN_DEPTH=2 SCAN_EXTRA="" - $(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk" SCAN_DEPTH=4 SCAN_EXTRA="" - -tmpinfo-clean: FORCE - -rm -rf tmp/.*info -tmp/.config-%.in: tmp/.%info scripts/metadata.pl - ./scripts/metadata.pl $*_config < $< > $@ || rm -f $@ +TOPDIR:=${CURDIR} +LC_ALL:=C +LANG:=C +IS_TTY:=${shell tty -s && echo 1 || echo 0} +export TOPDIR LC_ALL LANG IS_TTY -.config: ./scripts/config/conf tmp/.config-target.in tmp/.config-package.in - if [ \! -f .config ]; then \ - [ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \ - $(NO_TRACE_MAKE) menuconfig; \ - fi - $< -D .config Config.in &> /dev/null +include rules.mk -scripts/config/mconf: - $(MAKE) -C scripts/config all - -scripts/config/conf: - $(MAKE) -C scripts/config conf - - - -config: scripts/config/conf tmp/.config-target.in tmp/.config-package.in FORCE - $< Config.in - -config-clean: FORCE - $(NO_TRACE_MAKE) -C scripts/config clean - -defconfig: scripts/config/conf tmp/.config-target.in tmp/.config-package.in FORCE - touch .config - $< -D .config Config.in - -oldconfig: scripts/config/conf tmp/.config-target.in tmp/.config-package.in FORCE - $< -o Config.in +ifneq ($(OPENWRT_BUILD),1) + export OPENWRT_BUILD:=1 + include $(INCLUDE_DIR)/toplevel.mk +else + include $(INCLUDE_DIR)/depends.mk + include $(INCLUDE_DIR)/subdir.mk + include tools/Makefile -menuconfig: scripts/config/mconf tmp/.config-target.in tmp/.config-package.in FORCE - if [ \! -f .config -a -e $(HOME)/.openwrt/defconfig ]; then \ - cp $(HOME)/.openwrt/defconfig .config; \ - fi - $< Config.in +clean: FORCE + rm -rf build_* bin tmp -kernel_oldconfig: .config FORCE - $(NO_TRACE_MAKE) -C target/linux oldconfig +dirclean: clean + rm -rf staging_dir_* toolchain_build_* tool_build -kernel_menuconfig: .config FORCE - $(NO_TRACE_MAKE) -C target/linux menuconfig +distclean: dirclean config-clean symlinkclean docs/clean + rm -rf dl -package/% target/%: tmp/.packageinfo -toolchain/% package/% target/%: tmp/.targetinfo -package/% target/% toolchain/%: FORCE +toolchain/% package/% target/%: FORCE $(MAKE) -C $(patsubst %/$*,%,$@) $* - -tmp/.prereq-build: include/prereq-build.mk - mkdir -p tmp - rm -f tmp/.host.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 $@ - -tmp/.prereq-%: include/prereq.mk tmp/.%info .config - mkdir -p tmp - rm -f tmp/.host.mk - $(NO_TRACE_MAKE) -s -C $* prereq 2>/dev/null || { \ - echo "Prerequisite check failed. Use FORCE=1 to override."; \ - false; \ - } - touch $@ - -prereq: tmp/.prereq-build tmp/.prereq-package tmp/.prereq-target FORCE - -download: .config FORCE - $(MAKE) tools/download - $(MAKE) toolchain/download - $(MAKE) package/download - $(MAKE) target/download - world: .config $(tools/stamp) FORCE $(MAKE) toolchain/install $(MAKE) target/compile @@ -141,27 +46,4 @@ world: .config $(tools/stamp) FORCE $(MAKE) target/install $(MAKE) package/index -clean: FORCE - rm -rf build_* bin tmp - -dirclean: clean - rm -rf staging_dir_* toolchain_build_* tool_build - -distclean: dirclean config-clean symlinkclean docs/clean - rm -rf dl - -help: - cat README - -docs docs/compile: FORCE - $(MAKE) -C docs compile - -docs/clean: FORCE - $(MAKE) -C docs clean - -symlinkclean: - -find package -type l | xargs rm -f - rm -rf tmp - -.SILENT: clean dirclean distclean symlinkclean config-clean download world help tmp/.packageinfo tmp/.targetinfo tmpinfo-clean tmp/.config-package.in tmp/.config-target.in .config scripts/config/mconf scripts/config/conf menuconfig tmp/.prereq-build tmp/.prereq-package tmp/.prereq-target -.PHONY: help +endif diff --git a/include/scan.mk b/include/scan.mk index 552f14637..53b66f324 100644 --- a/include/scan.mk +++ b/include/scan.mk @@ -68,3 +68,4 @@ tmp/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP) FORCE: .PHONY: FORCE +.NOTPARALLEL: diff --git a/include/subdir.mk b/include/subdir.mk index 79624238b..407f8a81d 100644 --- a/include/subdir.mk +++ b/include/subdir.mk @@ -32,7 +32,7 @@ define subdir $(call warn,$(1),d,BD $(1)/$(bd)) $(foreach target,$(SUBTARGETS), $(call warn_eval,$(1)/$(bd),t,T,$(1)/$(bd)/$(target): $($(1)/$(bd)/$(target)) $(call $(1)//$(target),$(1)/$(bd))) - @$$(MAKE) -j1 -C $(1)/$(bd) $(target) + @+$$(MAKE) -j1 -C $(1)/$(bd) $(target) # legacy targets $(call warn_eval,$(1)/$(bd),l,T,$(1)/$(bd)-$(target): $(1)/$(bd)/$(target)) @@ -49,7 +49,7 @@ define stampfile $(call rdep,$(1),$$($(1)/stamp)) $$($(1)/stamp): - @$(MAKE) $(1)/install + @+$(MAKE) $(1)/install @mkdir -p $$$$(dirname $$($(1)/stamp)) @touch $$($(1)/stamp) .PRECIOUS: $$($(1)/stamp) # work around a make bug diff --git a/include/toplevel.mk b/include/toplevel.mk new file mode 100644 index 000000000..d9c16a5ec --- /dev/null +++ b/include/toplevel.mk @@ -0,0 +1,132 @@ +# Makefile for OpenWrt +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +RELEASE:=Kamikaze +#VERSION:=2.0 # uncomment for final release + +all: world + +SHELL:=/usr/bin/env bash +OPENWRTVERSION:=$(RELEASE) +ifneq ($(VERSION),) + OPENWRTVERSION:=$(VERSION) ($(OPENWRTVERSION)) +else + REV:=$(shell LANG=C svn info | awk '/^Revision:/ { print$$2 }' ) + ifneq ($(REV),) + OPENWRTVERSION:=$(OPENWRTVERSION)/r$(REV) + endif +endif +export OPENWRTVERSION + +ifeq ($(FORCE),) + .config scripts/config/conf scripts/config/mconf: tmp/.prereq-build + world: prereq +endif + +SCAN_COOKIE?=$(shell echo $$$$) +export SCAN_COOKIE + +tmp/.packageinfo tmp/.targetinfo prepare-tmpinfo: + @mkdir -p tmp/info + @$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(TOPDIR)/include/package*.mk" SCAN_DEPTH=4 SCAN_EXTRA="" + @$(NO_TRACE_MAKE) -s -f include/scan.mk SCAN_TARGET="targetinfo" SCAN_DIR="target/linux" SCAN_NAME="target" SCAN_DEPS="profiles/*.mk $(TOPDIR)/include/kernel*.mk" SCAN_DEPTH=2 SCAN_EXTRA="" + @for type in package target; do \ + f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ + [ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config < "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ + done + +.config: ./scripts/config/conf prepare-tmpinfo + if [ \! -f .config ]; then \ + [ -e $(HOME)/.openwrt/defconfig ] && cp $(HOME)/.openwrt/defconfig .config; \ + $(NO_TRACE_MAKE) menuconfig; \ + fi + $< -D .config Config.in &> /dev/null + +scripts/config/mconf: + $(MAKE) -C scripts/config all + +scripts/config/conf: + $(MAKE) -C scripts/config conf + +config: scripts/config/conf prepare-tmpinfo FORCE + $< Config.in + +config-clean: FORCE + $(NO_TRACE_MAKE) -C scripts/config clean + +defconfig: scripts/config/conf prepare-tmpinfo FORCE + touch .config + $< -D .config Config.in + +oldconfig: scripts/config/conf prepare-tmpinfo FORCE + $< -o Config.in + +menuconfig: scripts/config/mconf prepare-tmpinfo FORCE + if [ \! -f .config -a -e $(HOME)/.openwrt/defconfig ]; then \ + cp $(HOME)/.openwrt/defconfig .config; \ + fi + $< Config.in + +kernel_oldconfig: .config FORCE + $(NO_TRACE_MAKE) -C target/linux oldconfig + +kernel_menuconfig: .config FORCE + $(NO_TRACE_MAKE) -C target/linux menuconfig + +tmp/.prereq-build: include/prereq-build.mk + mkdir -p tmp + rm -f tmp/.host.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 $@ + +tmp/.prereq-package: tmp/.packageinfo +tmp/.prereq-target: tmp/.targetinfo .config +tmp/.prereq-package tmp/.prereq-target: include/prereq.mk + mkdir -p tmp + rm -f tmp/.host.mk + $(NO_TRACE_MAKE) -s -C $(patsubst tmp/.prereq-%,%,$@) prereq 2>/dev/null || { \ + echo "Prerequisite check failed. Use FORCE=1 to override."; \ + false; \ + } + touch $@ + +prereq: tmp/.prereq-build tmp/.prereq-package tmp/.prereq-target .config FORCE ; + +download: .config FORCE + $(MAKE) -j1 tools/download + $(MAKE) -j1 toolchain/download + $(MAKE) -j1 package/download + $(MAKE) -j1 target/download + +clean dirclean distclean: + @$(MAKE) $@ + +%:: + @$(SUBMAKE) -s prereq QUIET=0 OPENWRT_BUILD= + @$(MAKE) $@ + +help: + cat README + +docs docs/compile: FORCE + $(MAKE) -C docs compile + +docs/clean: FORCE + $(MAKE) -C docs clean + +symlinkclean: + -find package -type l | xargs rm -f + rm -rf tmp + +.SILENT: symlinkclean clean dirclean distclean config-clean download help tmpinfo-clean .config scripts/config/mconf scripts/config/conf menuconfig tmp/.prereq-build tmp/.prereq-package tmp/.prereq-target +.PHONY: help FORCE +.NOTPARALLEL: + diff --git a/include/verbose.mk b/include/verbose.mk index 6b2d6d044..f18e9a2c7 100644 --- a/include/verbose.mk +++ b/include/verbose.mk @@ -8,7 +8,9 @@ ifeq ($(NO_TRACE_MAKE),) NO_TRACE_MAKE := $(MAKE) V=99 +SUBMAKE := $(MAKE) export NO_TRACE_MAKE +export SUBMAKE endif ifndef KBUILD_VERBOSE @@ -29,18 +31,20 @@ endef ifneq ($(KBUILD_VERBOSE),99) ifeq ($(QUIET),1) - $(MAKECMDGOALS): trace - trace: FORCE - @[ -f "$(MAKECMDGOALS)" ] || { \ - [ -z "$${PWD##$$TOPDIR}" ] || DIR=" -C $${PWD##$$TOPDIR/}"; \ - $(call MESSAGE, "make[$$(($(MAKELEVEL)+1))]$$DIR $(MAKECMDGOALS)"); \ - } + ifneq ($(CURDIR),$(TOPDIR)) + _DIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR}) + else + _DIR:= + endif + _NULL:=$(if $(MAKECMDGOALS),$(shell \ + $(call MESSAGE, "make[$(MAKELEVEL)]$(if $(_DIR), -C $(_DIR)) $(MAKECMDGOALS)"); \ + )) else - export QUIET:=1 ifeq ($(KBUILD_VERBOSE),0) MAKE:=&>/dev/null $(MAKE) endif - MAKE:=cmd() { $(MAKE) $$* || { echo "Build failed. Please re-run make with V=99 to see what's going on"; false; } } 3>&1 4>&2; cmd + export QUIET:=1 + MAKE:=cmd() { $(MAKE) $$* || { echo "make $$*: build failed. Please re-run make with V=99 to see what's going on"; false; } } 3>&1 4>&2; cmd endif .SILENT: $(MAKECMDGOALS) diff --git a/rules.mk b/rules.mk index 4d6c7d098..8883cbe5d 100644 --- a/rules.mk +++ b/rules.mk @@ -138,4 +138,3 @@ endef all: FORCE: ; .PHONY: FORCE -%: ;