git: 23b483f91717 - main - multimedia/ffmpeg: fix build on powerpc64*

Piotr Kubaj pkubaj at FreeBSD.org
Sat Apr 10 22:46:51 UTC 2021


The branch main has been updated by pkubaj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=23b483f91717bbb3f357f1ddc668f1c63c1c4820

commit 23b483f91717bbb3f357f1ddc668f1c63c1c4820
Author:     Piotr Kubaj <pkubaj at FreeBSD.org>
AuthorDate: 2021-04-10 22:46:50 +0000
Commit:     Piotr Kubaj <pkubaj at FreeBSD.org>
CommitDate: 2021-04-10 22:46:50 +0000

    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 +-
 .../files/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 2b3252627cac..8603a47781e1 100644
--- a/multimedia/ffmpeg/Makefile
+++ b/multimedia/ffmpeg/Makefile
@@ -644,10 +644,7 @@ PORTDOCS=	*
 .include <bsd.port.pre.mk>
 
 .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 821c16c54bb4..38ff9087b842 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);


More information about the dev-commits-ports-all mailing list