//
// Copyright (C) 2017 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: "libnativebridge-dummy-defaults",
    defaults: [
        "art_defaults",
        "art_test_defaults",
    ],
    // TODO(mast): Split up art_gtest_defaults so that it can be used for the
    // following without pulling in lots of libs.
    target: {
        linux: {
            cflags: [
                // gtest issue
                "-Wno-used-but-marked-unused",
                "-Wno-deprecated",
                "-Wno-missing-noreturn",
            ],
        },
    },
    header_libs: [
        "jni_headers",
        "libnativebridge-headers",
    ],
    cppflags: ["-fvisibility=protected"],
}

cc_library_shared {
    name: "libnativebridge-dummy",
    srcs: ["DummyNativeBridge.cpp"],
    defaults: ["libnativebridge-dummy-defaults"],
}

cc_library_shared {
    name: "libnativebridge2-dummy",
    srcs: ["DummyNativeBridge2.cpp"],
    defaults: ["libnativebridge-dummy-defaults"],
}

cc_library_shared {
    name: "libnativebridge3-dummy",
    srcs: ["DummyNativeBridge3.cpp"],
    defaults: ["libnativebridge-dummy-defaults"],
}

cc_library_shared {
    name: "libnativebridge6-dummy",
    srcs: ["DummyNativeBridge6.cpp"],
    defaults: ["libnativebridge-dummy-defaults"],
    shared_libs: [
        "libnativebridge6prezygotefork",
    ],
}

// A helper library to produce dummy side effect of PreZygoteForkNativeBridge.
cc_library_shared {
    name: "libnativebridge6prezygotefork",
    srcs: ["NativeBridge6PreZygoteFork_lib.cpp"],
    defaults: ["libnativebridge-dummy-defaults"],
}

// Build the unit tests.
cc_defaults {
    name: "libnativebridge-tests-defaults",
    defaults: [
        "art_defaults",
        "art_test_defaults",
    ],
    // TODO(mast): Split up art_gtest_defaults so that it can be used for the
    // following without pulling in lots of libs.
    target: {
        linux: {
            cflags: [
                // gtest issue
                "-Wno-used-but-marked-unused",
                "-Wno-deprecated",
                "-Wno-missing-noreturn",
            ],
        },
    },

    srcs: [
        "CodeCacheCreate_test.cpp",
        "CodeCacheExists_test.cpp",
        "CodeCacheStatFail_test.cpp",
        "CompleteFlow_test.cpp",
        "InvalidCharsNativeBridge_test.cpp",
        "NativeBridge2Signal_test.cpp",
        "NativeBridgeVersion_test.cpp",
        "NeedsNativeBridge_test.cpp",
        "PreInitializeNativeBridge_test.cpp",
        "PreInitializeNativeBridgeFail1_test.cpp",
        "PreInitializeNativeBridgeFail2_test.cpp",
        "ReSetupNativeBridge_test.cpp",
        "UnavailableNativeBridge_test.cpp",
        "ValidNameNativeBridge_test.cpp",
        "NativeBridge3UnloadLibrary_test.cpp",
        "NativeBridge3GetError_test.cpp",
        "NativeBridge3IsPathSupported_test.cpp",
        "NativeBridge3InitAnonymousNamespace_test.cpp",
        "NativeBridge3CreateNamespace_test.cpp",
        "NativeBridge3LoadLibraryExt_test.cpp",
        "NativeBridge6PreZygoteFork_test.cpp",
    ],

    shared_libs: [
        "liblog",
        "libnativebridge-dummy",
        "libnativebridge6prezygotefork",
    ],
    header_libs: ["libbase_headers"],
}

cc_test {
    name: "libnativebridge-tests",
    defaults: ["libnativebridge-tests-defaults"],
    shared_libs: ["libnativebridge"],
}

cc_test {
    name: "libnativebridge-lazy-tests",
    defaults: ["libnativebridge-tests-defaults"],
    host_supported: false,
    shared_libs: ["libnativebridge_lazy"],
}

// Build the test for the C API.
cc_test {
    name: "libnativebridge-api-tests",
    defaults: [
        "art_defaults",
        "art_test_defaults",
    ],
    // TODO(mast): Split up art_gtest_defaults so that it can be used for the
    // following without pulling in lots of libs.
    target: {
        linux: {
            cflags: [
                // gtest issue
                "-Wno-used-but-marked-unused",
                "-Wno-deprecated",
                "-Wno-missing-noreturn",
            ],
        },
    },
    srcs: [
        "NativeBridgeApi.c",
    ],
    header_libs: [
        "jni_headers",
        "libnativebridge-headers",
    ],
}
