Skip to content
Snippets Groups Projects
  • est31's avatar
    e29b61ec
    Android: speed up rebuild, and prevent race condition fail · e29b61ec
    est31 authored
    Speeding up rebuild:
    
    Before, we've written the android_version.h file at every rebuild.
    As it thought the file's content has changed, make has rebuilt files
    in the source tree that depended on that header file during rebuild,
    causing lots of files being rebuilt without there being a reason.
    
    The reasoning of make can be observed by passing -d and V=1 params
    to the ndk-build command. You then got logging entries like:
    
    Prerequisite `jni/src/android_version.h' is newer than target `obj/local/armeabi-v7a-hard/objs-debug/minetest/jni/src/areastore.o'.
    
    Preventing race condition build fail:
    
    Before, there was a race condition, where, if the prep_srcdir target
    was executed in parallel with the $(ROOT)/jni/src/android_version.h
    one, it could happen that the jni/src directory was nonexistent, and
    we were trying to write into a file inside. This resulted in a build
    failue:
    
    /bin/sh: 1: cannot create [...]/jni/src/android_version.h: Directory nonexistent
    
    Additionally, we now don't remove the link to src/ needlessly anymore.
    Keeping this wouldn't have affected the rebuild, but this way its
    more proper.
    e29b61ec
    History
    Android: speed up rebuild, and prevent race condition fail
    est31 authored
    Speeding up rebuild:
    
    Before, we've written the android_version.h file at every rebuild.
    As it thought the file's content has changed, make has rebuilt files
    in the source tree that depended on that header file during rebuild,
    causing lots of files being rebuilt without there being a reason.
    
    The reasoning of make can be observed by passing -d and V=1 params
    to the ndk-build command. You then got logging entries like:
    
    Prerequisite `jni/src/android_version.h' is newer than target `obj/local/armeabi-v7a-hard/objs-debug/minetest/jni/src/areastore.o'.
    
    Preventing race condition build fail:
    
    Before, there was a race condition, where, if the prep_srcdir target
    was executed in parallel with the $(ROOT)/jni/src/android_version.h
    one, it could happen that the jni/src directory was nonexistent, and
    we were trying to write into a file inside. This resulted in a build
    failue:
    
    /bin/sh: 1: cannot create [...]/jni/src/android_version.h: Directory nonexistent
    
    Additionally, we now don't remove the link to src/ needlessly anymore.
    Keeping this wouldn't have affected the rebuild, but this way its
    more proper.