libjpeg-turbo for android

前端 未结 4 540
予麋鹿
予麋鹿 2020-11-27 12:35

I need libjpeg-turbo for android ndk. Did anyone managed to compile it as .a (static) lib? I have tried a few times, but it gave me a lot of errors only.

4条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-27 13:13

    Thanks Alex Cohn and answered Dec for share;

    This answer expands on Alex Cohn's answer & answered Dec's answer;

    I'm use jpeg turbo 1.3.9, ndk-r9d, about yasm.exe, the ndk-r9d is contained, on after did answered Dec's step 3, I had one error in simd/jsimdext.inc line:182 "%define EXTN(name) _ %+ name ; foo() -> _foo"; change it to "%define EXTN(name) name"; then ok, this problem had fixed;

    this is my Android.mk

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    LOCAL_CFLAGS += -D__ARM_HAVE_NEON
    
    #ifeq ($(ARCH_ARM_HAVE_NEON),true)
    #LOCAL_CFLAGS += -D__ARM_HAVE_NEON
    #endif
    
    # From autoconf-generated Makefile
    EXTRA_DIST = nasm_lt.sh CMakeLists.txt \
        jccolext-mmx.asm   jcgryext-mmx.asm   jdcolext-mmx.asm   jdmrgext-mmx.asm \
        jccolext-sse2.asm  jcgryext-sse2.asm  jdcolext-sse2.asm  jdmrgext-sse2.asm \
        jccolext-sse2-64.asm  jcgryext-sse2-64.asm  jdcolext-sse2-64.asm \
        jdmrgext-sse2-64.asm
    
    
    
    ifeq ($(TARGET_ARCH),arm)
    libsimd_SOURCES_DIST := simd/jsimd_arm_neon.S \
                           simd/jsimd_arm.c
    
    AM_CFLAGS := -march=armv7-a -mfpu=neon
    AM_CCASFLAGS := -march=armv7-a -mfpu=neon
    
    endif
    
    ifeq ($(TARGET_ARCH),x86)
    # List of assembly files needed is derived from content within simd/CMakelists.txt
    # The Intel Atom supports x86 32-bit assembly.  So take those files and leave the
    # 64-bit behind.
    
    #libsimd_SOURCES_DIST := simd/jsimd_i386.c \
        simd/jsimdcpu.asm \
        simd/jfdctflt-3dn.asm \
        simd/jidctflt-3dn.asm \
        simd/jquant-3dn.asm \
        simd/jccolor-mmx.asm \
        simd/jcgray-mmx.asm \
        simd/jcsample-mmx.asm \
        simd/jdcolor-mmx.asm \
        simd/jdmerge-mmx.asm \
        simd/jdsample-mmx.asm \
        simd/jfdctfst-mmx.asm \
        simd/jfdctint-mmx.asm \
        simd/jidctfst-mmx.asm \
        simd/jidctint-mmx.asm \
        simd/jidctred-mmx.asm \
        simd/jquant-mmx.asm \
        simd/jfdctflt-sse.asm \
        simd/jidctflt-sse.asm \
        simd/jquant-sse.asm \
        simd/jccolor-sse2.asm \
        simd/jcgray-sse2.asm \
        simd/jcsample-sse2.asm \
        simd/jdcolor-sse2.asm \
        simd/jdmerge-sse2.asm \
        simd/jdsample-sse2.asm \
        simd/jfdctfst-sse2.asm \
        simd/jfdctint-sse2.asm \
        simd/jidctflt-sse2.asm \
        simd/jidctfst-sse2.asm \
        simd/jidctint-sse2.asm \
        simd/jidctred-sse2.asm \
        simd/jquantf-sse2.asm \
        simd/jquanti-sse2.asm
    
    libsimd_SOURCES_DIST := simd/jsimd_i386.c simd/jsimd.h simd/jsimdcfg.inc.h simd/jsimdext.inc \
        simd/jcolsamp.inc simd/jdct.inc simd/jsimdcpu.asm \
        simd/jfdctflt-3dn.asm   simd/jidctflt-3dn.asm   simd/jquant-3dn.asm \
        simd/jccolor-mmx.asm    simd/jcgray-mmx.asm     simd/jcsample-mmx.asm \
        simd/jdcolor-mmx.asm    simd/jdmerge-mmx.asm    simd/jdsample-mmx.asm \
        simd/jfdctfst-mmx.asm   simd/jfdctint-mmx.asm   simd/jidctfst-mmx.asm \
        simd/jidctint-mmx.asm   simd/jidctred-mmx.asm   simd/jquant-mmx.asm \
        simd/jfdctflt-sse.asm   simd/jidctflt-sse.asm   simd/jquant-sse.asm \
        simd/jccolor-sse2.asm   simd/jcgray-sse2.asm    simd/jcsample-sse2.asm \
        simd/jdcolor-sse2.asm   simd/jdmerge-sse2.asm   simd/jdsample-sse2.asm \
        simd/jfdctfst-sse2.asm  simd/jfdctint-sse2.asm  simd/jidctflt-sse2.asm \
        simd/jidctfst-sse2.asm  simd/jidctint-sse2.asm  simd/jidctred-sse2.asm  \
        simd/jquantf-sse2.asm   simd/jquanti-sse2.asm
    endif
    
    ifeq ($(TARGET_ARCH),mips)
    libsimd_SOURCES_DIST := simd/jsimd_mips.c
    endif
    
    LOCAL_C_INCLUDES := $(LOCAL_PATH)/simd \
                        $(LOCAL_PATH)/android
    
    LOCAL_SRC_FILES:= $(libsimd_SOURCES_DIST)
    
    LOCAL_CFLAGS := -DAVOID_TABLES  -O3 -fstrict-aliasing -fprefetch-loop-arrays  -DANDROID \
            -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT
    LOCAL_CFLAGS += -DJPEG_LIB_VERSION=80  # I need version 8 because of some of the methods I depend on
    
    $(warning "libsimd")
    LOCAL_MODULE := libsimd
    LOCAL_MODULE_FILENAME := libsimd
    include $(BUILD_STATIC_LIBRARY)
    
    ######################################################
    ###           libjpeg.so                       ##
    ######################################################
    
    #include $(CLEAR_VARS)
    
    # From autoconf-generated Makefile
    libjpeg_SOURCES_DIST =  jcapimin.c jcapistd.c jccoefct.c jccolor.c \
            jcdctmgr.c jchuff.c jcinit.c jcmainct.c jcmarker.c jcmaster.c \
            jcomapi.c jcparam.c jcphuff.c jcprepct.c jcsample.c jctrans.c \
            jdapimin.c jdapistd.c jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c \
            jddctmgr.c jdhuff.c jdinput.c jdmainct.c jdmarker.c jdmaster.c \
            jdmerge.c jdphuff.c jdpostct.c jdsample.c jdtrans.c jerror.c \
            jfdctflt.c jfdctfst.c jfdctint.c jidctflt.c jidctfst.c jidctint.c \
            jidctred.c jquant1.c jquant2.c jutils.c jmemmgr.c jmemnobs.c \
        jaricom.c jcarith.c jdarith.c \
        turbojpeg.c transupp.c jdatadst-tj.c jdatasrc-tj.c \
        turbojpeg-mapfile
    
    LOCAL_SRC_FILES:= $(libjpeg_SOURCES_DIST)
    
    LOCAL_SHARED_LIBRARIES += libcutils
    LOCAL_STATIC_LIBRARIES += libsimd
    
    LOCAL_C_INCLUDES := $(LOCAL_PATH) 
    
    
    
    $(warning "libjpeg")
    
    LOCAL_CFLAGS := -DAVOID_TABLES  -O3 -fstrict-aliasing -fprefetch-loop-arrays  -DANDROID \
            -DANDROID_TILE_BASED_DECODE -DENABLE_ANDROID_NULL_CONVERT
    LOCAL_CFLAGS += -DJPEG_LIB_VERSION=80  # I need version 8 because of some of the methods I depend on
    
    #D:\android-ndk-r9d\toolchains\x86-4.8\prebuilt\windows-x86_64\bin\i686-linux-android-gcc.exe -E D:\WORKSPACE\MINE\libjpeg_turbo_1.3.9_multi_platform\jni\simd\jsimdcfg.inc.h -o D:\WORKSPACE\MINE\libjpeg_turbo_1.3.9_multi_platform\jni\simd\jsimdcfg.inc
    
    LOCAL_MODULE := libjpeg
    LOCAL_MODULE_FILENAME:=libjpeg
    
    LOCAL_STATIC_LIBRARIES += cpufeatures
    
    include $(BUILD_STATIC_LIBRARY)
    

提交回复
热议问题