/*
 * Copyright (C) 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 "frameworks_av_camera_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_av_camera_license"],
}

cc_defaults {
    name: "camera_defaults",
    static_libs: [
        "libcamera_client",
    ],
    shared_libs: [
        "camera_platform_flags_c_lib",
        "libbase",
        "libcutils",
        "libutils",
        "liblog",
        "libbinder",
        "libgui",
        "libcamera_metadata",
        "libnativewindow",
    ],
    fuzz_config: {
        cc: [
            "android-media-fuzzing-reports@google.com",
        ],
        componentid: 155276,
    },
}

cc_fuzz {
    name: "camera_fuzzer",
    srcs: [
        "camera_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_c2CaptureRequest_fuzzer",
    srcs: [
        "camera_c2CaptureRequest_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_c2ConcurrentCamera_fuzzer",
    srcs: [
        "camera_c2ConcurrentCamera_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_c2SubmitInfo_fuzzer",
    srcs: [
        "camera_c2SubmitInfo_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_c2SessionConfiguration_fuzzer",
    srcs: [
        "camera_c2SessionConfiguration_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_c2OutputConfiguration_fuzzer",
    srcs: [
        "camera_c2OutputConfiguration_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_vendorTagDescriptor_fuzzer",
    srcs: [
        "camera_vendorTagDescriptor_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
    include_dirs: [
        "system/media/camera/tests",
        "system/media/private/camera/include",
    ],
}

cc_fuzz {
    name: "camera_Parameters_fuzzer",
    srcs: [
        "camera_Parameters_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_SessionStats_fuzzer",
    srcs: [
        "camera_SessionStats_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}

cc_fuzz {
    name: "camera_captureResult_fuzzer",
    srcs: [
        "camera_captureResult_fuzzer.cpp",
    ],
    defaults: [
        "camera_defaults",
    ],
}
