64-bit windows version?
Peter Tanski
p.tanski at gmail.com
Mon Jun 25 16:28:14 EDT 2007
On Jun 25, 2007, at 3:34 PM, skaller wrote:
> On Mon, 2007-06-25 at 13:35 -0400, Peter Tanski wrote:
>
>>> Maybe some gcc mimicing cl wrapper tailored specifically for GHC
>>> building system could help? One more layer of indirection, but
>>> could leave ghc driver relatively intact.
>>
>> That's a good idea! Do you know if or how the mingw-gcc is able to
>> do that? Does mingw-gcc wrap link.exe?
>
> There's more to portable building than the build system.
> For example, for C code, you need a system of macros to support
>
> void MYLIB_EXTERN f();
>
> where MYLIB_EXTERN can be empty, say __declspec(dllexport)
> on Windows when building a DLL, and __declspec(dllimport)
> when using it. This is *mandatory*.
Of course--one thing I would add to a build system, instead of
compiling little C files and testing the return value to detect some
compiler functionality, is the ability to read builtin macros, say,
by telling the compiler to dump all macros like 'gcc -E -dM' and
then read through the macros.
As for the Windows-native build, I am pretty far long with that but
the idea was to hijack the "gcc" executable with a script that would
convert the gcc arguments to cl arguments. The one thing such a
script would not do is compile everything at once. So far that is
one thing I am adding to the Make system here: since dependancy
generation is good for Haskell files but is not necessary for C files
since I can bunch the C sources together with the compiler flags and
pass them cl all at once in a command file. This should be faster
than Make.
> The build system controls the command line switches that
> turn on "We're building a DLL" flag. A distinct macro is needed
> for every DLL.
That is part of the modifications to the runtime system (RTS).
> In Felix, there is another switch which tells the source
> if the code is being built for static linkage or not:
> some macros change when you're linking symbols statically
> compared to using dlsym().. it's messy: the build system
> manages that too.
Sometimes this is better in header files and change the macros with
defines the build system passes to the c compiler but Felix's system
is much more flexible than that (it builds the source files as
interscript extracts them, right?).
> Building Ocaml, you have a choice of native or bytecode,
> and there are some differences. Probably many such things
> for each and every language and variation of just about
> anything .. eg OSX supports two kinds of dynamic libraries.
GHC's interpreter (GHCi) does have to be built. I have not found a
libReadline DLL, but I am sure I can scrounge something--possibly
from Python since they had this same problem back around 2000.
> The point is that a 'Unix' oriented build script probably
> can't be adapted: Unix is different to Windows. The best
> way to adapt to Windows is to use Cygwin.. if you want
> a Windows native system, you have to build in the Windows
> way and make Windows choices. A silly example of that
> is that (at least in the past) Unix lets you link at
> link time against a shared library, whereas Windows
> requires to link against a static thunk ..
> so building a shared library produces TWO outputs
> on Windows.
I am building with Mingw because that is better supported by the GHC
build system (Cygwin is somewhat defunct); the end result should
build from source in Visual Studio/Visual C++ Express.
Cheers,
Pete
More information about the Glasgow-haskell-users
mailing list