Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optionally link with musl libc / remove requirement that libc be provided by glibc #213

Open
ksbhaskar opened this issue Apr 26, 2018 · 0 comments

Comments

@ksbhaskar
Copy link
Member

Final Release Note

Description

Although YottaDB should in principle be able to use any libc, in practice it successfully builds and runs only with glibc (GNU libc). While this is generally a good choice, at least one Alpine Linux uses musl. This Issue is to remove the requirement that libc be provided by glibc, or at least that YottaDB accept musl as a libc.

Draft Release Note

nars1 pushed a commit that referenced this issue Dec 15, 2020
Note while the build part seems to work well, there are a number of tests that do not
yet run correctly so this work is only partially complete but is ongoing as a background
(not prioritized) activity. But we got this far so wanted to merge it since it does not
affect the other platforms.

We would like to thank Matthew Hughes (@matt312@gitlab) for the initial mods to allow
YottaDB to build on Alpine (MR !835). Certain of those changes were pulled into this merge
which contains additional changes that allow at least some parts of our test regression
suite to run. They will all run before this is a supportable platform - this is just the
first wave of changes.

Alpine uses the musl libc instead of GNU's glibc. This is a "bare-bones" version of libc
without many of glibc's extensions. Alpine also uses "BusyBox" (generally for embedded
systems) to provide many of the common system utility commands. For example, "ping" is
a root-only command in Alpine. Several options on the ps and ls commands are also either
different or missing. The entire output of the ls command is different so tests looking
for information in files or processes have to be modified to be able to work correctly
on Alpine.

Change summary:

- CMakeLists.txt - Added messages suggested by @nars1 so we could see what libraries were
  being used.
- sr_linux/caller_id.c - Treat a musl build much like cygwin (no backtrace supported).
- sr_port/dse_chng_fhead.c - Just moving gtm_string.h include to where it belongs. Out of
  order build caused issues on Alpine.
- sr_port/dse_rest.c - Same.
- sr_port/dse_save.c - Same.
- sr_port/gtm_malloc_src.h - The mallopt() call does not exist on Alpine so adjust #ifdef
- sr_port/iosocket_snr.c - Include the correct include - a gtm_poll.h version was available
- sr_port/iosocket_wait.c - Same.
- sr_port/mdef.h - Define __MUSL for Alpine builds, some mitigation of memcpy() macro
  issues because of how sched.h gets included (see comments in mdef.h).
- sr_port/repl_comm.c - Include the correct include - a gtm_poll.h version was available
- sr_port/repl_filter.c - Move an #ifdef/#include to avoid build errors on alpine.
- sr_unix/configure.gtc - Use gold loader to build shared libraries on alpine. When the
  regular loader built a shared library from M program object code, the MUSL version of
  dlopen() was unable to load the created shared library. The gold loader fixes this issue.
- sr_unix/gtm_filter_command.c - Move mdef.h to top of include list (build issues).
- sr_unix/iormdef.h - Make assert GLIBC only as Alpine does not have the fields used in
  the assert.
- sr_unix/mdefsp.h - Alpinemusl uses va_copy differently than does glibc.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant