//
// Copyright (C) 2011 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: "libdexfile_defaults",
    defaults: ["art_defaults"],
    host_supported: true,
    srcs: [
        "dex/art_dex_file_loader.cc",
        "dex/compact_dex_file.cc",
        "dex/compact_offset_table.cc",
        "dex/descriptors_names.cc",
        "dex/dex_file.cc",
        "dex/dex_file_exception_helpers.cc",
        "dex/dex_file_layout.cc",
        "dex/dex_file_loader.cc",
        "dex/dex_file_tracking_registrar.cc",
        "dex/dex_file_verifier.cc",
        "dex/dex_instruction.cc",
        "dex/modifiers.cc",
        "dex/primitive.cc",
        "dex/signature.cc",
        "dex/standard_dex_file.cc",
        "dex/type_lookup_table.cc",
        "dex/utf.cc",
    ],

    target: {
        android: {
            static_libs: [
                "libziparchive",
                "libz",
            ],
            shared_libs: [
                 // For MemMap.
                 "libartbase",
                 "liblog",
                 // For atrace.
                 "libcutils",
                 // For common macros.
                 "libbase",
            ],
            export_shared_lib_headers: [
                "libartbase",
                "libbase",
            ],
        },
        not_windows: {
            shared_libs: [
                "libziparchive",
                "libz",
                 // For MemMap.
                 "libartbase",
                 "liblog",
                 // For atrace.
                 "libcutils",
                 // For common macros.
                 "libbase",
            ],
            export_shared_lib_headers: [
                "libartbase",
                "libbase",
            ],
        },
        windows: {
            static_libs: [
                "libziparchive",
                "libz",
                 // For MemMap.
                 "libartbase",
                 "liblog",
                 // For atrace.
                 "libcutils",
                 // For common macros.
                 "libbase",
            ],
            export_static_lib_headers: [
                "libartbase",
                "libbase",
            ],
            cflags: ["-Wno-thread-safety"],
        },
    },
    generated_sources: ["dexfile_operator_srcs"],
    export_include_dirs: ["."],
}

cc_defaults {
    name: "libdexfile_static_base_defaults",
    static_libs: [
        "libbase",
        "libcutils",
        "liblog",
        "libz",
        "libziparchive",
    ],
}

cc_defaults {
    name: "libdexfile_static_defaults",
    defaults: [
        "libartbase_static_defaults",
        "libdexfile_static_base_defaults",
    ],
    static_libs: ["libdexfile"],
}

cc_defaults {
    name: "libdexfiled_static_defaults",
    defaults: [
        "libartbased_static_defaults",
        "libdexfile_static_base_defaults",
    ],
    static_libs: ["libdexfiled"],
}

gensrcs {
    name: "dexfile_operator_srcs",
    cmd: "$(location generate_operator_out) art/libdexfile $(in) > $(out)",
    tools: ["generate_operator_out"],
    srcs: [
        "dex/dex_file.h",
        "dex/dex_file_layout.h",
        "dex/dex_instruction.h",
        "dex/dex_instruction_utils.h",
        "dex/invoke_type.h",
        "dex/method_reference.h",
    ],
    output_extension: "operator_out.cc",
}

art_cc_library {
    name: "libdexfile",
    defaults: ["libdexfile_defaults"],
    // Leave the symbols in the shared library so that stack unwinders can
    // produce meaningful name resolution.
    strip: {
        keep_symbols: true,
    },
    target: {
        windows: {
            enabled: true,
            shared: {
                enabled: false,
            },
        },
    },
}

art_cc_library {
    name: "libdexfiled",
    defaults: [
        "art_debug_defaults",
        "libdexfile_defaults",
    ],
    target: {
        windows: {
            enabled: true,
            shared: {
                enabled: false,
            },
        },
    },
}

art_cc_test {
    name: "art_libdexfile_tests",
    defaults: [
        "art_gtest_defaults",
    ],
    srcs: [
        "dex/art_dex_file_loader_test.cc",
        "dex/class_accessor_test.cc",
        "dex/code_item_accessors_test.cc",
        "dex/compact_dex_file_test.cc",
        "dex/compact_offset_table_test.cc",
        "dex/descriptors_names_test.cc",
        "dex/test_dex_file_builder_test.cc",
        "dex/dex_file_loader_test.cc",
        "dex/dex_file_verifier_test.cc",
        "dex/dex_instruction_test.cc",
        "dex/primitive_test.cc",
        "dex/string_reference_test.cc",
        "dex/type_lookup_table_test.cc",
        "dex/utf_test.cc",
    ],
    shared_libs: [
        "libbacktrace",
        "libziparchive",
    ],
    include_dirs: [
        "external/zlib",
    ],
}

cc_library_headers {
    name: "libdexfile_external_headers",
    host_supported: true,
    header_libs: ["libbase_headers"],
    export_header_lib_headers: ["libbase_headers"],
    export_include_dirs: ["external/include"],

    target: {
        windows: {
            enabled: true,
        },
    },
}

cc_library {
    name: "libdexfile_external",
    host_supported: true,
    srcs: [
        "external/dex_file_ext.cc",
    ],
    header_libs: ["libdexfile_external_headers"],
    shared_libs: [
        "libbase",
        "libdexfile",
    ],

    // TODO(b/120670568): Enable this when linking bug is fixed.
    // stubs: {
    //     symbol_file: "external/libdexfile_external.map.txt",
    //     versions: ["1"],
    // },

    // Hide symbols using version scripts for targets that support it, i.e. all
    // but Darwin.
    // TODO(b/120670568): Clean this up when stubs above is enabled.
    target: {
        android: {
            version_script: "external/libdexfile_external.map.txt",
        },
        linux_bionic: {
            version_script: "external/libdexfile_external.map.txt",
        },
        linux_glibc: {
            version_script: "external/libdexfile_external.map.txt",
        },
        windows: {
            version_script: "external/libdexfile_external.map.txt",
        },
    },
}

art_cc_test {
    name: "art_libdexfile_external_tests",
    host_supported: true,
    test_per_src: true,  // For consistency with other ART gtests.
    srcs: [
        "external/dex_file_ext_c_test.c",
    ],
    header_libs: ["libdexfile_external_headers"],
}

// Support library with a C++ API for accessing the libdexfile API for external
// (non-ART) users. They should link to their own instance of this (either
// statically or through linker namespaces).
cc_library {
    name: "libdexfile_support",
    host_supported: true,
    srcs: [
        "external/dex_file_supp.cc",
    ],
    header_libs: ["libdexfile_external_headers"],
    shared_libs: ["libdexfile_external"],
    export_header_lib_headers: ["libdexfile_external_headers"],
}

art_cc_test {
    name: "art_libdexfile_support_tests",
    host_supported: true,
    test_per_src: true,  // For consistency with other ART gtests.
    srcs: [
        "external/dex_file_supp_test.cc",
    ],
    shared_libs: [
        "libartbase",
        "libbase",
        "libdexfile_external",
        "libdexfile_support",
    ],
}
