Skip to content
  • Simon Marlow's avatar
    [project @ 2005-01-28 12:55:17 by simonmar] · 153b9cb9
    Simon Marlow authored
    Rationalise the BUILD,HOST,TARGET defines.
    
    Recall that:
    
      - build is the platform we're building on
      - host is the platform we're running on
      - target is the platform we're generating code for
    
    The change is that now we take these definitions as applying from the
    point of view of the particular source code being built, rather than
    the point of view of the whole build tree.
    
    For example, in RTS and library code, we were previously testing the
    TARGET platform.  But under the new rule, the platform on which this
    code is going to run is the HOST platform.  TARGET only makes sense in
    the compiler sources.
    
    In practical terms, this means that the values of BUILD, HOST & TARGET
    may vary depending on which part of the build tree we are in.
    
    Actual changes:
    
     - new file: includes/ghcplatform.h contains platform defines for
       the RTS and library code.
    
     - new file: includes/ghcautoconf.h contains the autoconf settings
       only (HAVE_BLAH).  This is so that we can get hold of these
       settings independently of the platform defines when necessary
       (eg. in GHC).
    
     - ghcconfig.h now #includes both ghcplatform.h and ghcautoconf.h.
    
     - MachRegs.h, which is included into both the compiler and the RTS,
       now has to cope with the fact that it might need to test either
       _TARGET_ or _HOST_ depending on the context.
    
     - the compiler's Makefile now generates
         stage{1,2,3}/ghc_boot_platform.h
       which contains platform defines for the compiler.  These differ
       depending on the stage, of course: in stage2, the HOST is the
       TARGET of stage1.  This was wrong before.
    
     - The compiler doesn't get platform info from Config.hs any more.
       Previously it did (sometimes), but unless we want to generate
       a new Config.hs for each stage we can't do this.
    
     - GHC now helpfully defines *_{BUILD,HOST}_{OS,ARCH} automatically
       in CPP'd Haskell source.
    
     - ghcplatform.h defines *_TARGET_* for backwards compatibility
       (ghcplatform.h is included by ghcconfig.h, which is included by
       config.h, so code which still #includes config.h will get the TARGET
       settings as before).
    
     - The Users's Guide is updated to mention *_HOST_* rather than
       *_TARGET_*.
    
     - coding-style.html in the commentary now contains a section on
       platform defines.  There are further doc updates to come.
    
    Thanks to Wolfgang Thaller for pointing me in the right direction.
    153b9cb9