From 23b483f91717bbb3f357f1ddc668f1c63c1c4820 Mon Sep 17 00:00:00 2001 From: Piotr Kubaj Date: Sat, 10 Apr 2021 22:46:50 +0000 Subject: [PATCH] multimedia/ffmpeg: fix build on powerpc64* vec_xl function is already defined in altivec.h. Don't redefine it. While here, remove the previous patch that is no longer needed with LLVM 11. Since for LTO LLVM 9 is used, switch to GCC for LTO option. --- multimedia/ffmpeg/Makefile | 5 +- .../patch-libswscale_ppc_yuv2rgb__altivec.c | 154 ++---------------- 2 files changed, 13 insertions(+), 146 deletions(-) diff --git a/multimedia/ffmpeg/Makefile b/multimedia/ffmpeg/Makefile index 2b3252627cacb..8603a47781e17 100644 --- a/multimedia/ffmpeg/Makefile +++ b/multimedia/ffmpeg/Makefile @@ -644,10 +644,7 @@ PORTDOCS= * .include .if ${ARCH} == powerpc64 && ${PORT_OPTIONS:MLTO} && ${CHOSEN_COMPILER_TYPE} == clang -CPP= ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT} -CC= ${LOCALBASE}/bin/clang${LLVM_DEFAULT} -BUILD_DEPENDS+= ${LOCALBASE}/bin/clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT} -LLD_UNSAFE= yes +USE_GCC= yes .endif post-install: diff --git a/multimedia/ffmpeg/files/patch-libswscale_ppc_yuv2rgb__altivec.c b/multimedia/ffmpeg/files/patch-libswscale_ppc_yuv2rgb__altivec.c index 821c16c54bb44..38ff9087b8425 100644 --- a/multimedia/ffmpeg/files/patch-libswscale_ppc_yuv2rgb__altivec.c +++ b/multimedia/ffmpeg/files/patch-libswscale_ppc_yuv2rgb__altivec.c @@ -1,145 +1,15 @@ -Revert 3a557c5d88b7b15b5954ba2743febb055549b536 to fix build on powerpc and powerpc64. - Error: -CC libswscale/ppc/yuv2rgb_altivec.o -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_abgr?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: implicit declaration of function ?vec_xl?; did you mean ?vec_rl?? [-Werror=implicit-function-declaration] - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro ?DEFCSP420_CVT? - 437 | DEFCSP420_CVT(yuv2_abgr, out_abgr) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro ?DEFCSP420_CVT? - 437 | DEFCSP420_CVT(yuv2_abgr, out_abgr) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:437:1: note: in expansion of macro ?DEFCSP420_CVT? - 437 | DEFCSP420_CVT(yuv2_abgr, out_abgr) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:437:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:437:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_bgra?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:438:1: note: in expansion of macro ?DEFCSP420_CVT? - 438 | DEFCSP420_CVT(yuv2_bgra, out_bgra) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:438:1: note: in expansion of macro ?DEFCSP420_CVT? - 438 | DEFCSP420_CVT(yuv2_bgra, out_bgra) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:438:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:438:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_rgba?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:439:1: note: in expansion of macro ?DEFCSP420_CVT? - 439 | DEFCSP420_CVT(yuv2_rgba, out_rgba) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:439:1: note: in expansion of macro ?DEFCSP420_CVT? - 439 | DEFCSP420_CVT(yuv2_rgba, out_rgba) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:439:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:439:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_argb?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:440:1: note: in expansion of macro ?DEFCSP420_CVT? - 440 | DEFCSP420_CVT(yuv2_argb, out_argb) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:440:1: note: in expansion of macro ?DEFCSP420_CVT? - 440 | DEFCSP420_CVT(yuv2_argb, out_argb) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:440:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:440:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_rgb24?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:441:1: note: in expansion of macro ?DEFCSP420_CVT? - 441 | DEFCSP420_CVT(yuv2_rgb24, out_rgb24) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:441:1: note: in expansion of macro ?DEFCSP420_CVT? - 441 | DEFCSP420_CVT(yuv2_rgb24, out_rgb24) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:441:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:441:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c: In function ?altivec_yuv2_bgr24?: -libswscale/ppc/yuv2rgb_altivec.c:338:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 338 | y0 = vec_xl(0, y1i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:442:1: note: in expansion of macro ?DEFCSP420_CVT? - 442 | DEFCSP420_CVT(yuv2_bgr24, out_bgr24) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:340:18: error: incompatible types when assigning to type ?__vector unsigned char? {aka ?__vector(16) unsigned char?} from type ?int? - 340 | y1 = vec_xl(0, y2i); \ - | ^~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:442:1: note: in expansion of macro ?DEFCSP420_CVT? - 442 | DEFCSP420_CVT(yuv2_bgr24, out_bgr24) - | ^~~~~~~~~~~~~ -libswscale/ppc/yuv2rgb_altivec.c:442:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -libswscale/ppc/yuv2rgb_altivec.c:442:1: error: can?t convert a value of type ?int? to vector type ?__vector(16) signed char? which has different size -cc1: some warnings being treated as errors +libswscale/ppc/yuv2rgb_altivec.c:288:36: error: redeclaration of 'vec_xl' must have the 'overloadable' attribute +static inline vector unsigned char vec_xl(signed long long offset, const ubyte *addr) ---- libswscale/ppc/yuv2rgb_altivec.c.orig 2020-06-15 18:54:24 UTC +--- libswscale/ppc/yuv2rgb_altivec.c.orig 2021-04-08 21:28:40 UTC +++ libswscale/ppc/yuv2rgb_altivec.c -@@ -305,6 +305,9 @@ static int altivec_ ## name(SwsContext *c, const unsig - vector signed short R1, G1, B1; \ - vector unsigned char R, G, B; \ - \ -+ const vector unsigned char *y1ivP, *y2ivP, *uivP, *vivP; \ -+ vector unsigned char align_perm; \ -+ \ - vector signed short lCY = c->CY; \ - vector signed short lOY = c->OY; \ - vector signed short lCRV = c->CRV; \ -@@ -335,13 +338,26 @@ static int altivec_ ## name(SwsContext *c, const unsig - vec_dstst(oute, (0x02000002 | (((w * 3 + 32) / 32) << 16)), 1); \ - \ - for (j = 0; j < w / 16; j++) { \ -- y0 = vec_xl(0, y1i); \ -+ y1ivP = (const vector unsigned char *) y1i; \ -+ y2ivP = (const vector unsigned char *) y2i; \ -+ uivP = (const vector unsigned char *) ui; \ -+ vivP = (const vector unsigned char *) vi; \ - \ -- y1 = vec_xl(0, y2i); \ -+ align_perm = vec_lvsl(0, y1i); \ -+ y0 = (vector unsigned char) \ -+ vec_perm(y1ivP[0], y1ivP[1], align_perm); \ - \ -- u = (vector signed char) vec_xl(0, ui); \ -+ align_perm = vec_lvsl(0, y2i); \ -+ y1 = (vector unsigned char) \ -+ vec_perm(y2ivP[0], y2ivP[1], align_perm); \ - \ -- v = (vector signed char) vec_xl(0, vi); \ -+ align_perm = vec_lvsl(0, ui); \ -+ u = (vector signed char) \ -+ vec_perm(uivP[0], uivP[1], align_perm); \ -+ \ -+ align_perm = vec_lvsl(0, vi); \ -+ v = (vector signed char) \ -+ vec_perm(vivP[0], vivP[1], align_perm); \ - \ - u = (vector signed char) \ - vec_sub(u, \ +@@ -284,7 +284,7 @@ static inline void cvtyuvtoRGB(SwsContext *c, vector s + * ------------------------------------------------------------------------------ + */ + +-#if !HAVE_VSX ++#if !HAVE_VSX && !defined(__clang__) + static inline vector unsigned char vec_xl(signed long long offset, const ubyte *addr) + { + const vector unsigned char *v_addr = (const vector unsigned char *) (addr + offset);