9
0
Fork 0

environment generation: Fix dependencies

The dependencies for generating the environment do not work properly:

- If files are removed from the defaultenv, a subsequent make will not
  update the default environment.
- If CONFIG_DEFAULT_ENVIRONMENT_PATH changes, the default environment
  also will not be regenerated.

This patch fixes this by introducing a cmd_env which has the content of
$(ENV_FILES) in the command so that the if_changed mechanism recognizes
a change when $(ENV_FILE) changes. This also results in a nice "  ENV "
string in the build process.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Sascha Hauer 2012-09-27 10:29:48 +02:00
parent 1bc0a26188
commit c8c49c14ae
3 changed files with 32 additions and 15 deletions

View File

@ -1007,7 +1007,7 @@ endif # CONFIG_MODULES
CLEAN_DIRS += $(MODVERDIR)
CLEAN_FILES += barebox System.map include/generated/barebox_default_env.h \
.tmp_version .tmp_barebox* barebox.bin barebox.map barebox.S \
.tmp_kallsyms* barebox_default_env* barebox.ldr \
.tmp_kallsyms* common/barebox_default_env* barebox.ldr \
scripts/bareboxenv-target barebox-flash-image \
Doxyfile.version barebox.srec barebox.s5p

View File

@ -38,6 +38,7 @@ obj-$(CONFIG_PASSWORD) += password.o
obj-$(CONFIG_MODULES) += module.o
obj-$(CONFIG_FLEXIBLE_BOOTARGS) += bootargs.o
extra-$(CONFIG_MODULES) += module.lds
extra-y += barebox_default_env
ifdef CONFIG_DEFAULT_ENVIRONMENT
$(obj)/startup.o: include/generated/barebox_default_env.h
@ -62,8 +63,19 @@ ENV_FILES := $(shell cd $(srctree); for i in $(DEFAULT_ENVIRONMENT_PATH); do fin
endif # ifdef CONFIG_DEFAULT_ENVIRONMENT
barebox_default_env: $(ENV_FILES)
$(Q)$(srctree)/scripts/genenv $(srctree) $(objtree) $(DEFAULT_ENVIRONMENT_PATH)
#
# Generate a barebox envfs image.
#
# echo $(ENV_FILES) > /dev/null is just for letting if_changed
# recognize that something has changed when the environment has
# other files,
#
quiet_cmd_env = ENV $@
cmd_env = ($(srctree)/scripts/genenv $(srctree) $(objtree) $@ $(DEFAULT_ENVIRONMENT_PATH)) || \
(echo $(ENV_FILES) > /dev/null; rm -f $@ ; false)
$(obj)/barebox_default_env: $(ENV_FILES) FORCE
$(call if_changed,env)
barebox_default_env_comp =
ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED_GZIP),y)
@ -76,18 +88,18 @@ ifeq ($(CONFIG_DEFAULT_ENVIRONMENT_COMPRESSED_LZO),y)
barebox_default_env_comp = .lzo
endif
barebox_default_env.gz: barebox_default_env
$(obj)/barebox_default_env.gz: $(obj)/barebox_default_env
$(call if_changed,gzip)
barebox_default_env.bz2: barebox_default_env
$(obj)/barebox_default_env.bz2: $(obj)/barebox_default_env
$(call if_changed,bzip2)
barebox_default_env.lzo: barebox_default_env
$(obj)/barebox_default_env.lzo: $(obj)/barebox_default_env
$(call if_changed,lzo)
include/generated/barebox_default_env.h: barebox_default_env$(barebox_default_env_comp)
$(Q)cat $< | $(objtree)/scripts/bin2c default_environment > $@
$(Q)echo "const int default_environment_uncompress_size=`stat -c%s barebox_default_env`;" >> $@
include/generated/barebox_default_env.h: $(obj)/barebox_default_env$(barebox_default_env_comp)
$(Q)cat $< | (cd $(obj) && $(objtree)/scripts/bin2c default_environment) > $@
$(Q)echo "const int default_environment_uncompress_size=`stat -c%s $(obj)/barebox_default_env`;" >> $@
# dependencies on generated files need to be listed explicitly
$(obj)/version.o: include/generated/compile.h

View File

@ -1,22 +1,27 @@
#!/bin/bash
# Generate the default environment file from a list of directories
# usage: genenv <basedir> <objdir> <dir>...
# usage: genenv <basedir> <objdir> <target> <dir>...
# where <basedir> is the base directory for relative pathes in <dir>
# where <objdir> is the base directory for relative pathes for result
# and <target> is the resulting binary environment
objtree=$2
cd $1 || exit 1
shift 2
basedir=$1
target=$3
shift 3
tempdir=$(mktemp -d tmp.XXXXXX)
tempdir="$objtree/.barebox_default_env"
mkdir -p "$tempdir"
(cd $basedir
for i in $*; do
cp -r $i/* $tempdir
done
)
find $tempdir -name '.svn' -o -name '*~' | xargs --no-run-if-empty rm -r
$objtree/scripts/bareboxenv -s $tempdir $objtree/barebox_default_env
$objtree/scripts/bareboxenv -s $tempdir $target
rm -r $tempdir