cross-compiling with GHC
p.tanski at gmail.com
Sun Dec 17 19:55:51 EST 2006
Ian Lynagh wrote,
> On Fri, Dec 15, 2006 at 03:08:24PM -0800, Mathew Mills wrote:
>> I want to be able to build a version of GHC that runs on x86 but
>> generates binaries that will run natively on x86_64.
> I don't think there would be any major technical difficulties in
> support, just a lot of assumptions in the compiler, libraries and
> system that we are generating code for the architecture that we are
> so it could eat quite a bit of time.
Cross compiling using -fvia-C would seem to be easier (assuming your
GCC is a cross-compiler) and of course you would have to build an
x86_64 version of the RTS and other libraries that may be linked in
(currently, statically except on OS X, but that may change soon since
Wolfgang Thaller got PIC going in the Native Code Generator (NCG),
see Commentary/PositionIndependentCode). As for other settings, the
Mangler (driver/mangler/ghc-asm.lprl), for example, runs according to
$TargetPlatform, set by the build system into one small Perl script
("ghc-asm")--you would need to change the build system and the
compiler commands to use different targets.
One of the worst problems is the NCG: it currently targets only one
architecture (machine, OS) as it is pieced together by conditional
defines from the build system. The right way to go about doing cross-
compilation with the NCG involves moving the architecture specific
parts into separate modules and binding them into the compiler with
dynamic options. To my knowledge, this is a far-off goal. The
benefit (from what I am doing) would be the ability to use a simple
cross-compiling assembler to assemble the code generated by the NCG
for a number of different architectures (x86, x86_64, including AMD)
and different file formats (COFF, Win32-COFF, OBJ, ELF). I am
currently modifying GHC to use the Yasm modular assembler <http://
www.tortall.net/projects/yasm/> for Windows-native code but it would
also be usable for other x86 architectures.
I have been rooting around in the system for a little while now--
including command options, NCG modifications and the build system, so
if you have any questions feel free to ask.
More information about the Cvs-ghc