On Mon, Dec 20, 2021 at 07:59:38AM +0000, Stuart Henderson wrote:
> On 2021/12/20 00:05, Omar Polo wrote:
> >  - it enables avx2.  I don't know what's going on, I have an i386 that
> >    should lack avx/avx2 (it's a pentium T2130) but the port builds and
> >    the test situation is the same as on amd64: 628 tests pass and 5
> >    fails.
> 
> I didn't check but quite likely it uses runtime cpuid detection

So there's build/arch.mk which relies on ARCH for detection.

On i386  the value is "i386" so it goes down the x86 ASM way.

On amd64 the value is "amd64" but arch.mk expects "x86_64", so no
nasm(1) or AVX2 usage by default.
On arm64 the value is "arm64" so NEON is used automatically.

We can now either pass ARCH=bogus or more explicitly pass USE_ASM=No
(implies HAVE_AVX2=No HAVE_NEON_AARCH64=No ENABLE_MMI=No ENABLE_MSA=No)
to disable optimizations and ship generic ports.

Or we pass the right ARCH value for each platform as follows, depend on
nasm or i386 and amd64 and make use of optimizations:

        MAKE_FLAGS +=   ARCH=${ARCH:S/amd64/x86_64/}


My guess is that not all machines support all optimizations openh264
employs, so best go the USE_ASM=No way.

FWIW, both FreeBSD and NetBSD just pass ARCH (with amd64 -> x86_64) and
depend on nasm for i386 and amd64, so they must be building with
optimizations on all platforms.

Here's a new tarball that uses optimizations.
Builds and tests fine on amd64, sparc64 and arm64.

Attachment: openh264.tgz
Description: Binary data

Reply via email to