Menu

Supporting cross-compilation

Help
2009-10-02
2013-03-15
  • Henrik Goldman

    Henrik Goldman - 2009-10-02

    In our environment we support cross compilation of our code for different target platforms. E.g. it could be that we compile on a 32 bit compiler and target a 64 bit system.

    For this environment we have split up the compilation of the tools that bootstrap the compilation and the compilation itself.
    In other words internal build tools are first compiled manually using one set of environment variables and then target compilation is compiled next with other environment variables.

    This seperation is causing problems with makepp. Since we don't want the host-arch tools to be re-compiled when we're compiling the target-arch then we naturally don't reference the makefiles.

    This causes other warnings though like:

    makepp: warning: `/private/var/root/host-arch/tool' is a stale file generated by makepp,
      but there is no rule to build it any more.  Makepp assumes that it
      is now a source file.  If this is correct, then you should add it
      to your source control system (if any), and touch the file to make
      this warning go away.  Otherwise, you should remove the file,
      because the targets that depend on it will not be reproducible.
      makepp -rm-stale would automatically do this for you.

    Is there a way we can solve this and make makepp realize that these are do-not-touch things?

    Thanks.
    Henrik

     
  • Daniel Pfeiffer

    Daniel Pfeiffer - 2009-10-04

    Hi Henrik,

    from your warning I suppose that you have separate hierarchies for host-arch and target-arch?  In that case, if you're willing to always call mpp separately in both, it's easy: put a RootMakeppfile in each.  That has the side effect of separating everything in the tree, from everything outside (default -dont-build).  That way the host-arch will only be attempted to build when actually calling mpp there.

    regards - Daniel

     
  • Anonymous

    Anonymous - 2010-04-25

    Unfortunately this has a side effect.

    In a particular case I need a shared library from the host directory. With this change I get:
    "makepp: error: Not building inexistent `/cygdrive/c/test/shared/generic/temp/win32_x86_vc2008/sharedgeneric.lib' because it's marked for dont-build"

    Can I conditionally make inside RootMakeppfile that only this subdirectory must be build after all?

     
  • Daniel Pfeiffer

    Daniel Pfeiffer - 2010-04-27

    Hi Henrik,

    mpp --do-build=/private/var/root/host-arch/tool --dont-build=/private/var/root/host-arch/tool/only-host
    

    will allow building anything under tool, even though the RootMakeppfile further up declared the whole tree off limits.  If you need more directories you can repeat this option.  If some subdirectory there, is not to be built, add the 2nd opt in my example.

    regards - Daniel

     
  • Anonymous

    Anonymous - 2010-04-28

    Is there no option to do the same from the make files? I don't see this as a solution. To build our code we should be able to type "makepp" from anywhere without further subcommands. The idea of the rootmakeppfile should be to stop scanning particular paths.

    Alternatively is there a way we can stop makepp to not load particular makefiles and ignore the dependencies.

     
  • Daniel Pfeiffer

    Daniel Pfeiffer - 2010-04-29

    Not from the makefile, but you can put options permanently associated with a directory hierarchy into a file .makepprc at its top.

     
  • Anonymous

    Anonymous - 2010-05-03

    I don't like the idea though. The idea about makefiles is to specify all the rules of how to build code. Thus I see it as a annoyance that you'd have to specify it somewhere else.

    What if I would disable implicit loading and then loading all directories manually… will this still cause "stale files" warnings?

     

Log in to post a comment.