| # This file adds functions to build the musl C library |
| # Copyright 2013 Timo Teräs |
| # Licensed under the GPL v2. See COPYING in the root of this package |
| |
| do_libc_get() { |
| local libc_src |
| |
| libc_src="http://www.musl-libc.org/releases" |
| |
| if [ "${CT_LIBC_MUSL_CUSTOM}" = "y" ]; then |
| CT_GetCustom "musl" "${CT_LIBC_VERSION}" \ |
| "${CT_LIBC_MUSL_CUSTOM_LOCATION}" |
| else # ! custom location |
| CT_GetFile "musl-${CT_LIBC_VERSION}" "${libc_src}" |
| fi # ! custom location |
| } |
| |
| do_libc_extract() { |
| # If using custom directory location, nothing to do. |
| if [ "${CT_LIBC_MUSL_CUSTOM}" = "y" ]; then |
| # Abort if the custom directory is not found. |
| if ! [ -d "${CT_SRC_DIR}/musl-${CT_LIBC_VERSION}" ]; then |
| CT_Abort "Directory not found: ${CT_SRC_DIR}/musl-${CT_LIBC_VERSION}" |
| fi |
| |
| return 0 |
| fi |
| |
| CT_Extract "musl-${CT_LIBC_VERSION}" |
| CT_Patch "musl" "${CT_LIBC_VERSION}" |
| } |
| |
| do_libc_check_config() { |
| : |
| } |
| |
| do_libc_configure() { |
| CT_DoLog EXTRA "Configuring C library" |
| local -a extra_cflags |
| |
| # From buildroot: |
| # gcc constant folding bug with weak aliases workaround |
| # See http://www.openwall.com/lists/musl/2014/05/15/1 |
| if [ "${CT_CC_GCC_4_9_or_later}" = "y" ]; then |
| extra_cflags+=("-fno-toplevel-reorder") |
| fi |
| |
| # NOTE: musl handles the build/host/target a little bit differently |
| # then one would expect: |
| # build : not used |
| # host : the machine building musl |
| # target : the machine musl runs on |
| CT_DoExecLog CFG \ |
| CFLAGS="${extra_cflags[@]}" \ |
| CROSS_COMPILE="${CT_TARGET}-" \ |
| ./configure \ |
| --host="${CT_TARGET}" \ |
| --target="${CT_TARGET}" \ |
| --prefix="/usr" \ |
| --disable-gcc-wrapper |
| } |
| |
| do_libc_start_files() { |
| CT_DoStep INFO "Installing C library headers" |
| |
| # Simply copy files until musl has the ability to build out-of-tree |
| CT_DoLog EXTRA "Copying sources to build directory" |
| CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/musl-${CT_LIBC_VERSION}" \ |
| "${CT_BUILD_DIR}/build-libc-headers" |
| cd "${CT_BUILD_DIR}/build-libc-headers" |
| |
| do_libc_configure |
| |
| CT_DoLog EXTRA "Installing headers" |
| CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install-headers |
| |
| CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" \ |
| crt/crt1.o crt/crti.o crt/crtn.o |
| CT_DoExecLog ALL cp -av crt/crt*.o "${CT_SYSROOT_DIR}/usr/lib" |
| CT_DoExecLog ALL ${CT_TARGET}-gcc -nostdlib \ |
| -nostartfiles -shared -x c /dev/null -o "${CT_SYSROOT_DIR}/usr/lib/libc.so" |
| CT_EndStep |
| } |
| |
| do_libc() { |
| CT_DoStep INFO "Installing C library" |
| |
| # Simply copy files until musl has the ability to build out-of-tree |
| CT_DoLog EXTRA "Copying sources to build directory" |
| CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/musl-${CT_LIBC_VERSION}" \ |
| "${CT_BUILD_DIR}/build-libc" |
| cd "${CT_BUILD_DIR}/build-libc" |
| |
| do_libc_configure |
| |
| CT_DoLog EXTRA "Building C library" |
| CT_DoExecLog ALL make ${JOBSFLAGS} |
| |
| CT_DoLog EXTRA "Installing C library" |
| CT_DoExecLog ALL make DESTDIR="${CT_SYSROOT_DIR}" install |
| |
| CT_EndStep |
| } |