diff options
Diffstat (limited to 'scripts/build/libc/musl.sh')
-rw-r--r-- | scripts/build/libc/musl.sh | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/scripts/build/libc/musl.sh b/scripts/build/libc/musl.sh new file mode 100644 index 00000000..7172cf28 --- /dev/null +++ b/scripts/build/libc/musl.sh @@ -0,0 +1,103 @@ +# 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 +} |