www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - GDC CI on MacOS, FreeBSD, Windows

reply wjoe <invalid example.com> writes:
The approach I took for building, testing and creating a tarball 
for Linux is to build a Docker container which contains enough of 
an installation of the latest Debian with all the dependencies 
necessary to build GDC.

In order to move forward the next targets I want to add are Mac 
OS, FreeBSD, and Windows (but not necessarily in that order) and 
I want to build Docker containers for those like I did for Linux.

Which versions are relevant ?
Sep 18 2020
next sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2020-09-18 15:46, wjoe wrote:
 The approach I took for building, testing and creating a tarball for 
 Linux is to build a Docker container which contains enough of an 
 installation of the latest Debian with all the dependencies necessary to 
 build GDC.
 
 In order to move forward the next targets I want to add are Mac OS, 
 FreeBSD, and Windows (but not necessarily in that order) and I want to 
 build Docker containers for those like I did for Linux.
 
 Which versions are relevant ?
macOS and FreeBSD don't support Docker. FreeBSD has similar features (at least some of them) that Docker is built on. macOS doesn't. For macOS, DMD and LDC support 10.7 (I think). Only supporting 10.9 and later wouldn't be any problem, in my opinion. I know that Iain has talked about supporting GDC on macOS on PowerPC. That means something like 10.4, which is ancient. -- /Jacob Carlborg
Sep 18 2020
next sibling parent reply wjoe <invalid example.com> writes:
On Friday, 18 September 2020 at 14:32:15 UTC, Jacob Carlborg 
wrote:
 On 2020-09-18 15:46, wjoe wrote:
 [...]
macOS and FreeBSD don't support Docker. FreeBSD has similar features (at least some of them) that Docker is built on. macOS doesn't.
That's unfortunate.
 For macOS, DMD and LDC support 10.7 (I think). Only supporting 
 10.9 and later wouldn't be any problem, in my opinion.

 I know that Iain has talked about supporting GDC on macOS on 
 PowerPC. That means something like 10.4, which is ancient.
Speaking of ancient... The most recent contact I had with macOs was around version 8.5 :)
Sep 18 2020
next sibling parent Jacob Carlborg <doob me.com> writes:
On 2020-09-18 17:05, wjoe wrote:

 Speaking of ancient... The most recent contact I had with macOs was 
 around version 8.5 :)
Funny thing. Back then it was call "Mac OS", which is now referred to as "Classic Mac OS". After Mac OS 9, they release Mac OS X 10.0, which was a completely new OS. At some point it was renamed to only OS X. Then a couple of years ago it was renamed to macOS, to better match with Apple's other OSes: iOS, tvOS and iPadOS. Full circle, just different capitalization :) -- /Jacob Carlborg
Sep 18 2020
prev sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2020-09-18 17:05, wjoe wrote:

 That's unfortunate.
Yes. Docker depends on several features only available in the Linux kernel. Docker is more a less a nice package to interact with these features. I can mention that there's something call "Docker for Mac" (and Windows). But that just installs a highly optimized virtual machine running Linux. Some command line tools that will interact, from the Mac host, with Docker on the VM. So you get Linux containers on Mac. Windows do support native containers, in addition to the above. -- /Jacob Carlborg
Sep 18 2020
parent reply wjoe <invalid example.com> writes:
On Friday, 18 September 2020 at 15:23:05 UTC, Jacob Carlborg 
wrote:
 On 2020-09-18 17:05, wjoe wrote:

 That's unfortunate.
Yes. Docker depends on several features only available in the Linux kernel. Docker is more a less a nice package to interact with these features. I can mention that there's something call "Docker for Mac" (and Windows). But that just installs a highly optimized virtual machine running Linux. Some command line tools that will interact, from the Mac host, with Docker on the VM. So you get Linux containers on Mac.
I'm not sure if that would work since macOs itself runs in a VM at CirrusCI. Also they support Dockerfiles directly. So if Docker were available I would just have to make the Dockerfile with a pre-installed environment, ready to build GDC, and add that to the matrix and adapt the build script. But then again CirrusCI may not be the best CI provider in this scenario and if there's something else... I mean there's no hard requirement to use Cirrus.
 Windows do support native containers, in addition to the above.
As for Windows, if memory serves the way to build gcc on Windows was by using MinGW. But last thing I heard was that Windows 10 has Windows Subsystem for Linux and I wouldn't be surprised if that was a VM with a Linux installation and some interface to be able to interact with the Windows host.
Sep 18 2020
next sibling parent reply Jacob Carlborg <doob me.com> writes:
On 2020-09-18 17:55, wjoe wrote:

 I'm not sure if that would work since macOs itself runs in a VM at 
 CirrusCI.
As I said, that will give you a Linux container. Not what you're looking for.
 But last thing I heard was that Windows 10 has Windows Subsystem for 
 Linux and I wouldn't be surprised if that was a VM with a Linux 
 installation and some interface to be able to interact with the Windows 
 host.
No, it's the actual Linux kernel running side-by-side with the Windows kernel. Anything you compile there will give you a Linux binary. -- /Jacob Carlborg
Sep 18 2020
parent wjoe <invalid example.com> writes:
On Friday, 18 September 2020 at 18:21:37 UTC, Jacob Carlborg 
wrote:
 On 2020-09-18 17:55, wjoe wrote:

 [...]

 But last thing I heard was that Windows 10 has Windows 
 Subsystem for Linux and I wouldn't be surprised if that was a 
 VM with a Linux installation and some interface to be able to 
 interact with the Windows host.
No, it's the actual Linux kernel running side-by-side with the Windows kernel. Anything you compile there will give you a Linux binary.
Thanks for the clarification.
Sep 18 2020
prev sibling parent Iain Buclaw <ibuclaw gdcproject.org> writes:
On Friday, 18 September 2020 at 15:55:10 UTC, wjoe wrote:
 Windows do support native containers, in addition to the above.
As for Windows, if memory serves the way to build gcc on Windows was by using MinGW. But last thing I heard was that Windows 10 has Windows Subsystem for Linux and I wouldn't be surprised if that was a VM with a Linux installation and some interface to be able to interact with the Windows host.
Cygwin should also work as well, and that might be easier to get set-up as a baseline to bootstrap newer versions of gcc if required. If you've got one working, it should be trivial to have the other. The difference should only be what extern(C) bindings are pulled into druntime.
Sep 18 2020
prev sibling parent reply Iain Buclaw <ibuclaw gdcproject.org> writes:
On Friday, 18 September 2020 at 14:32:15 UTC, Jacob Carlborg 
wrote:
 On 2020-09-18 15:46, wjoe wrote:
 The approach I took for building, testing and creating a 
 tarball for Linux is to build a Docker container which 
 contains enough of an installation of the latest Debian with 
 all the dependencies necessary to build GDC.
 
 In order to move forward the next targets I want to add are 
 Mac OS, FreeBSD, and Windows (but not necessarily in that 
 order) and I want to build Docker containers for those like I 
 did for Linux.
 
 Which versions are relevant ?
macOS and FreeBSD don't support Docker. FreeBSD has similar features (at least some of them) that Docker is built on. macOS doesn't. For macOS, DMD and LDC support 10.7 (I think). Only supporting 10.9 and later wouldn't be any problem, in my opinion. I know that Iain has talked about supporting GDC on macOS on PowerPC. That means something like 10.4, which is ancient.
Yeah, I know people who still maintain this hardware (I've even donated a PPC Mac Xserve G5 to them!) Newer versions of OSX just add on top of former, so there's nothing wrong about restricting yourself to a common subset of the available API to bind druntime to.
Sep 18 2020
parent reply Jacob Carlborg <doob me.com> writes:
On 2020-09-19 02:38, Iain Buclaw wrote:

 Yeah, I know people who still maintain this hardware (I've even donated 
 a PPC Mac Xserve G5 to them!)
There was someone posting on the Clang mailing list this year or last year about about some issue with PowerPC. Apparently he was a MacPorts maintainer and they have enough users for it to make sense to still support MacPorts on PowerPC.
 Newer versions of OSX just add on top of former, so there's nothing 
 wrong about restricting yourself to a common subset of the available API 
 to bind druntime to.
Well, if I recall correctly, 10.4 is a bit too limiting. The Posix support was really bad. Fortunately, 10.5 was the last version to support running of PowerPC. That version also comes with quite a nice set of features. Certified to be UNIX compliant (but that's only when running Intel), support for 64-bit versions of many of the system libraries. Objective-C 2.0. 10.6 was the last version to support Rosetta (running PowerPC binaries emulated on Intel). So I would say, 10.5 if you want to run PowerPC natively. The nice thing with macOS is that you can compile on newer versions of the OS and compile it to be backwards compatible using the `MACOSX_DEPLOYMENT_TARGET` environment variable. Just specify the version of the OS you want to target as the value: MACOSX_DEPLOYMENT_TARGET=10.6 clang main.c -- /Jacob Carlborg
Sep 18 2020
parent reply Iain Buclaw <ibuclaw gdcproject.org> writes:
On Saturday, 19 September 2020 at 06:22:44 UTC, Jacob Carlborg 
wrote:
 On 2020-09-19 02:38, Iain Buclaw wrote:

 Yeah, I know people who still maintain this hardware (I've 
 even donated a PPC Mac Xserve G5 to them!)
There was someone posting on the Clang mailing list this year or last year about about some issue with PowerPC. Apparently he was a MacPorts maintainer and they have enough users for it to make sense to still support MacPorts on PowerPC.
 Newer versions of OSX just add on top of former, so there's 
 nothing wrong about restricting yourself to a common subset of 
 the available API to bind druntime to.
Well, if I recall correctly, 10.4 is a bit too limiting. The Posix support was really bad. Fortunately, 10.5 was the last version to support running of PowerPC. That version also comes with quite a nice set of features. Certified to be UNIX compliant (but that's only when running Intel), support for 64-bit versions of many of the system libraries. Objective-C 2.0. 10.6 was the last version to support Rosetta (running PowerPC binaries emulated on Intel). So I would say, 10.5 if you want to run PowerPC natively.
The default minimum supported version in GCC is the last release that supported PPC, i386 and x86_64. So it could be that you're misremembering 10.4; I think the Mac-mini I have is 10.6, though not too sure about that. The only certain thing I know is that it's too old to be upgraded to a newer version. :-)
Sep 20 2020
parent reply Jacob Carlborg <doob me.com> writes:
On Sunday, 20 September 2020 at 14:32:58 UTC, Iain Buclaw wrote:

 The default minimum supported version in GCC is the last 
 release that supported PPC, i386 and x86_64.  So it could be 
 that you're misremembering 10.4;
Yes, that's probably the case.
 I think the Mac-mini I have is  10.6, though not too sure about 
 that.
According to Wikipedia, 10.5 is the last version to natively support PPC. And 10.6 is the last version to support running PPC binaries through emulation (Rosetta).
 The only certain thing I know is that it's too old to be 
 upgraded to a newer version. :-)
Hehe. -- /Jacob Carlborg
Sep 22 2020
parent reply wjoe <invalid example.com> writes:
On Tuesday, 22 September 2020 at 10:23:34 UTC, Jacob Carlborg 
wrote:
 On Sunday, 20 September 2020 at 14:32:58 UTC, Iain Buclaw wrote:

 [ conversation about macOS versions ... ]
All of this is very interesting but at the same time I'm more confused now than I was before :S
Sep 22 2020
parent reply Jacob Carlborg <doob me.com> writes:
On 2020-09-22 12:47, wjoe wrote:

 All of this is very interesting but at the same time I'm more confused 
 now than I was before :S
It depends if emulation is acceptable or not, I cannot answer that. If it is, go with 10.6. Otherwise go with 10.5. What you can do is compile the code on any version of macOS any specify the `MACOSX_DEPLOYMENT_TARGET` environment variable, like this: MACOSX_DEPLOYMENT_TARGET=10.6 clang main.c -- /Jacob Carlborg
Sep 22 2020
parent wjoe <invalid example.com> writes:
On Tuesday, 22 September 2020 at 18:36:30 UTC, Jacob Carlborg 
wrote:
 On 2020-09-22 12:47, wjoe wrote:

 All of this is very interesting but at the same time I'm more 
 confused now than I was before :S
It depends if emulation is acceptable or not, I cannot answer that. If it is, go with 10.6. Otherwise go with 10.5. What you can do is compile the code on any version of macOS any specify the `MACOSX_DEPLOYMENT_TARGET` environment variable, like this: MACOSX_DEPLOYMENT_TARGET=10.6 clang main.c
I see. What they are using at Cirrus [1] is Anka Virtualization [2]. They offer High Sierra out of the box but it's possible to build images yourself. This Packer template [3] looks somewhat akin to Dockerfile. Anyways, thanks for your feedback. I'm starting to get a picture. [1] https://medium.com/cirruslabs/announcing-macos-support-on-cirrus-ci-67f2d6a68553 [2] https://veertu.com/technology/ [3] https://github.com/cirruslabs/osx-images
Sep 23 2020
prev sibling parent reply Imperatorn <johan_forsberg_86 hotmail.com> writes:
On Friday, 18 September 2020 at 13:46:38 UTC, wjoe wrote:
 The approach I took for building, testing and creating a 
 tarball for Linux is to build a Docker container which contains 
 enough of an installation of the latest Debian with all the 
 dependencies necessary to build GDC.

 In order to move forward the next targets I want to add are Mac 
 OS, FreeBSD, and Windows (but not necessarily in that order) 
 and I want to build Docker containers for those like I did for 
 Linux.

 Which versions are relevant ?
I would personally really appreciate a Windows version
Sep 21 2020
parent wjoe <invalid example.com> writes:
On Monday, 21 September 2020 at 21:42:06 UTC, Imperatorn wrote:
 [...]
 I would personally really appreciate a Windows version
Windows is on the todo list.
Sep 22 2020