// Copyright (C) 2018 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.

cc_defaults {
    name: "idmap2_defaults",
    tidy: true,
    tidy_checks: [
        "modernize-*",
        "-modernize-avoid-c-arrays",
        "-modernize-use-trailing-return-type",
        "android-*",
        "misc-*",
        "readability-*",
    ],
    tidy_flags: [
        "-system-headers",
        "-warnings-as-errors=*,-bugprone*",
    ],
}

cc_library {
    name: "libidmap2",
    defaults: [
        "idmap2_defaults",
    ],
    host_supported: true,
    srcs: [
        "libidmap2/**/*.cpp",
    ],
    export_include_dirs: ["include"],
    target: {
        android: {
            static: {
                enabled: false,
            },
            shared_libs: [
                "libandroidfw",
                "libbase",
                "libcutils",
                "libutils",
                "libziparchive",
                "libidmap2_policies",
            ],
        },
        host: {
            shared: {
                enabled: false,
            },
            static_libs: [
                "libandroidfw",
                "libbase",
                "libcutils",
                "libutils",
                "libziparchive",
                "libidmap2_policies",
            ],
        },
    },
}

cc_library {
    name: "libidmap2_policies",
    defaults: [
        "idmap2_defaults",
    ],
    host_supported: true,
    export_include_dirs: ["libidmap2_policies/include"],
    target: {
        windows: {
            enabled: true,
        },
        android: {
            static: {
                enabled: false,
            },
            shared_libs: [
                "libandroidfw",
            ],
        },
        host: {
            shared: {
                enabled: false,
            },
            static_libs: [
                "libandroidfw",
            ],
        },
    },
}

cc_test {
    name: "idmap2_tests",
    defaults: [
        "idmap2_defaults",
    ],
    tidy_checks: [
        "-readability-magic-numbers",
    ],
    host_supported: true,
    test_suites: ["general-tests"],
    srcs: [
        "tests/BinaryStreamVisitorTests.cpp",
        "tests/CommandLineOptionsTests.cpp",
        "tests/FileUtilsTests.cpp",
        "tests/Idmap2BinaryTests.cpp",
        "tests/IdmapTests.cpp",
        "tests/Main.cpp",
        "tests/PoliciesTests.cpp",
        "tests/PrettyPrintVisitorTests.cpp",
        "tests/RawPrintVisitorTests.cpp",
        "tests/ResourceMappingTests.cpp",
        "tests/ResourceUtilsTests.cpp",
        "tests/ResultTests.cpp",
        "tests/XmlParserTests.cpp",
        "tests/ZipFileTests.cpp",
    ],
    required: [
        "idmap2",
    ],
    static_libs: ["libgmock"],
    target: {
        android: {
            shared_libs: [
                "libandroidfw",
                "libbase",
                "libidmap2",
                "liblog",
                "libutils",
                "libz",
                "libziparchive",
                "libidmap2_policies",
            ],
        },
        host: {
            static_libs: [
                "libandroidfw",
                "libbase",
                "libcutils",
                "libidmap2",
                "liblog",
                "libutils",
                "libziparchive",
                "libidmap2_policies",
            ],
            shared_libs: [
                "libz",
            ],
        },
    },
    data: ["tests/data/**/*.apk"],
}

cc_binary {
    name: "idmap2",
    defaults: [
        "idmap2_defaults",
    ],
    host_supported: true,
    srcs: [
        "idmap2/Create.cpp",
        "idmap2/CreateMultiple.cpp",
        "idmap2/Dump.cpp",
        "idmap2/Lookup.cpp",
        "idmap2/Main.cpp",
        "idmap2/Scan.cpp",
        "idmap2/Verify.cpp",
    ],
    target: {
        android: {
            shared_libs: [
                "libandroidfw",
                "libbase",
                "libcutils",
                "libidmap2",
                "libutils",
                "libziparchive",
                "libidmap2_policies",
            ],
        },
        host: {
            static_libs: [
                "libandroidfw",
                "libbase",
                "libcutils",
                "libidmap2",
                "liblog",
                "libutils",
                "libziparchive",
                "libidmap2_policies",
            ],
            shared_libs: [
                "libz",
            ],
        },
    },

}

cc_binary {
    name: "idmap2d",
    defaults: [
        "idmap2_defaults",
    ],
    host_supported: false,
    srcs: [
        "idmap2d/Idmap2Service.cpp",
        "idmap2d/Main.cpp",
    ],
    shared_libs: [
        "libandroidfw",
        "libbase",
        "libbinder",
        "libcutils",
        "libidmap2",
        "libutils",
        "libziparchive",
        "libidmap2_policies",
    ],
    static_libs: [
        "libidmap2daidl",
    ],
    init_rc: ["idmap2d/idmap2d.rc"],
}

cc_library_static {
    name: "libidmap2daidl",
    defaults: [
        "idmap2_defaults",
    ],
    tidy: false,
    host_supported: false,
    srcs: [
        ":idmap2_aidl",
    ],
    shared_libs: [
        "libbase",
    ],
    aidl: {
        export_aidl_headers: true,
    },
}

filegroup {
    name: "idmap2_aidl",
    srcs: [
        "idmap2d/aidl/android/os/IIdmap2.aidl",
    ],
    path: "idmap2d/aidl",
}

aidl_interface {
    name: "overlayable_policy_aidl",
    srcs: [":overlayable_policy_aidl_files"],
}

filegroup {
    name: "overlayable_policy_aidl_files",
    srcs: [
        "idmap2d/aidl/android/os/OverlayablePolicy.aidl",
    ],
    path: "idmap2d/aidl",
}
