Supporting musl libc

Yuxuan Shui yshuiv7 at gmail.com
Tue Dec 12 01:14:13 UTC 2017


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

I tried to build dmd on musl, and it seems to work relatively 
well.

I need to build dmd 2.067 for bootstrapping. It doesn't build 
out-of-box, but there's patches floating around.

There're some missing symbols in druntime: a couple math related, 
backtrace() and backtrace_symbols(). The former ones can be 
workaround, but and proper solution is needed. The latter ones 
can be solved by linking in libbacktrace().


More information about the Digitalmars-d mailing list