cln: use templates for {int,float}param.h for cross

When cross building the configure script hangs or at least takes
insane amounts of time for some architectures to create the values
for the header files include/cln/{int,float}param.h

Since we know our architectures and the sizes of their integer
and floating point values, we can just as well create the files
from templates using $XBPS_TARGET_WORDSIZE and $XBPS_TARGET_ENDIAN.

[ci skip]
This commit is contained in:
Jürgen Buchmüller 2020-09-05 22:30:58 +02:00
parent b3ca34dc8a
commit 70bbffa186
3 changed files with 144 additions and 9 deletions

View file

@ -0,0 +1,17 @@
/* Rounding modes, for use below */
#define rounds_to_nearest 0 /* 0.5 ulp */
#define rounds_to_zero 1 /* 1 ulp */
#define rounds_to_infinity 2 /* 1 ulp */
#define rounds_to_minus_infinity 3 /* 1 ulp */
/* Properties of type \`float: */
/* Largest n for which 1+2^(-n) is exactly represented is 23. */
/* Largest n for which 1-2^(-n) is exactly represented is 24. */
#define float_mant_bits 24
#define float_rounds rounds_to_nearest
/* Properties of type \`double': */
/* Largest n for which 1+2^(-n) is exactly represented is 52. */
/* Largest n for which 1-2^(-n) is exactly represented is 53. */
#define double_mant_bits 53
#define double_rounds rounds_to_nearest

View file

@ -0,0 +1,96 @@
/* Generated by Void Linux scrpkgs/cln/template */
/* Integers of type char have 8 bits. */
#define char_bitsize 8
/* Integers of type short have 16 bits. */
#define short_bitsize 16
/* Integers of type int have 32 bits. */
#define int_bitsize 32
/* Integers of type long have @LBITS@ bits. */
#define long_bitsize @LBITS@
/* Integers of type long long have 64 bits. */
#define long_long_bitsize 64
/* Integers of type unsigned char have 8 bits. */
/* Integers of type unsigned short have 16 bits. */
/* Integers of type unsigned int have 32 bits. */
/* Integers of type unsigned long have @LBITS@ bits. */
/* Integers of type unsigned long long have 64 bits. */
/* Integer types char and unsigned char have the same binary representation. */
/* Integer types short and unsigned short have the same binary representation. */
/* Integer types int and unsigned int have the same binary representation. */
/* Integer types long and unsigned long have the same binary representation. */
/* Integer types long long and unsigned long long have the same binary representation. */
/* Pointers of type char * have @LBITS@ bits. */
#define pointer_bitsize @LBITS@
/* Casts from long * to char * is OK (does nothing). */
/* Casts from char * to long * is OK (does nothing). */
/* Casts from function * to char * is OK (does nothing). */
/* Casts from char * to function * is OK (does nothing). */
/* Type char has sizeof = 1 and alignment = 1. */
#define sizeof_char 1
#define alignment_char 1
/* Type unsigned char has sizeof = 1 and alignment = 1. */
/* Type short has sizeof = 2 and alignment = 2. */
#define sizeof_short 2
#define alignment_short 2
/* Type unsigned short has sizeof = 2 and alignment = 2. */
/* Type int has sizeof = 4 and alignment = 4. */
#define sizeof_int 4
#define alignment_int 4
/* Type unsigned int has sizeof = 4 and alignment = 4. */
/* Type long has sizeof = @LBYTES@ and alignment = @LBYTES@. */
#define sizeof_long @LBYTES@
#define alignment_long @LBYTES@
/* Type unsigned long has sizeof = @LBYTES@ and alignment = @LBYTES@. */
/* Type long long has sizeof = 8 and alignment = 8. */
#define sizeof_long_long 8
#define alignment_long_long 8
/* Type unsigned long long has sizeof = 8 and alignment = 8. */
/* Type float has sizeof = 4 and alignment = 4. */
#define sizeof_float 4
#define alignment_float 4
/* Type double has sizeof = 8 and alignment = 8. */
#define sizeof_double 8
#define alignment_double 8
/* Type char * has sizeof = @LBYTES@ and alignment = @LBYTES@. */
/* Type long * has sizeof = @LBYTES@ and alignment = @LBYTES@. */
/* Type function * has sizeof = @LBYTES@ and alignment = @LBYTES@. */
/* Type unsigned short is stored @ENDIAN@-ENDIAN in memory. */
#define short_@endian@_endian
/* Type unsigned int is stored @ENDIAN@-ENDIAN in memory. */
#define int_@endian@_endian
/* Type unsigned long is stored @ENDIAN@-ENDIAN in memory. */
#define long_@endian@_endian
/* Type unsigned long long is stored @ENDIAN@-ENDIAN in memory. */
#define long_long_@endian@_endian
/* Stack grows up, ca. @LBYTES@ bytes per function call. */
#define stack_grows_up

View file

@ -15,15 +15,37 @@ case "$XBPS_TARGET_MACHINE" in
arm*|aarch64*) CPPFLAGS="-DNO_ASM";;
esac
if [ "$CROSS_BUILD" ]; then
pre_build() {
# During cross build, script builds intparam.h
# with a line starting with:
# #error char size does not fit in intptr
# even though the sizes are correct.
vsed -e '/#error/d' -i include/cln/intparam.h
}
fi
pre_configure() {
if [ "$CROSS_BUILD" ]; then
local ENDIAN="UNKNOWN"
local LBITS=$XBPS_TARGET_WORDSIZE
local LBYTES=$(($XBPS_TARGET_WORDSIZE / 8))
local INTPARAM_H=${wrksrc}/include/cln/intparam.h
local FLOATPARAM_H=${wrksrc}/include/cln/floatparam.h
if [ "$XBPS_TARGET_ENDIAN" = "be" ]; then
ENDIAN="BIG"
fi
if [ "$XBPS_TARGET_ENDIAN" = "le" ]; then
ENDIAN="LITTLE"
fi
# Make substitutions in intparam.h
sed ${FILESDIR}/intparam.h \
-e "s;@LBITS@;$LBITS;g" \
-e "s;@LBYTES@;$LBYTES;g" \
-e "s;@ENDIAN@;$ENDIAN;g" \
-e "s;@endian@;${ENDIAN,,};g" \
> ${INTPARAM_H}
# No substitutions in floatparam.h
cat ${FILESDIR}/floatparam.h \
> ${FLOATPARAM_H}
configure_args+=" cl_cv_file_intparam_h=$INTPARAM_H"
configure_args+=" cl_cv_file_floatparam_h=$FLOATPARAM_H"
fi
}
cln-devel_package() {
short_desc+=" - development files"