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

// libandroidfw is partially built for the host (used by obbtool, aapt, and others)

package {
    default_applicable_licenses: ["frameworks_base_libs_androidfw_license"],
}

// Added automatically by a large-scale-change
// See: http://go/android-license-faq
license {
    name: "frameworks_base_libs_androidfw_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
    ],
    license_text: [
        "NOTICE",
    ],
}

cc_aconfig_library {
    name: "backup_flags_cc_lib",
    host_supported: true,
    aconfig_declarations: "backup_flags",
}

cc_defaults {
    name: "libandroidfw_defaults",
    cpp_std: "gnu++2b",
    cflags: [
        "-Werror",
        "-Wunreachable-code",
    ],
    header_libs: [
        "native_headers",
    ],
    target: {
        windows: {
            // The Windows compiler warns incorrectly for value initialization with {}.
            cppflags: ["-Wno-missing-field-initializers"],
        },
        host: {
            cflags: ["-DSTATIC_ANDROIDFW_FOR_TOOLS"],
        },
    },
}

cc_library {
    name: "libandroidfw",
    defaults: ["libandroidfw_defaults"],
    host_supported: true,
    srcs: [
        "ApkAssets.cpp",
        "ApkParsing.cpp",
        "Asset.cpp",
        "AssetDir.cpp",
        "AssetManager.cpp",
        "AssetManager2.cpp",
        "AssetsProvider.cpp",
        "AttributeResolution.cpp",
        "BigBuffer.cpp",
        "BigBufferStream.cpp",
        "ChunkIterator.cpp",
        "ConfigDescription.cpp",
        "FileStream.cpp",
        "Idmap.cpp",
        "LoadedArsc.cpp",
        "Locale.cpp",
        "LocaleData.cpp",
        "misc.cpp",
        "NinePatch.cpp",
        "ObbFile.cpp",
        "PosixUtils.cpp",
        "Png.cpp",
        "PngChunkFilter.cpp",
        "PngCrunch.cpp",
        "ResourceTimer.cpp",
        "ResourceTypes.cpp",
        "ResourceUtils.cpp",
        "StreamingZipInflater.cpp",
        "StringPool.cpp",
        "TypeWrappers.cpp",
        "Util.cpp",
        "ZipFileRO.cpp",
        "ZipUtils.cpp",
    ],
    export_include_dirs: ["include"],
    export_shared_lib_headers: ["libz"],
    static_libs: [
        "libincfs-utils",
        "libpng",
    ],
    whole_static_libs: [
        "libandroidfw_pathutils",
        "libincfs-utils",
    ],
    export_static_lib_headers: ["libincfs-utils"],
    target: {
        android: {
            srcs: [
                "BackupData.cpp",
                "BackupHelpers.cpp",
                "CursorWindow.cpp",
            ],
            shared_libs: [
                "libbase",
                "libbinder",
                "liblog",
                "libcutils",
                "libincfs",
                "libutils",
                "libz",
            ],
            static_libs: [
                "libziparchive_for_incfs",
                "backup_flags_cc_lib",
            ],
            static: {
                enabled: false,
            },
        },
        host: {
            shared: {
                enabled: false,
            },
            static_libs: [
                "libbase",
                "libcutils",
                "liblog",
                "libutils",
                "libziparchive",
            ],
            shared_libs: [
                "libz",
            ],
        },
        host_linux: {
            srcs: [
                "CursorWindow.cpp",
            ],
        },
        windows: {
            enabled: true,
        },
    },
    sanitize: {
        blocklist: "libandroidfw_blocklist.txt",
    },
}

cc_library_static {
    name: "libandroidfw_pathutils",
    defaults: ["libandroidfw_defaults"],
    host_supported: true,
    export_include_dirs: ["include_pathutils"],
    srcs: [
        "PathUtils.cpp",
    ],
    shared_libs: [
        "libutils",
    ],
    target: {
        windows: {
            enabled: true,
        },
    },
    visibility: [
        ":__subpackages__",
        "//frameworks/base/tools/aapt",
    ],
}

common_test_libs = [
    "libandroidfw",
    "libbase",
    "libcutils",
    "libutils",
    "libziparchive",
]

cc_test {
    name: "libandroidfw_tests",
    host_supported: true,
    defaults: ["libandroidfw_defaults"],
    cppflags: [
        // This is to suppress warnings/errors from gtest
        "-Wno-unnamed-type-template-args",
    ],
    srcs: [
        // Helpers/infra for testing.
        "tests/CommonHelpers.cpp",
        "tests/TestHelpers.cpp",
        "tests/TestMain.cpp",

        // Actual tests.
        "tests/ApkAssets_test.cpp",
        "tests/ApkParsing_test.cpp",
        "tests/AppAsLib_test.cpp",
        "tests/Asset_test.cpp",
        "tests/AssetManager2_test.cpp",
        "tests/AttributeFinder_test.cpp",
        "tests/AttributeResolution_test.cpp",
        "tests/BigBuffer_test.cpp",
        "tests/ByteBucketArray_test.cpp",
        "tests/CombinedIterator_test.cpp",
        "tests/Config_test.cpp",
        "tests/ConfigDescription_test.cpp",
        "tests/ConfigLocale_test.cpp",
        "tests/DynamicRefTable_test.cpp",
        "tests/FileStream_test.cpp",
        "tests/Idmap_test.cpp",
        "tests/LoadedArsc_test.cpp",
        "tests/Locale_test.cpp",
        "tests/NinePatch_test.cpp",
        "tests/ResourceTimer_test.cpp",
        "tests/ResourceUtils_test.cpp",
        "tests/ResTable_test.cpp",
        "tests/Split_test.cpp",
        "tests/StringPiece_test.cpp",
        "tests/StringPool_test.cpp",
        "tests/Theme_test.cpp",
        "tests/TypeWrappers_test.cpp",
        "tests/ZipUtils_test.cpp",
    ],
    static_libs: ["libgmock"],
    target: {
        android: {
            srcs: [
                "tests/BackupData_test.cpp",
                "tests/BackupHelpers_test.cpp",
                "tests/CursorWindow_test.cpp",
                "tests/ObbFile_test.cpp",
                "tests/PosixUtils_test.cpp",
            ],
            shared_libs: common_test_libs + [
                "libbinder",
                "liblog",
                "libui",
            ],
        },
        host: {
            static_libs: common_test_libs + [
                "liblog",
                "libz",
            ],
        },
    },
    data: [
        "tests/data/**/*.apk",
        "tests/data/**/*.arsc",
        "tests/data/**/*.idmap",
    ],
    device_common_data: [
        ":FrameworkResourcesSparseTestApp",
        ":FrameworkResourcesNotSparseTestApp",
    ],
    test_suites: ["device-tests"],
}

cc_benchmark {
    name: "libandroidfw_benchmarks",
    defaults: ["libandroidfw_defaults"],
    test_config: "tests/AndroidTest_Benchmarks.xml",
    srcs: [
        // Helpers/infra for benchmarking.
        "tests/BenchMain.cpp",
        "tests/BenchmarkHelpers.cpp",
        "tests/CommonHelpers.cpp",

        // Actual benchmarks.
        "tests/AssetManager2_bench.cpp",
        "tests/AttributeResolution_bench.cpp",
        "tests/CursorWindow_bench.cpp",
        "tests/Generic_bench.cpp",
        "tests/SparseEntry_bench.cpp",
        "tests/Theme_bench.cpp",
    ],
    shared_libs: common_test_libs,
    data: [
        "tests/data/**/*.apk",
        ":FrameworkResourcesSparseTestApp",
        ":FrameworkResourcesNotSparseTestApp",
    ],
}

cc_library {
    name: "libandroidfw_fuzzer_lib",
    defaults: ["libandroidfw_defaults"],
    host_supported: true,
    srcs: [
        "CursorWindow.cpp",
    ],
    export_include_dirs: ["include"],
    target: {
        android: {
            shared_libs: common_test_libs + [
                "libbinder",
                "liblog",
            ],
        },
        host: {
            static_libs: common_test_libs + [
                "libbinder",
                "liblog",
            ],
        },
        darwin: {
            // libbinder is not supported on mac
            enabled: false,
        },
    },
}
