Rebuild of static libraryies will never reaches final image

  • I found a dirty problem in our build system, while i word on the switched to mariadb-client.


    Between two packages can exists hard dependencies.

    This mean, a package had to rebuild, when a package needed package was rebuild.


    I my case, the mariadb/mysql-client is embedded in the kodi.bin.

    After a change at the mysql, it was rebuilded, but not the kodi package.

    Result: the change never reached the final image...


    I looked into the code, and found no solution, that is

    • not a dirty hack
    • run in other problems (infinite loops)


    Solutions i had dropped:

    • clean package, when hard dependency was rebuild
      => This can lead to infinite loop in same cases.
      eg on this dependency: x:host -> rebuild-package -> x:target
      when we clean at x:target, the x:host will build again...
    • add same checks into the package.mk
      we will need this, every static library... too many packages for hacks
    • always a clean build... NOOOOOOOOOO :)

    My only left idea is: split up sources and build paths into different trees. And clean sources and build-paths independed.

    So we can clean the target build, without forcing rebuild host build of a package.

    But this will lead to bigger change. I do not know, if this is the right way.


    Parts we will need:

    • mark which dependency is hard
      maybe as a additional ":hard" suffix in the dependency list

    Anyone same other ideas, opinions?



    Sascha


    Edit:

    Possible new path-tree of build-path

  • I'm not sure I understand the problem.


    I think if you want to monitor dependencies of dependencies we are going to find ourselves going down the rabbit hole...


    better to just do a clean build when enough has changed

  • sorry for the late response. i am actual a bit out of time.


    It is a normal problem, when you use static libraries.

    This are copied into the binaries, you link against.

    But in LE, we do not relink the binaries with new build static libraries.

    The result is, the updated/fixed library, will never reach the final image.

    (and we use much static libraries ;) )

    we do actual the same with the additional linux driver.

  • You would basically have to rebuild all the packages in the dependency chain. Better to do it manually or use a clean build :)