1*92b42cb3SPatrick Williams#
2*92b42cb3SPatrick Williams# Copyright OpenEmbedded Contributors
3*92b42cb3SPatrick Williams#
4*92b42cb3SPatrick Williams# SPDX-License-Identifier: MIT
5*92b42cb3SPatrick Williams#
6*92b42cb3SPatrick Williams
7*92b42cb3SPatrick Williamsinherit siteinfo
8*92b42cb3SPatrick Williams
9*92b42cb3SPatrick Williams# If applicable on the architecture, this routine will rename the header and
10*92b42cb3SPatrick Williams# add a unique identifier to the name for the ABI/bitsize that is being used.
11*92b42cb3SPatrick Williams# A wrapper will be generated for the architecture that knows how to call
12*92b42cb3SPatrick Williams# all of the ABI variants for that given architecture.
13*92b42cb3SPatrick Williams#
14*92b42cb3SPatrick Williamsoe_multilib_header() {
15*92b42cb3SPatrick Williams
16*92b42cb3SPatrick Williams	case ${HOST_OS} in
17*92b42cb3SPatrick Williams	*-musl*)
18*92b42cb3SPatrick Williams		return
19*92b42cb3SPatrick Williams		;;
20*92b42cb3SPatrick Williams	*)
21*92b42cb3SPatrick Williams	esac
22*92b42cb3SPatrick Williams        # For MIPS: "n32" is a special case, which needs to be
23*92b42cb3SPatrick Williams        # distinct from both 64-bit and 32-bit.
24*92b42cb3SPatrick Williams        case ${TARGET_ARCH} in
25*92b42cb3SPatrick Williams        mips*)  case "${MIPSPKGSFX_ABI}" in
26*92b42cb3SPatrick Williams                "-n32")
27*92b42cb3SPatrick Williams                       ident=n32
28*92b42cb3SPatrick Williams                       ;;
29*92b42cb3SPatrick Williams                *)
30*92b42cb3SPatrick Williams                       ident=${SITEINFO_BITS}
31*92b42cb3SPatrick Williams                       ;;
32*92b42cb3SPatrick Williams                esac
33*92b42cb3SPatrick Williams                ;;
34*92b42cb3SPatrick Williams        *)      ident=${SITEINFO_BITS}
35*92b42cb3SPatrick Williams        esac
36*92b42cb3SPatrick Williams	for each_header in "$@" ; do
37*92b42cb3SPatrick Williams	   if [ ! -f "${D}/${includedir}/$each_header" ]; then
38*92b42cb3SPatrick Williams	      bberror "oe_multilib_header: Unable to find header $each_header."
39*92b42cb3SPatrick Williams	      continue
40*92b42cb3SPatrick Williams	   fi
41*92b42cb3SPatrick Williams	   stem=$(echo $each_header | sed 's#\.h$##')
42*92b42cb3SPatrick Williams	   # if mips64/n32 set ident to n32
43*92b42cb3SPatrick Williams	   mv ${D}/${includedir}/$each_header ${D}/${includedir}/${stem}-${ident}.h
44*92b42cb3SPatrick Williams
45*92b42cb3SPatrick Williams	   sed -e "s#ENTER_HEADER_FILENAME_HERE#${stem}#g" ${COREBASE}/scripts/multilib_header_wrapper.h > ${D}/${includedir}/$each_header
46*92b42cb3SPatrick Williams	done
47*92b42cb3SPatrick Williams}
48*92b42cb3SPatrick Williams
49*92b42cb3SPatrick Williams# Dependencies on arch variables like MIPSPKGSFX_ABI can be problematic.
50*92b42cb3SPatrick Williams# We don't need multilib headers for native builds so brute force things.
51*92b42cb3SPatrick Williamsoe_multilib_header:class-native () {
52*92b42cb3SPatrick Williams	return
53*92b42cb3SPatrick Williams}
54*92b42cb3SPatrick Williams
55*92b42cb3SPatrick Williams# Nor do we need multilib headers for nativesdk builds.
56*92b42cb3SPatrick Williamsoe_multilib_header:class-nativesdk () {
57*92b42cb3SPatrick Williams	return
58*92b42cb3SPatrick Williams}
59