Wolfgang Thaller
Tue, 22 Jul 2003 20:11:03 +0200

> Hi all,
> I've had a request for --enable-threaded-rts support in the Debian
> packages, but I don't want to just build with it as then HOpenGL can't
> be used.
> My hope was that I could share most files and just have a different
> binary or something for the threaded-rts

This is indeed the case. The threaded-rts switch only affects the 
runtime system, that is, libHSrts.a and libHSrts_p.a.
And of course, it affects all programs compiled by GHC; you should also 
ship two versions of the GHC binary itself, so that users can use ghci 
with or without the threaded rts.
Apart from that, you should be able to share everything else. (I think 
you can get away with just one version for the other utilities, they 
should behave the same in both cases.)

>  (it would be even better if a
> threaded-rts enabled binary could have it disabled by a +RTS flag, but 
> I
> don't think this is possible?).

Possible: probably, but replacing all the #ifdefs by runtime checks 
would be quite some work.

> However, various .hi, .a files and HSrts.o also seem to differ. So is
> the best way forward to create two completely separate packages?

HSrts.o contains the same code as libHSrts.a; however, I think it is 
never used; the other .o files are for GHCi, but AFAICT, GHCi never 
loads a second copy of the runtime system (nor should it). I think you 
can ignore this file, but if you want to be absolutely safe, make two 
versions of it or ask SimonM.

As for the .hi files... no idea why they should be different, the 
configure flag absolutely positively doesn't affect how the libraries 
are built - do the hi files perhaps contain a timestamp or something 
else that might change on its own?

In my development builds, I've successfully switched between threaded 
and non-threaded by just "make"ing and "make install"ing in the ghc/rts 
directory, and then re-linking the compiler.