blob: 7172cf283e76e8f7c8832230936ae44927413814 [file] [log] [blame]
# 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
}