/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "external_renderscript_intrinsics_replacement_toolkit_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: [
        "external_renderscript_intrinsics_replacement_toolkit_license",
    ],
}

cc_defaults {
    name: "renderscripttoolkit_native_defaults",
    sdk_version: "current",
    static_libs: [
        "cpufeatures",
    ],
    shared_libs: [
        "libjnigraphics",
        "liblog",
    ],
    cflags: [
        "-Wall",
        "-Werror",
        "-Wextra",
        "-Wno-unused-parameter",
        "-Wno-unused-variable",
        "-Wthread-safety",
    ],
    stl: "libc++_static",
}

cc_library_static {
    name: "librenderscripttoolkit_native_static",
    defaults: ["renderscripttoolkit_native_defaults"],
    srcs: [
        "Blend.cpp",
        "Blur.cpp",
        "ColorMatrix.cpp",
        "Convolve3x3.cpp",
        "Convolve5x5.cpp",
        "Histogram.cpp",
        "Lut.cpp",
        "Lut3d.cpp",
        "RenderScriptToolkit.cpp",
        "Resize.cpp",
        "TaskProcessor.cpp",
        "Utils.cpp",
        "YuvToRgb.cpp",
    ],
    arch: {
        arm64: {
            cflags: [
                "-DARCH_ARM64_HAVE_NEON",
                "-DARCH_ARM64_USE_INTRINSICS",
                "-DARCH_ARM_USE_INTRINSICS",
            ],
            srcs: [
                "Blend_advsimd.S",
                "Blur_advsimd.S",
                "ColorMatrix_advsimd.S",
                "Convolve_advsimd.S",
                "Lut3d_advsimd.S",
                "Resize_advsimd.S",
                "YuvToRgb_advsimd.S",
            ],
        },
        arm: {
            cflags: [
                "-DARCH_ARM_HAVE_VFP",
                "-DARCH_ARM_USE_INTRINSICS",
            ],
            srcs: [
                "Blend_neon.S",
                "Blur_neon.S",
                "ColorMatrix_neon.S",
                "Convolve_neon.S",
                "Lut3d_neon.S",
                "Resize_neon.S",
                "YuvToRgb_neon.S",
            ],
            asflags: ["-mfpu=neon"],
            neon: {
                cflags: [
                    "-DARCH_ARM_HAVE_NEON",
                ],
            },
        },
    },
}

cc_library_shared {
    name: "librenderscript-toolkit",
    defaults: ["renderscripttoolkit_native_defaults"],
    srcs: ["JniEntryPoints.cpp"],
    static_libs: [
        "librenderscripttoolkit_native_static",
    ],
    header_libs: ["jni_headers"],
}
