// Copyright (C) 2016 The Android Open Source Project
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//  * Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//  * Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in
//    the documentation and/or other materials provided with the
//    distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
// OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
// AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE.
//
//
// Copyright (c) 2016 VIXL authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
// 3. The name of the company may not be used to endorse or promote
//    products derived from this software without specific prior written
//    permission.
//
// THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cc_defaults {
    name: "vixl-common",
    host_supported: true,
    clang: true,
    srcs: ["src/*.cc"],
    clang_cflags: ["-Wimplicit-fallthrough"],
    cppflags: [
        "-DVIXL_GENERATE_SIMULATOR_INSTRUCTIONS_VALUE=0",
        "-Wall",
        "-Wextra",
        "-Werror",
        "-fdiagnostics-show-option",
        "-Wredundant-decls",
        "-Wunreachable-code",
        "-Wmissing-noreturn",
        "-pedantic",
        "-std=c++11",

        // Explicitly enable the write-strings warning. VIXL uses
        // const correctly when handling string constants.
        "-Wwrite-strings",
    ],
    local_include_dirs: ["src"],
    native_coverage: false,
    sanitize: {
        recover: ["shift-exponent"],
    },
}

cc_defaults {
    name: "vixl-arm",
    defaults: ["vixl-common"],
    cppflags: [
        "-DVIXL_CODE_BUFFER_MALLOC",
        "-DVIXL_INCLUDE_TARGET_T32",
        ],
    srcs: ["src/aarch32/*.cc"],
}

cc_defaults {
    name: "vixl-arm64",
    defaults: ["vixl-common"],
    cppflags: [
        "-DVIXL_INCLUDE_SIMULATOR_AARCH64",
        "-DVIXL_CODE_BUFFER_MMAP",
        "-DVIXL_INCLUDE_TARGET_A64",
        ],
    srcs: ["src/aarch64/*.cc"],
}

cc_defaults {
    name: "vixl-debug",
    defaults: ["vixl-common"],
    cppflags: [
        "-DVIXL_DEBUG",
        "-UNDEBUG",

        "-O2",
        "-ggdb3",
    ],
}

cc_defaults {
    name: "vixl-release",
    defaults: ["vixl-common"],
    cppflags: [
        "-O3",
    ],
}

cc_library {
    name: "libvixl-arm64",
    defaults: ["vixl-release", "vixl-arm64"],
}

cc_library {
    name: "libvixld-arm64",
    defaults: ["vixl-debug", "vixl-arm64"],
}

cc_library {
    name: "libvixl-arm",
    defaults: ["vixl-release", "vixl-arm"],
}

cc_library {
    name: "libvixld-arm",
    defaults: ["vixl-debug", "vixl-arm"],
}

//######## VIXL HOST TESTS #########
//
// We only support 64bit host builds for now.
// To run all the tests: vixl-test-runner --run_all
//
cc_binary_host {
    name: "vixl-test-runner",
    static_executable: true,
    defaults: ["vixl-debug", "vixl-arm", "vixl-arm64"],
    local_include_dirs: ["test"],
    srcs: [
        "test/*.cc",
        "test/aarch32/*.cc",
        "test/aarch64/*.cc",
    ],
    enabled: false,
    target: {
        linux_x86_64: {
            enabled: true,
        },
    },
}
