crosstool-ng/scripts/build/libc/musl.sh
Norbert Lange dc82a2bfac Add a musl variable LIBC_MUSC_EXTRA_CFLAGS
Signed-off-by: Norbert Lange <nolange79@gmail.com>
2023-09-24 16:10:02 +13:00

115 lines
3.7 KiB
Bash

# 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
musl_post_cc()
{
# MUSL creates dynamic linker symlink with absolute path - which works on the
# target but not on the host. We want our cross-ldd tool to work.
CT_MultilibFixupLDSO
}
musl_main()
{
CT_DoStep INFO "Installing C library"
CT_mkdir_pushd "${CT_BUILD_DIR}/build-libc"
CT_IterateMultilibs musl_backend_once multilib
CT_Popd
CT_EndStep
}
# This backend builds the C library
# Usage: musl_backend param=value [...]
# Parameter : Definition : Type : Default
# multi_* : as defined in CT_IterateMultilibs : (varies) :
musl_backend_once()
{
local -a extra_cflags
local -a extra_config
local src_dir="${CT_SRC_DIR}/musl"
local multi_dir multi_os_dir multi_root multi_flags multi_index multi_count
local multilib_dir
local musl_cflags
local hdr_install_subdir
local arg f l
for arg in "$@"; do
eval "${arg// /\\ }"
done
CT_DoStep INFO "Building for multilib ${multi_index}/${multi_count}: '${multi_flags}'"
multilib_dir="/usr/lib/${multi_os_dir}"
CT_SanitizeVarDir multilib_dir
CT_DoExecLog ALL mkdir -p "${multi_root}${multilib_dir}"
musl_cflags+=" ${CT_ALL_TARGET_CFLAGS}"
musl_cflags+=" ${CT_LIBC_MUSL_EXTRA_CFLAGS}"
musl_cflags+=" ${multi_flags}"
if [ "${CT_LIBC_MUSL_DEBUG}" = "y" ]; then
extra_config+=("--enable-debug")
fi
if [ "${CT_LIBC_MUSL_WARNINGS}" = "y" ]; then
extra_config+=("--enable-warnings")
fi
case "${CT_SHARED_LIBS}" in
y) extra_config+=("--enable-shared");;
*) extra_config+=("--disable-shared");;
esac
extra_config+=( "--enable-optimize=${CT_LIBC_MUSL_OPTIMIZE}" )
# Same problem as with uClibc: different variants sometimes have
# incompatible headers.
CT_DoArchMUSLHeaderDir hdr_install_subdir "${multi_flags}"
if [ -n "${hdr_install_subdir}" ]; then
extra_config+=( "--includedir=/usr/include/${hdr_install_subdir}" )
fi
CT_SymlinkToolsMultilib
# NOTE: musl handles the build/host/target a little bit differently
# then one would expect:
# build : not used
# host : same as --target
# target : the machine musl runs on
CT_DoExecLog CFG \
CFLAGS="${musl_cflags}" \
LDFLAGS="${CT_TARGET_LDFLAGS}" \
CROSS_COMPILE="${CT_TARGET}-" \
${CONFIG_SHELL} \
${src_dir}/configure \
--host="${multi_target}" \
--target="${multi_target}" \
--prefix="/usr" \
--libdir="${multilib_dir}" \
--disable-gcc-wrapper \
"${extra_config[@]}"
CT_DoLog EXTRA "Building C library"
CT_DoExecLog ALL make ${CT_JOBSFLAGS}
CT_DoLog EXTRA "Installing C library"
CT_DoExecLog ALL make DESTDIR="${multi_root}" install
# Convert /lib/ld-* symlinks to relative paths so that they are valid
# both on the host and on the target.
for f in ${multi_root}/ld-musl-*; do
[ -L "${f}" ] || continue
l=$( readlink ${f} )
case "${l}" in
${multilib_dir}/*)
CT_DoExecLog ALL ln -sf "../${l}" "${f}"
;;
esac
done
# Any additional actions for this architecture
CT_DoArchMUSLPostInstall
CT_EndStep
}