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

// Include the generated rules
// *** THIS PACKAGE HAS SPECIAL LICENSING CONDITIONS.  PLEASE
//     CONSULT THE OWNERS AND opensource-licensing@google.com BEFORE
//     DEPENDING ON IT IN YOUR PROJECT. ***
package {
    default_applicable_licenses: ["external_ltp_license"],
}

// Added automatically by a large-scale-change that took the approach of
// 'apply every license found to every target'. While this makes sure we respect
// every license restriction, it may not be entirely correct.
//
// e.g. GPL in an MIT project might only apply to the contrib/ directory.
//
// Please consider splitting the single license below into multiple licenses,
// taking care not to lose any license_kind information, and overriding the
// default license using the 'licenses: [...]' property on targets as needed.
//
// For unused files, consider creating a 'fileGroup' with "//visibility:private"
// to attach the license to, and including a comment whether the files may be
// used in the current project.
//
// large-scale-change included anything that looked like it might be a license
// text as a license_text. e.g. LICENSE, NOTICE, COPYING etc.
//
// Please consider removing redundant or irrelevant files from 'license_text:'.
// See: http://go/android-license-faq
license {
    name: "external_ltp_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-APSL-1.1",
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
        "SPDX-license-identifier-BSD-2-Clause",
        "SPDX-license-identifier-BSD-3-Clause",
        "SPDX-license-identifier-GFDL", // by exception only
        "SPDX-license-identifier-GPL",
        "SPDX-license-identifier-GPL-2.0",
        "SPDX-license-identifier-GPL-3.0",
        "SPDX-license-identifier-ISC",
        "SPDX-license-identifier-LGPL",
    ],
    license_text: [
        "COPYING",
        "NOTICE",
    ],
}

build = ["gen.bp"]

genrule {
    name: "ltp_syscalls_h",
    tool_files: [
        "include/lapi/syscalls/regen.sh",
        "include/lapi/syscalls/*.in",
    ],
    cmd: "$(location) $(genDir)/lapi/syscalls.h",
    out: ["lapi/syscalls.h"],
}

cc_defaults {
    name: "ltp_defaults",

    cflags: [
        // Hacks for bionic compatibility
        "-include bionic-compat.h",

        "-Wall",
        "-Werror",
        // These warnings should be checked and fixed upstream
        "-Wno-absolute-value",
        "-Wno-uninitialized",
        "-Wno-user-defined-warnings",
        // Silence noisy warnings
        "-Wno-constant-conversion",
        "-Wno-deprecated",
        "-Wno-duplicate-decl-specifier",
        "-Wno-empty-body",
        "-Wno-format",
        "-Wno-gnu-designator",
        "-Wno-implicit-function-declaration",
        "-Wno-incompatible-pointer-types-discards-qualifiers",
        "-Wno-knr-promoted-parameter",
        "-Wno-macro-redefined",
        "-Wno-missing-braces",
        "-Wno-missing-field-initializers",
        "-Wno-parentheses-equality",
        "-Wno-pointer-arith",
        "-Wno-pointer-sign",
        "-Wno-sign-compare",
        "-Wno-tautological-compare",
        "-Wno-unneeded-internal-declaration",
        "-Wno-unreachable-code-loop-increment",
        "-Wno-unused-function",
        "-Wno-unused-parameter",
        "-Wno-unused-variable",
    ],

    local_include_dirs: [
        "android/include",
        "include",
    ],

    target: {
        // bionic has broken signal handling for signum > 32 on 32-bit ARM and x86
        // (for ABI reasons this can't be fixed)
        android_arm: {
            cflags: ["-DNUMSIGS=32"],
        },
        android_x86: {
            cflags: ["-DNUMSIGS=32"],
        },
    },

    generated_headers: ["ltp_syscalls_h"],

    static_libs: ["libcap"],

    // TODO: recover libaio when the external project created
    shared_libs: ["libselinux", "libasyncio"],
}

cc_defaults {
    name: "ltp_test_defaults",
    defaults: ["ltp_defaults"],
    gtest: false,
    no_named_install_directory: true,
    relative_install_path: "ltp/testcases/bin",
}
