X-Git-Url: https://repo.jachan.dev/buildroot-mgba.git/blobdiff_plain/912ea81ad4a2f1b6a87c9cebfefdbbf1f60f526a..468a0032ad81ee37e146685630d5073d8cc6b702:/Makefile diff --git a/Makefile b/Makefile index 7fe30a7bea..fed6e124b9 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # Makefile for buildroot2 # # Copyright (C) 1999-2005 by Erik Andersen <andersen@codepoet.org> -# Copyright (C) 2006-2009 by the Buildroot developers <buildroot@uclibc.org> +# Copyright (C) 2006-2010 by the Buildroot developers <buildroot@uclibc.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -22,14 +22,16 @@ # Just run 'make menuconfig', configure stuff, then run 'make'. # You shouldn't need to mess with anything beyond this point... #-------------------------------------------------------------- -TOPDIR:=. +# absolute path +TOPDIR:=$(shell pwd) CONFIG_CONFIG_IN=Config.in CONFIG_DEFCONFIG=.defconfig CONFIG=package/config DATE:=$(shell date +%Y%m%d) noconfig_targets:=menuconfig xconfig config oldconfig randconfig \ - defconfig allyesconfig allnoconfig release tags \ + defconfig allyesconfig allnoconfig release \ + randpackageconfig allyespackageconfig allnopackageconfig \ source-check help # Strip quotes and then whitespaces @@ -195,7 +197,7 @@ PREFERRED_LIB_FLAGS:=--enable-static --enable-shared # along with the packages to build for the target. # ############################################################## -ifeq ($(BR2_TOOLCHAIN_SOURCE),y) +ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) BASE_TARGETS:=uclibc-configured binutils cross_compiler uclibc-target-utils kernel-headers else BASE_TARGETS:=uclibc @@ -230,7 +232,12 @@ else MAKEOVERRIDES = endif -BASE_DIR := $(shell mkdir -p $(O) && cd $(O) && pwd) +# bash prints the name of the directory on 'cd <dir>' if CDPATH is +# set, so unset it here to not cause problems. Notice that the export +# line doesn't affect the environment of $(shell ..) calls, so +# explictly throw away any output from 'cd' here. +export CDPATH:= +BASE_DIR := $(shell mkdir -p $(O) && cd $(O) >/dev/null && pwd) $(if $(BASE_DIR),, $(error output directory "$(O)" does not exist)) DL_DIR=$(call qstrip,$(BR2_DL_DIR)) @@ -255,11 +262,9 @@ TARGET_DIR:=$(BASE_DIR)/target # define values for prepatched source trees for toolchains VENDOR_SITE:=$(call qstrip,$(BR2_VENDOR_SITE)) -VENDOR_SUFFIX:=$(call qstrip,$(BR2_VENDOR_SUFFIX)) VENDOR_BINUTILS_RELEASE:=$(call qstrip,$(BR2_VENDOR_BINUTILS_RELEASE)) VENDOR_GCC_RELEASE:=$(call qstrip,$(BR2_VENDOR_GCC_RELEASE)) VENDOR_UCLIBC_RELEASE:=$(call qstrip,$(BR2_VENDOR_UCLIBC_RELEASE)) -VENDOR_GDB_RELEASE:=$(call qstrip,$(BR2_VENDOR_GDB_RELEASE)) VENDOR_PATCH_DIR:=$(call qstrip,$(BR2_VENDOR_PATCH_DIR)) BR2_DEPENDS_DIR=$(BUILD_DIR)/buildroot-config @@ -282,7 +287,7 @@ include .config.cmd # We also need the various per-package makefiles, which also add # each selected package to TARGETS if that package was selected # in the .config file. -ifeq ($(BR2_TOOLCHAIN_SOURCE),y) +ifeq ($(BR2_TOOLCHAIN_BUILDROOT),y) # avoid pulling in external toolchain which is broken for toplvl parallel builds # Explicit ordering: include toolchain/dependencies/dependencies.mk @@ -337,7 +342,7 @@ $(BASE_TARGETS): dirs world: dependencies dirs $(BASE_TARGETS) $(TARGETS_ALL) -.PHONY: all world dirs clean dirclean distclean source \ +.PHONY: all world dirs clean distclean source \ $(BASE_TARGETS) $(TARGETS) $(TARGETS_ALL) \ $(TARGETS_CLEAN) $(TARGETS_DIRCLEAN) $(TARGETS_SOURCE) \ $(DL_DIR) $(TOOLCHAIN_DIR) $(BUILD_DIR) $(STAGING_DIR) $(TARGET_DIR) \ @@ -366,6 +371,7 @@ ifneq ($(BR2_TOOLCHAIN_EXTERNAL),y) endif endif @mkdir -p $(STAGING_DIR)/usr/include + @mkdir -p $(STAGING_DIR)/usr/bin $(BUILD_DIR)/.root: mkdir -p $(TARGET_DIR) @@ -379,7 +385,7 @@ $(BUILD_DIR)/.root: touch $(STAGING_DIR)/.fakeroot.00000; \ fi -find $(TARGET_DIR) -type d -name CVS -print0 -o -name .svn -print0 | xargs -0 rm -rf - -find $(TARGET_DIR) -type f -name .empty -print0 | xargs -0 rm -rf + -find $(TARGET_DIR) -type f \( -name .empty -o -name '*~' \) -print0 | xargs -0 rm -rf touch $@ $(TARGET_DIR): $(BUILD_DIR)/.root @@ -438,24 +444,14 @@ external-deps: @$(MAKE) -Bs BR2_WGET=$(TOPDIR)/toolchain/wget-show-external-deps.sh \ SPIDER=--spider source -############################################################# -# -# Cleanup and misc junk -# -############################################################# -clean: $(TARGETS_CLEAN) - rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE) $(BUILD_DIR)/.root $(STAMP_DIR) - -dirclean: $(TARGETS_DIRCLEAN) - rm -rf $(STAGING_DIR) $(TARGET_DIR) $(IMAGE) $(BUILD_DIR)/.root $(STAMP_DIR) +ifeq ($(BR2_CONFIG_CACHE),y) +# drop configure cache if configuration is changed +$(BUILD_DIR)/tgt-config.cache: .config + rm -f $@ + touch $@ -distclean: -ifeq ($(DL_DIR),$(TOPDIR)/dl) - rm -rf $(DL_DIR) +$(BASE_TARGETS): | $(BUILD_DIR)/tgt-config.cache endif - rm -rf $(TOOLCHAIN_DIR) $(BUILD_DIR) $(BINARIES_DIR) \ - .config.cmd - $(MAKE) -C $(CONFIG) clean else # ifeq ($(BR2_HAVE_DOT_CONFIG),y) @@ -528,7 +524,6 @@ allyesconfig: $(CONFIG)/conf @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -y $(CONFIG_CONFIG_IN) - #sed -i -e "s/^CONFIG_DEBUG.*/# CONFIG_DEBUG is not set/" .config allnoconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @@ -536,6 +531,33 @@ allnoconfig: $(CONFIG)/conf KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ $(CONFIG)/conf -n $(CONFIG_CONFIG_IN) +randpackageconfig: $(CONFIG)/conf + @mkdir -p $(CONFIG)/buildroot-config + @grep -v BR2_PACKAGE_ .config > .config.nopkg + @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ + KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ + KCONFIG_ALLCONFIG=.config.nopkg \ + $(CONFIG)/conf -r $(CONFIG_CONFIG_IN) + @rm -f .config.nopkg + +allyespackageconfig: $(CONFIG)/conf + @mkdir -p $(CONFIG)/buildroot-config + @grep -v BR2_PACKAGE_ .config > .config.nopkg + @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ + KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ + KCONFIG_ALLCONFIG=.config.nopkg \ + $(CONFIG)/conf -y $(CONFIG_CONFIG_IN) + @rm -f .config.nopkg + +allnopackageconfig: $(CONFIG)/conf + @mkdir -p $(CONFIG)/buildroot-config + @grep -v BR2_PACKAGE_ .config > .config.nopkg + @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ + KCONFIG_AUTOHEADER=$(CONFIG)/buildroot-config/autoconf.h \ + KCONFIG_ALLCONFIG=.config.nopkg \ + $(CONFIG)/conf -n $(CONFIG_CONFIG_IN) + @rm -f .config.nopkg + defconfig: $(CONFIG)/conf @mkdir -p $(CONFIG)/buildroot-config @KCONFIG_AUTOCONFIG=$(CONFIG)/buildroot-config/auto.conf \ @@ -546,27 +568,33 @@ defconfig: $(CONFIG)/conf source-check: allyesconfig $(MAKE) _source-check +endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) + ############################################################# # # Cleanup and misc junk # ############################################################# clean: - rm -f .config .config.old .config.cmd .tmpconfig.h .lognr.* - -$(MAKE) -C $(CONFIG) clean + rm -rf $(STAGING_DIR) $(TARGET_DIR) $(BINARIES_DIR) $(HOST_DIR) \ + $(STAMP_DIR) $(BUILD_DIR) $(TOOLCHAIN_DIR) distclean: clean - rm -rf sources/* - - -endif # ifeq ($(BR2_HAVE_DOT_CONFIG),y) +ifeq ($(DL_DIR),$(TOPDIR)/dl) + rm -rf $(DL_DIR) +endif +ifeq ($(O),output) + rm -rf $(O) +endif + rm -rf .config .config.old .config.cmd .auto.deps + -$(MAKE) -C $(CONFIG) clean flush: rm -f $(BUILD_DIR)/tgt-config.cache -%_defconfig: $(CONFIG)/conf - cp $(shell find ./target/ -name $@) .config - -@$(MAKE) oldconfig +%_defconfig: $(TOPDIR)/configs/%_defconfig + cp $^ .config + @$(MAKE) oldconfig configured: dirs host-sed kernel-headers uclibc-config busybox-config linux26-config @@ -576,7 +604,7 @@ cross: $(BASE_TARGETS) help: @echo 'Cleaning:' - @echo ' clean - delete temporary files created by build' + @echo ' clean - delete all files created by build' @echo ' distclean - delete all non-source files (including .config)' @echo @echo 'Build:' @@ -584,11 +612,16 @@ help: @echo @echo 'Configuration:' @echo ' menuconfig - interactive curses-based configurator' - @echo ' xconfig - interactive Qt-based configurator' + @echo ' xconfig - interactive Qt-based configurator' @echo ' oldconfig - resolve any unresolved symbols in .config' + @echo ' randconfig - New config with random answer to all options' + @echo ' defconfig - New config with default answer to all options' + @echo ' allyesconfig - New config where all options are accepted with yes' + @echo ' allnoconfig - New config where all options are answered with no' + @echo ' randpackageconfig - New config with random answer to package options' + @echo ' allyespackageconfig - New config where pkg options are accepted with yes' + @echo ' allnopackageconfig - New config where package options are answered with no' @echo ' configured - make {uclibc/busybox/linux26}-config' - @echo ' saveconfig - save current configuration under local/<project>' - @echo ' getconfig - restore saved configuration from local/<project>' @echo @echo 'Miscellaneous:' @echo ' source - download all sources needed for offline-build' @@ -596,15 +629,15 @@ help: @echo ' external-deps - list external packages used' @echo ' flush - flush configuration cache' @echo + @$(foreach b, $(notdir $(wildcard $(TOPDIR)/configs/*_defconfig)), \ + printf " %-35s - Build for %s\\n" $(b) $(b:_defconfig=);) + @echo @echo 'See docs/README and docs/buildroot.html for further details' @echo -release: distclean +release: OUT=buildroot-$$(grep -A2 BR2_VERSION $(CONFIG_CONFIG_IN)|grep default|cut -f2 -d\"); \ - rm -rf ../$$OUT*; cp -al . ../$$OUT; cd ..; \ - tar cfz $$OUT.tar.gz --exclude .svn --exclude .git --exclude \*~ $$OUT; \ - rm -rf $$OUT + git archive --format=tar --prefix=$$OUT/ master|gzip -9 >$$OUT.tar.gz -.PHONY: dummy subdirs release distclean clean config oldconfig \ - menuconfig xconfig tags check test depend defconfig help +.PHONY: $(noconfig_targets)