Supporting musl libc

Joakim via Digitalmars-d digitalmars-d at puremagic.com
Tue May 17 02:27:04 PDT 2016


On Tuesday, 17 May 2016 at 08:51:01 UTC, Jacob Carlborg wrote:
> As an alternative to glibc there's a C standard library called 
> musl [1]. This is the C standard library used by ELLCC [2], a 
> cross-compiler based on Clang. This cross-compiler makes it 
> very easy to target other platforms and can be used as the C 
> compiler when building with LDC.
>
> The issue is that musl doesn't support the functions defined by 
> execinfo.h: backtrace, backtrace_symbols_fd and 
> backtrace_symbols, since these are glibc extensions. As far as 
> I can see, these functions are used in two places in druntime: 
> src/rt/backtrace/dwarf.d [3] and src/core/runtime.d [4].
>
> The imports of execinfo is guarded by version(CRuntime_Glibc). 
> I see that CRuntime_Glibc is a predefined version identifier 
> defined by the compiler on Linux.
>
> I'm not sure how to best handle different C standard libraries 
> when it comes to choosing which one to use. Is it best to 
> choose that when building the compiler or when building 
> druntime? Or can it be a runtime option?
>
> [1] https://www.musl-libc.org
> [2] http://ellcc.org
> [3] 
> https://github.com/dlang/druntime/blob/master/src/rt/backtrace/dwarf.d#L41
> [4] 
> https://github.com/dlang/druntime/blob/master/src/core/runtime.d#L433-L434

It is a runtime option on Windows, when choosing between the 
Digital Mars C runtime and the MSVC runtime, which is why those 
are also predefined version identifiers.  The one for Glibc was 
added as an afterthought in that Windows PR, and Bionic was also 
reserved last fall, though my PR to actually define it has been 
in limbo for a year.  That's mostly my fault: I never got back to 
it when I focused on ldc and Android/ARM.

There was a lot of debate among the core team when even the 
Windows CRuntime support was finalized, with Walter wanting to 
minimize such predefined versions and some of the core team 
arguing against it even after it was merged.  Even the iOS 
predefined version took 5 months to get in, because there was 
debate whether Darwin should be allowed as a common version for 
all Apple platforms.

The reason I'm mentioning all this is that adding predefined 
versions is a matter of much debate, but that's how you'll likely 
implement it as a runtime option.  There is no good answer on 
this right now: I suggest you just implement it and worry about 
run-time versus compile-time when you're done.  Since you'll be 
doing the same work either way, ie adding or separating out a 
bunch of version blocks for musl in druntime, do it any way you 
like for now and you can worry about merging that last bit about 
compile-time vs runtime at the end.


More information about the Digitalmars-d mailing list