Commit e14d19fe authored by Martin Storsjö's avatar Martin Storsjö

contrib: vpx: Backport patches for windows on arm with mingw

These patches are from the latest git master of libvpx (past the 1.7.0
release).

This also tries to configure with arm64 optimizations on other platforms
as well, which hadn't been hooked up before.
parent 5a20d229
From dcddec1e8b994e7bca90779a10e6654491e98fb8 Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Wed, 21 Mar 2018 14:09:04 +0200
Subject: [PATCH 1/3] ads2gas: Add a -noelf option
This allows skipping elf specific features from the output.
Change-Id: I739299ba41286ca10415e056b4ffd561be5e0350
---
build/make/ads2gas.pl | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/build/make/ads2gas.pl b/build/make/ads2gas.pl
index 029cc4a..91609da 100755
--- a/build/make/ads2gas.pl
+++ b/build/make/ads2gas.pl
@@ -23,9 +23,11 @@ use lib $FindBin::Bin;
use thumb;
my $thumb = 0;
+my $elf = 1;
foreach my $arg (@ARGV) {
$thumb = 1 if ($arg eq "-thumb");
+ $elf = 0 if ($arg eq "-noelf");
}
print "@ This file was created from a .asm file\n";
@@ -140,7 +142,11 @@ while (<STDIN>)
# Make function visible to linker, and make additional symbol with
# prepended underscore
- s/EXPORT\s+\|([\$\w]*)\|/.global $1 \n\t.type $1, function/;
+ if ($elf) {
+ s/EXPORT\s+\|([\$\w]*)\|/.global $1 \n\t.type $1, function/;
+ } else {
+ s/EXPORT\s+\|([\$\w]*)\|/.global $1/;
+ }
s/IMPORT\s+\|([\$\w]*)\|/.global $1/;
s/EXPORT\s+([\$\w]*)/.global $1/;
@@ -181,11 +187,16 @@ while (<STDIN>)
# eabi_attributes numerical equivalents can be found in the
# "ARM IHI 0045C" document.
- # REQUIRE8 Stack is required to be 8-byte aligned
- s/\sREQUIRE8/.eabi_attribute 24, 1 \@Tag_ABI_align_needed/g;
+ if ($elf) {
+ # REQUIRE8 Stack is required to be 8-byte aligned
+ s/\sREQUIRE8/.eabi_attribute 24, 1 \@Tag_ABI_align_needed/g;
- # PRESERVE8 Stack 8-byte align is preserved
- s/\sPRESERVE8/.eabi_attribute 25, 1 \@Tag_ABI_align_preserved/g;
+ # PRESERVE8 Stack 8-byte align is preserved
+ s/\sPRESERVE8/.eabi_attribute 25, 1 \@Tag_ABI_align_preserved/g;
+ } else {
+ s/\sREQUIRE8//;
+ s/\sPRESERVE8//;
+ }
# Use PROC and ENDP to give the symbols a .size directive.
# This makes them show up properly in debugging tools like gdb and valgrind.
@@ -202,7 +213,7 @@ while (<STDIN>)
my $proc;
s/\bENDP\b/@ $&/;
$proc = pop(@proc_stack);
- $_ = "\t.size $proc, .-$proc".$_ if ($proc);
+ $_ = "\t.size $proc, .-$proc".$_ if ($proc and $elf);
}
# EQU directive
@@ -225,4 +236,4 @@ while (<STDIN>)
}
# Mark that this object doesn't need an executable stack.
-printf ("\t.section\t.note.GNU-stack,\"\",\%\%progbits\n");
+printf ("\t.section\t.note.GNU-stack,\"\",\%\%progbits\n") if $elf;
--
2.7.4
From 6c6085eb50c2a1c44151a9a1f96c925cfe5e7e34 Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Wed, 21 Mar 2018 14:12:04 +0200
Subject: [PATCH 2/3] configure: Add an armv7-win32-gcc target
This builds for windows on arm, with llvm-mingw. The target triplet
is named -gcc since that's how similar existing targets are named,
even though it technically runs clang (via frontends named
"$CROSS-gcc").
Assemble using $CC -c since there's no standalone assembler
available (except perhaps llvm-mc).
Change-Id: I2c9a319730afef73f811bad79f488dcdc244ab0d
---
build/make/configure.sh | 14 +++++++++++++-
configure | 1 +
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/build/make/configure.sh b/build/make/configure.sh
index 007e020..9aa4f1c 100644
--- a/build/make/configure.sh
+++ b/build/make/configure.sh
@@ -891,7 +891,6 @@ process_common_toolchain() {
setup_gnu_toolchain
arch_int=${tgt_isa##armv}
arch_int=${arch_int%%te}
- check_add_asflags --defsym ARCHITECTURE=${arch_int}
tune_cflags="-mtune="
if [ ${tgt_isa} = "armv7" ] || [ ${tgt_isa} = "armv7s" ]; then
if [ -z "${float_abi}" ]; then
@@ -918,6 +917,19 @@ EOF
enabled debug && add_asflags -g
asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
+
+ case ${tgt_os} in
+ win*)
+ asm_conversion_cmd="$asm_conversion_cmd -noelf"
+ AS="$CC -c"
+ EXE_SFX=.exe
+ enable_feature thumb
+ ;;
+ *)
+ check_add_asflags --defsym ARCHITECTURE=${arch_int}
+ ;;
+ esac
+
if enabled thumb; then
asm_conversion_cmd="$asm_conversion_cmd -thumb"
check_add_cflags -mthumb
diff --git a/configure b/configure
index fb732ac..16f301e 100755
--- a/configure
+++ b/configure
@@ -106,6 +106,7 @@ all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
all_platforms="${all_platforms} armv7-linux-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-none-rvct" #neon Cortex-A8
+all_platforms="${all_platforms} armv7-win32-gcc"
all_platforms="${all_platforms} armv7-win32-vs11"
all_platforms="${all_platforms} armv7-win32-vs12"
all_platforms="${all_platforms} armv7-win32-vs14"
--
2.7.4
From 3392bb335ee58bc930da624834c74c1625afbb82 Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Wed, 21 Mar 2018 14:15:13 +0200
Subject: [PATCH 3/3] configure: Add an arm64-win64-gcc target
This configuration doesn't require any extra custom settings, since
it only uses neon intrinsics that are handled automatically by the
compiler (no external assembly).
Change-Id: I35415c68f483a430c0672e060a7bbd09a3469512
---
configure | 1 +
1 file changed, 1 insertion(+)
diff --git a/configure b/configure
index 16f301e..1ba4c48 100755
--- a/configure
+++ b/configure
@@ -101,6 +101,7 @@ EOF
all_platforms="${all_platforms} arm64-android-gcc"
all_platforms="${all_platforms} arm64-darwin-gcc"
all_platforms="${all_platforms} arm64-linux-gcc"
+all_platforms="${all_platforms} arm64-win64-gcc"
all_platforms="${all_platforms} armv7-android-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-darwin-gcc" #neon Cortex-A8
all_platforms="${all_platforms} armv7-linux-rvct" #neon Cortex-A8
--
2.7.4
......@@ -20,6 +20,9 @@ libvpx: libvpx-$(VPX_VERSION).tar.bz2 .sum-vpx
ifdef HAVE_ANDROID
$(APPLY) $(SRC)/vpx/libvpx-android.patch
endif
$(APPLY) $(SRC)/vpx/0001-ads2gas-Add-a-noelf-option.patch
$(APPLY) $(SRC)/vpx/0002-configure-Add-an-armv7-win32-gcc-target.patch
$(APPLY) $(SRC)/vpx/0003-configure-Add-an-arm64-win64-gcc-target.patch
$(MOVE)
DEPS_vpx =
......@@ -39,8 +42,7 @@ VPX_ARCH := armv7s
else
VPX_ARCH := armv7
endif
else ifndef HAVE_WIN32
# libvpx doesn't support win32/arm with clang yet
else
VPX_ARCH := armv7
endif
else ifeq ($(ARCH),i386)
......@@ -55,6 +57,8 @@ else ifeq ($(ARCH),sparc)
VPX_ARCH := sparc
else ifeq ($(ARCH),x86_64)
VPX_ARCH := x86_64
else ifeq ($(ARCH),aarch64)
VPX_ARCH := arm64
endif
ifdef HAVE_ANDROID
......@@ -100,9 +104,17 @@ VPX_CONF := \
--disable-dependency-tracking \
--enable-vp9-highbitdepth
ifndef HAVE_WIN32
ifndef HAVE_IOS
VPX_CONF += --enable-runtime-cpu-detect
endif
else
# WIN32
ifeq ($(filter arm aarch64, $(ARCH)),)
# Only enable runtime cpu detect on architectures other than arm/aarch64
VPX_CONF += --enable-runtime-cpu-detect
endif
endif
ifndef BUILD_ENCODERS
VPX_CONF += --disable-vp8-encoder --disable-vp9-encoder
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment