From efe15a0237f885907dc44de73d1237a6879f4861 Mon Sep 17 00:00:00 2001 From: Daniel Hugenroth Date: Wed, 9 Jan 2019 10:16:32 -0800 Subject: [PATCH] Enable SIMD for armv7 Summary: @public This diff makes the gradle build system use SIMD for mozjpeg for armv7 architectures. **Testplan: files used in build** ``` [user:spectrum]$ ./gradlew clean && ./gradlew prepareNative && ./gradlew assembleDebug ... > Task :android:spectrumpluginjpeg:generateJsonModelDebug Variant=debug ABI=armeabi-v7a :-- CMAKE_SYSTEM_PROCESSOR=armv7-a Variant=debug ABI=armeabi-v7a :-- Building mozjpeg with armv7-a SIMD support Variant=debug ABI=armeabi-v7a :-- Configuring done Variant=debug ABI=armeabi-v7a :-- Generating done Variant=debug ABI=armeabi-v7a :-- Build files have been written to: /Users/hugenroth/fbsource/xplat/spectrum/android/spectrumpluginjpeg/.externalNativeBuild/cmake/debug/armeabi-v7a Variant=debug ABI=arm64-v8a :-- CMAKE_SYSTEM_PROCESSOR=aarch64 Variant=debug ABI=arm64-v8a :-- Building mozjpeg without SIMD support Variant=debug ABI=arm64-v8a :-- Configuring done Variant=debug ABI=arm64-v8a :-- Generating done Variant=debug ABI=arm64-v8a :-- Build files have been written to: /Users/hugenroth/fbsource/xplat/spectrum/android/spectrumpluginjpeg/.externalNativeBuild/cmake/debug/arm64-v8a Variant=debug ABI=x86 :-- CMAKE_SYSTEM_PROCESSOR=i686 Variant=debug ABI=x86 :-- Building mozjpeg without SIMD support Variant=debug ABI=x86 :-- Configuring done Variant=debug ABI=x86 :-- Generating done Variant=debug ABI=x86 :-- Build files have been written to: /Users/hugenroth/fbsource/xplat/spectrum/android/spectrumpluginjpeg/.externalNativeBuild/cmake/debug/x86 Variant=debug ABI=x86_64 :-- CMAKE_SYSTEM_PROCESSOR=x86_64 Variant=debug ABI=x86_64 :-- Building mozjpeg without SIMD support Variant=debug ABI=x86_64 :-- Configuring done Variant=debug ABI=x86_64 :-- Generating done Variant=debug ABI=x86_64 :-- Build files have been written to: /Users/hugenroth/fbsource/xplat/spectrum/android/spectrumpluginjpeg/.externalNativeBuild/cmake/debug/x86_64 ... Build spectrumpluginjpeg armeabi-v7a [1/155] Building C object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/jcapimin.c.o [2/155] Building C object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/jcapistd.c.o [3/155] Building C object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/jccoefct.c.o ... [51/155] Building C object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/jmemnobs.c.o [52/155] Building C object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/simd/jsimd_arm.c.o [53/155] Building ASM object ../../../../build/mozjpeg/armeabi-v7a/CMakeFiles/mozjpeg.dir/simd/jsimd_arm_neon.S.o ``` **Testplan: correct result in sample app** {F148119273} Reviewed By: passy Differential Revision: D13609467 fbshipit-source-id: 132ea5342c73d00a5e51a92784a8d8809250b176 --- .../mozjpeg/override/CMakeLists.txt | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/androidLibs/third-party/mozjpeg/override/CMakeLists.txt b/androidLibs/third-party/mozjpeg/override/CMakeLists.txt index 8e13a874..34b96352 100644 --- a/androidLibs/third-party/mozjpeg/override/CMakeLists.txt +++ b/androidLibs/third-party/mozjpeg/override/CMakeLists.txt @@ -1,7 +1,10 @@ cmake_minimum_required(VERSION 3.6.0) project(mozjpeg C) -add_library(mozjpeg STATIC +set(can_use_assembler TRUE) +enable_language(ASM) + +list(APPEND mozjpegsources jcapimin.c jcapistd.c jccoefct.c @@ -53,9 +56,24 @@ add_library(mozjpeg STATIC jdarith.c transupp.c jmemnobs.c - jsimd_none.c ) +if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7-a") + message(STATUS "Building mozjpeg with armv7-a SIMD support") + list(APPEND mozjpegsources + simd/jsimd_arm.c + simd/jsimd_arm_neon.S + ) +else() + message(STATUS "Building mozjpeg without SIMD support") + list(APPEND mozjpegsources + jsimd_none.c + ) +endif() + + +add_library(mozjpeg STATIC ${mozjpegsources}) + target_compile_options(mozjpeg PRIVATE -fno-omit-frame-pointer -fexceptions