// Mesa 3-D graphics library
//
// Copyright (C) 2010-2011 Chia-I Wu <olvaffe@gmail.com>
// Copyright (C) 2010-2011 LunarG Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.

soong_namespace {}

// *** 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_mesa3d_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.
// See: http://go/android-license-faq
license {
    name: "external_mesa3d_license",
    visibility: [":__subpackages__"],
    license_kinds: [
        "SPDX-license-identifier-Apache-2.0",
        "SPDX-license-identifier-BSD",
        "SPDX-license-identifier-BSL-1.0",
        "SPDX-license-identifier-GPL",
        "SPDX-license-identifier-GPL-2.0",
        "SPDX-license-identifier-ISC",
        "SPDX-license-identifier-MIT",
        "SPDX-license-identifier-Unlicense",
        "legacy_by_exception_only", // by exception only
        "legacy_notice",
        "legacy_unencumbered",
    ],
    license_text: [
        "LICENSE",
    ],
}

build = ["Android.gen.bp"]

cc_library_headers {
    name: "mesa_common_headers",
    export_include_dirs: [
        "src",
        "include",
    ],
    host_supported: true,
    vendor: true,
    visibility: [":__subpackages__"],
}

// This needs to be kept in sync with Android.common.mk
cc_defaults {
    name: "mesa_common_defaults",
    defaults: ["mesa_version_defaults"],

    // uncomment to keep the debug symbols
    // strip: { none: true, },

    vendor: true,
    header_libs: ["mesa_common_headers"],

    cflags: [
        "-Wno-error",
        "-Werror=incompatible-pointer-types",
        "-Wno-unused-parameter",
        "-Wno-pointer-arith",
        "-Wno-missing-field-initializers",
        "-Wno-initializer-overrides",
        "-Wno-mismatched-tags",
        // PACKAGE_VERSION is in mesa_version_defaults
        "-DPACKAGE_BUGREPORT=\"https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa\"",

        // XXX: The following __STDC_*_MACROS defines should not be needed.
        // It's likely due to a bug elsewhere, but let's temporarily add them
        // here to fix the radeonsi build.
        "-DENABLE_SHADER_CACHE",
        "-D__STDC_CONSTANT_MACROS",
        "-D__STDC_LIMIT_MACROS",
        "-DHAVE___BUILTIN_EXPECT",
        "-DHAVE___BUILTIN_FFS",
        "-DHAVE___BUILTIN_FFSLL",
        "-DHAVE_DLFCN_H",
        "-DHAVE_FUNC_ATTRIBUTE_FLATTEN",
        "-DHAVE_FUNC_ATTRIBUTE_UNUSED",
        "-DHAVE_FUNC_ATTRIBUTE_FORMAT",
        "-DHAVE_FUNC_ATTRIBUTE_PACKED",
        "-DHAVE_FUNC_ATTRIBUTE_ALIAS",
        "-DHAVE_FUNC_ATTRIBUTE_NORETURN",
        "-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL",
        "-DHAVE_FUNC_ATTRIBUTE_WARN_UNUSED_RESULT",
        "-DHAVE___BUILTIN_CTZ",
        "-DHAVE___BUILTIN_POPCOUNT",
        "-DHAVE___BUILTIN_POPCOUNTLL",
        "-DHAVE___BUILTIN_CLZ",
        "-DHAVE___BUILTIN_CLZLL",
        "-DHAVE___BUILTIN_UNREACHABLE",
        "-DHAVE_PTHREAD=1",
        "-DHAVE_DLADDR",
        "-DHAVE_DL_ITERATE_PHDR",
        "-DHAVE_LINUX_FUTEX_H",
        "-DHAVE_ENDIAN_H",
        "-DHAVE_ZLIB",
        "-DMAJOR_IN_SYSMACROS",
        "-DVK_USE_PLATFORM_ANDROID_KHR",
        "-fvisibility=hidden",
        "-fno-math-errno",
        "-fno-trapping-math",
        "-Werror",
        "-Wno-#warnings",
        "-Wno-asm-operand-widths",
        "-Wno-cast-calling-convention",
        "-Wno-constant-logical-operand",
        "-Wno-enum-conversion",
        "-Wno-format",
        "-Wno-gnu-variable-sized-type-not-at-end",
        "-Wno-implicit-fallthrough",
        "-Wno-incompatible-pointer-types",
        "-Wno-missing-braces",
        "-Wno-overloaded-virtual",
        "-Wno-self-assign",
        "-Wno-shift-negative-value",
        "-Wno-sign-compare",
        "-Wno-sometimes-uninitialized",
        "-Wno-switch",
        "-Wno-typedef-redefinition",
        "-Wno-uninitialized",
        "-DHAVE_TIMESPEC_GET",
    ],

    // mesa requires at least c99 compiler
    c_std: "c99",

    cppflags: [
        "-D__STDC_CONSTANT_MACROS",
        "-D__STDC_FORMAT_MACROS",
        "-D__STDC_LIMIT_MACROS",
        "-Wno-error=non-virtual-dtor",
        "-Wno-non-virtual-dtor",
    ],

    arch: {
        arm: {
            neon: {
                cflags: ["-DUSE_ARM_ASM"],
            },
        },
        arm64: {
            cflags: ["-DUSE_AARCH64_ASM"],
        },
    },

    multilib: {
        lib32: {
            cflags: ["-DDEFAULT_DRIVER_DIR=\"/vendor/lib/dri\""],
        },
        lib64: {
            cflags: ["-DDEFAULT_DRIVER_DIR=\"/vendor/lib64/dri\""],
        },
    },

    product_variables: {
        platform_sdk_version: {
            cflags: ["-DANDROID_API_LEVEL=%d"],
        },
    },

    target: {
        host: {
            cflags: [
                "-D_GNU_SOURCE",
                "-DHAVE_LIBDRM",
            ],
            shared_libs: ["libdrm"],
        },
    },
}
