• P
    Remove config-devices.mak on 'make clean' · 168340b6
    Peter Maydell 提交于
    Our dependency mechanism works like this:
     * on first build there is neither a .o nor a .d
     * we create the .d as a side effect of creating the .o
     * for rebuilds we know when we need to update the .o,
       which also updates the .d
    
    This system requires that you're never in a situation where there is
    a .o file but no .d (because then we will never realise we need to
    build the .d, and we will not have the dependency information about
    when to rebuild the .o).
    
    This is working fine for our object files, but we also try to use it
    for $TARGET/config-devices.mak (where the dependency file is
    in $TARGET-config-devices.mak.d). Unfortunately "make clean" doesn't
    remove config-devices.mak, which means that it puts us in the
    forbidden situation of "object file exists but not its .d file".
    This in turn means that we will fail to notice when we need to rebuild:
      mkdir build/depbug
      (cd build/depbug && '../../configure')
      make -C build/depbug -j8
      make -C build/depbug clean
      echo "CONFIG_CANARY = y" >> default-configs/arm-softmmu.mak
      make -C build/depbug
      grep CANARY build/depbug/aarch64-softmmu/config-devices.mak
    
    The CANARY token should show up in config-devices.mak but does not.
    
    Fix this bug by making "make clean" delete the config-devices.mak files.
    config-all-devices.mak doesn't have the same problem since it has
    no .d file, but delete it too, since it is created by "make" and
    logically should be removed by "make clean".
    
    (Note that it is important not to remove config-devices.mak until
    after we have recursively run 'make clean' in the subdirectories.)
    Signed-off-by: NPeter Maydell <peter.maydell@linaro.org>
    Message-Id: <1463484451-22979-1-git-send-email-peter.maydell@linaro.org>
    Signed-off-by: NPaolo Bonzini <pbonzini@redhat.com>
    168340b6
Makefile 22.4 KB