[M3devel] nt386gnu is posix or win32?
Tony Hosking
hosking at cs.purdue.edu
Thu Jan 10 19:30:55 CET 2008
On Jan 9, 2008, at 6:08 PM, Jay wrote:
> I'm going to be rude and just throw this out there at a time when I
> probably can't discuss it or yet have enough data/diffs to matter.
>
> However, in building NT386GNU -- I can build libm3 and m3core --
> the question arises as to if this target is "win32" or "posix'.
> Currently in the tree it is setup to be "posix", with a fair amount
> of work already done in that direction -- in particular, the Unix
> interfaces.
>
> However, I think this target is potentially an odd beast.
> Potentially it is two targets.
> I guess this mimics cygwin vs. mingwin. Exactly.
>
> The "host" is gcc. In order to build this system, one needs
> "gmake", sh, gcc probably (I'm assuming Visual C++'s compiler/
> linker cannot build m3cg, but very maybe..).
>
> In order to build anything with this system, one needs "as", and
> most likely ld.
> (I quote "as" because it is an English word and confusing to read
> otherwise.)
> Changing it to output assembly for masm or even Visual C++'s inline
> __asm is probably actually viable, but not a tiny short term task.
> (Or maybe writing an as clone that outputs .objs? Maybe using nasm/
> yasm??? Not sure the point, maybe "as" is perfectly ok.)
>
> And then the question arises as to what it takes to run the output.
> As I've said in other topics, the C runtime dependency of Modula-3
> is light -- startup code mainly, but, yeah, also important setjmp/
> longjmp, and multiplication/division helpers sometimes. This could
> perhaps all be statically linked. Certainly for Visual C++ it can be.
> (NOTE: The Cygwin jmp_buf is much larger than Visual C++'s. A
> THOUGHT is to grow them to the same, for object code compatibility,
> but probably not useful, and very wasteful, Cygwin's is much
> larger, the data in the existing code I verified is correct, like
> 0x40 vs. 0xD0 I think it was, I just did printf("%x", sizeof
> (jmp_buf)).)
>
> To get m3core to build, I switched NT386GNU to use Win32 threads.
> For THAT to build, I switched OSTYPE to Win32. Overkill perhaps, in
> order to get the Win32 *.i3 files.
> Overkill perhaps, but it does build.
>
> I fully suspect that old style Posix threads can work easily, and
> that pthreads can work easily, increasing the dependency on
> cygwin1.dll.
User-level (ThreadPosix) threads might work (using setjmp/longjmp for
thread switching -- I guess that is what PM3 used to do). Or did it
use ThreadWin32? I doubt ThreadPThread will work since I don't
think there is a pthreads binding for Win32 threads on NT, or is there?
> While this is the "other" direction, given the dependency on as,
> and gcc to build m3cg, probably the horse is out of the barn.
> This is arguably a simpler answer, less hybrid.
My strong preference is to tread NT386GNU (i.e., Cygwin based) as a
POSIX target, which might happen to use ThreadWin32. That way, the
usual POSIX/Cygwin flavor of things is preserved.
>
>
> I think the analogy to cygwin/mingwin holds, possibly perfectly.
>
> Maybe this is two targets.
> NT386CYGWIN ?
> NT386MINGWIN ?
>
> (Which begs the point -- target naming.... NT386 vs. PPC_LINUX...OS
> +ARCH vs. ARCH + _ + OS, etc... but ARCH and OS aren't it, there is
> toolchain and C runtime in the mix..)
>
> Obviously SOMETHING is better than NOTHING and I have no useful
> binary distribution yet to show, so these questions are all very
> premature.
>
> I'm also unsure as to the "seriousness" of using the GNU tools.
> a) There don't seem to be many users of Modula-3 on Win32.
> b) Will such users accept/trust a non Microsoft toolchain?
> (Just what to do folks do with cygwin/mingwin? Build/ship real
> software?)
>
> From my point of view, the attractive thing about m3cg is I get the
> int64 stuff arguably out of the way easier. :)
>
> Licensing wise..probably a dependency on cygwin1.dll is not desirable.
>
> When I'm further along, er, actually, with my existing libm3.dll/
> m3core.dll, I can see what the dependencies are.
> If it's just setjmp/lonjmp/memset, maybe try static linking (what
> is the licensing of that?) or link to msvcr*.dll.
>
> Maybe see if I can configure to use mingwin to compile/link except
> for m3cc. That sounds excellent.
> You would configure a CYGWIN_ROOT (gcc, ld, make, sh, libs) and a
> MINGWIN_ROOT (gcc, ld, libs). CYGWIN_ROOT would be required for
> building m3cc, and either could be used for building anything
> else. ?? That seems good, though I just thought of it, need more
> time to think and investigate.
>
> Later..
> - Jay
>
>
> Share life as it happens with the new Windows Live. Start sharing!
More information about the M3devel
mailing list