// Set up common variables for usage across the libjpeg-turbo modules

cc_defaults {
    name: "libjpeg-defaults",
    cflags: [
        "-O3",
        "-fstrict-aliasing",

        "-Wno-unused-parameter",
        "-Werror",
    ],
    srcs: [
        "jcapimin.c",
        "jcapistd.c",
        "jaricom.c",
        "jcarith.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",
        "jdarith.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",
        "jmemmgr.c",
        "jmemnobs.c",
        "jquant1.c",
        "jquant2.c",
        "jutils.c",
    ],

    arch: {
        arm: {
            // By default, the build system generates ARM target binaries in
            // thumb mode, where each instruction is 16 bits wide.  Defining
            // this variable as arm forces the build system to generate object
            // files in 32-bit arm mode.  This is the same setting previously
            // used by libjpeg and it provides a small performance benefit.
            instruction_set: "arm",
            // ARM v7 NEON
            srcs: [
                "simd/jsimd_arm_neon.S",
                "simd/jsimd_arm.c",
            ],
            armv7_a_neon: {
                // If we are certain that the ARM v7 device has NEON (and there
                // is no need for a runtime check), we can indicate that with a
                // flag.
                cflags: ["-D__ARM_HAVE_NEON__"],
            },
        },
        arm64: {
            // ARM v8 64-bit NEON
            srcs: [
                "simd/jsimd_arm64_neon.S",
                "simd/jsimd_arm64.c",
            ],
        },
        x86: {
            // x86 MMX and SSE2
            srcs: [
                "simd/jsimd_i386.c",
                "simd/jccolor-mmx.asm",
                "simd/jccolor-sse2.asm",
                "simd/jcgray-mmx.asm",
                "simd/jcgray-sse2.asm",
                "simd/jchuff-sse2.asm",
                "simd/jcsample-mmx.asm",
                "simd/jcsample-sse2.asm",
                "simd/jdcolor-mmx.asm",
                "simd/jdcolor-sse2.asm",
                "simd/jdmerge-mmx.asm",
                "simd/jdmerge-sse2.asm",
                "simd/jdsample-mmx.asm",
                "simd/jdsample-sse2.asm",
                "simd/jfdctflt-3dn.asm",
                "simd/jfdctflt-sse.asm",
                "simd/jfdctfst-mmx.asm",
                "simd/jfdctfst-sse2.asm",
                "simd/jfdctint-mmx.asm",
                "simd/jfdctint-sse2.asm",
                "simd/jidctflt-3dn.asm",
                "simd/jidctflt-sse2.asm",
                "simd/jidctflt-sse.asm",
                "simd/jidctfst-mmx.asm",
                "simd/jidctfst-sse2.asm",
                "simd/jidctint-mmx.asm",
                "simd/jidctint-sse2.asm",
                "simd/jidctred-mmx.asm",
                "simd/jidctred-sse2.asm",
                "simd/jquant-3dn.asm",
                "simd/jquantf-sse2.asm",
                "simd/jquanti-sse2.asm",
                "simd/jquant-mmx.asm",
                "simd/jquant-sse.asm",
                "simd/jsimdcpu.asm",
            ],
            asflags: [
                "-DPIC",
                "-DELF",
            ],
            local_include_dirs: ["simd"],
        },
        x86_64: {
            // x86-64 SSE2
            srcs: [
                "simd/jsimd_x86_64.c",
                "simd/jccolor-sse2-64.asm",
                "simd/jcgray-sse2-64.asm",
                "simd/jchuff-sse2-64.asm",
                "simd/jcsample-sse2-64.asm",
                "simd/jdcolor-sse2-64.asm",
                "simd/jdmerge-sse2-64.asm",
                "simd/jdsample-sse2-64.asm",
                "simd/jfdctflt-sse-64.asm",
                "simd/jfdctfst-sse2-64.asm",
                "simd/jfdctint-sse2-64.asm",
                "simd/jidctflt-sse2-64.asm",
                "simd/jidctfst-sse2-64.asm",
                "simd/jidctint-sse2-64.asm",
                "simd/jidctred-sse2-64.asm",
                "simd/jquantf-sse2-64.asm",
                "simd/jquanti-sse2-64.asm",
            ],
            asflags: [
                "-D__x86_64__",
                "-DPIC",
                "-DELF",
            ],
            local_include_dirs: ["simd"],
        },
        mips: {
            srcs: ["jsimd_none.c"],
        },
        mips64: {
            srcs: ["jsimd_none.c"],
        },
    },
}

// Also build as a shared library.
cc_library {
    name: "libjpeg",
    vendor_available: true,
    defaults: ["libjpeg-defaults"],
    export_include_dirs: ["."],
}

// Build static library against the NDK
cc_library_static {
    name: "libjpeg_static_ndk",
    defaults: ["libjpeg-defaults"],
    export_include_dirs: ["."],
    sdk_version: "17",
}

// Definition for TJBench
cc_binary {
    name: "tjbench",

    whole_static_libs: ["libjpeg"],

    multilib: {
        lib32: {
            stem: "tj32",
        },
        lib64: {
            stem: "tj64",
        },
    },

    compile_multilib: "both",

    cflags: [
        "-DBMP_SUPPORTED",
        "-DPPM_SUPPORTED",
        "-Wno-unused-parameter",
        "-Werror",
    ],

    srcs: [
        "tjbench.c",
        "bmp.c",
        "tjutil.c",
        "rdbmp.c",
        "rdppm.c",
        "wrbmp.c",
        "wrppm.c",
        "turbojpeg.c",
        "transupp.c",
        "jdatadst-tj.c",
        "jdatasrc-tj.c",
    ],
}