// 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",
        "-Wno-implicit-const-int-float-conversion",
        "-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"],
        },
    },
}
