I haven't kept track of which M2's would work on the modern Intel based ones.
Mocka might be a reasonable place to start.
https://github.com/trijezdci/MOCKA
I'm afraid but MOCKA only generates elf binaries. On MacOS you need mach-o binaries though.
Now, there is still some mach-o support within the MOCKA sources as there might have been a version for NeXT back in the day and not all of it appears to have been removed in the open source version (which is only for Linux and BSD, all the others were commercial).
I had looked into that with a view to restoring mach-o support in the open source version you linked to. However, I can only work sporadically at these kinds of things and by the time I got back to it, the world had moved on to 64-bit only on desktop OSes. And since MOCKA's backend was generated by a commercial tool for which there are no sources available, this means that MOCKA is pretty much stuck in the 32-bit era. It would be a major effort to try to add 64-bit support to the generated backend code. And the only alternative would be to rip out the backend altogether and replace it with an entirely different one, either hand coded from scratch or a backend generated by an open source backend generator, like say MBurg. I have looked at the latter option as well, but concluded that I don't have the time for such an undertaking. So, I have basically written off MOCKA. I won't do any further maintenance on it, either.
But this also means that I lost my development platform for the bootstrap kernel of my own compiler, which I had initially started writing in C, then transcribed it to classic Modula-2 with some sources needing two versions, one for PIM and one for ISO even though I was mostly working on the PIM side using MOCKA. This made sense from a portability/deployment point of view but it required a lot more effort. So with MOCKA being stuck in the 32-bit era, I have now started to transcribe it all back to C.
https://github.com/m2sf/m2c
One of the major factors why I had put this on hold and transcribed the code to M2 was that the name translation scheme for translating Modula-2 identifiers into C identifiers while taking C's flat namespace into account was far too ambitious and complex, resulting in countless scenarios and a specification of about 20 pages for the name translation alone.
I have now fixed this by restricting the use of lowlines in M2 identifiers to non-leading, non-trailing and non-consecutive occurrences and ignoring any potential name collision cases that may arise from using any naming convention for the Modula-2 sources other than the prevailing camelCase and TitleCase convention. The name translation specification is now down to 1 page and a bit.
https://github.com/m2sf/m2c/wiki/Mapping-Modula-2-Identifiers-to-C
As this allows me to continue work without the sword of Damocles hanging over the development environment, I expect to be doing more work, less sporadically and possibly get the translator part working this year by leaving most of the semantic analysis for later.
But MOCKA is really dead now. Sure, it still works, but only on 32-bit Linux/BSD.
Translating to C won't have that kind of problem :-)
regards
benjamin