The PowerPC-related changes in FLAC 1.3.3 have caused some portability problems.
libFLAC/cpu.c assumes that the <sys/auxv.h> header and the getauxval() function are universally available on PowerPC platforms. They are not. On FreeBSD/powerpc, <sys/auxv.h> is available, but getauxval() is not. Equivalent functionality is provided by elf_aux_info(). On OpenBSD/powerpc, neither is available, nor any equivalent. I have attached a patch by Jeremie Courreges-Anglas which adds proper autoconf checks to detect <sys/auxv.h> and getauxval(). This could be extended to cover elf_aux_info(). For FreeBSD/powerpc64, I have been told the compiler requires -mvsx to enable the intrinsics used by libFLAC/lpc_intrin_vsx.c. Apparently, there is no sufficient autoconf check, so compilation will fail unless -mvsx has been manually added. It is, however, unclear whether compiling with explicit -mvsx will cause the compiler to emit code that does not run on earlier generations of POWER machines. -- Christian "naddy" Weisgerber na...@mips.inka.de
Index: configure.ac --- configure.ac.orig +++ configure.ac @@ -69,7 +69,7 @@ AC_C_INLINE AC_C_VARARRAYS AC_C_TYPEOF -AC_CHECK_HEADERS([stdint.h inttypes.h byteswap.h sys/param.h sys/ioctl.h termios.h x86intrin.h cpuid.h]) +AC_CHECK_HEADERS([stdint.h inttypes.h byteswap.h sys/param.h sys/ioctl.h termios.h x86intrin.h cpuid.h sys/auxv.h]) XIPH_C_BSWAP32 XIPH_C_BSWAP16 @@ -104,6 +104,8 @@ AC_CHECK_TYPES(socklen_t, [], []) dnl check for getopt in standard library dnl AC_CHECK_FUNCS(getopt_long , , [LIBOBJS="$LIBOBJS getopt.o getopt1.o"] ) AC_CHECK_FUNCS(getopt_long, [], []) + +AC_CHECK_FUNCS([getauxval]) AC_CHECK_SIZEOF(void*,1) Index: src/libFLAC/cpu.c --- src/libFLAC/cpu.c.orig +++ src/libFLAC/cpu.c @@ -53,7 +53,7 @@ #define dfprintf(file, format, ...) #endif -#if defined FLAC__CPU_PPC +#if defined(HAVE_SYS_AUXV_H) #include <sys/auxv.h> #endif @@ -236,7 +236,10 @@ x86_cpu_info (FLAC__CPUInfo *info) static void ppc_cpu_info (FLAC__CPUInfo *info) { -#if defined FLAC__CPU_PPC + info->ppc.arch_2_07 = false; + info->ppc.arch_3_00 = false; + +#if defined(FLAC__CPU_PPC) && defined(HAVE_GETAUXVAL) #ifndef PPC_FEATURE2_ARCH_3_00 #define PPC_FEATURE2_ARCH_3_00 0x00800000 #endif @@ -250,9 +253,6 @@ ppc_cpu_info (FLAC__CPUInfo *info) } else if (getauxval(AT_HWCAP2) & PPC_FEATURE2_ARCH_2_07) { info->ppc.arch_2_07 = true; } -#else - info->ppc.arch_2_07 = false; - info->ppc.arch_3_00 = false; #endif }
_______________________________________________ flac-dev mailing list flac-dev@xiph.org http://lists.xiph.org/mailman/listinfo/flac-dev