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

package {
    // http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // the below license kinds from "external_swiftshader_license":
    //   SPDX-license-identifier-Apache-2.0
    //   SPDX-license-identifier-BSD
    default_applicable_licenses: ["external_swiftshader_license"],
}

cc_defaults {
    name: "libswiftshadervk_llvm_defaults",

    host_supported: true,

    header_libs: [
        "swiftshader_platform_headers",
    ],

    srcs: [
        "Reactor/Assert.cpp",
        "Reactor/CPUID.cpp",
        "Reactor/Debug.cpp",
        "Reactor/ExecutableMemory.cpp",
        "Reactor/LLVMJIT.cpp",
        "Reactor/LLVMReactor.cpp",
        "Reactor/Pragma.cpp",
        "Reactor/Reactor.cpp",
        "Reactor/SIMD.cpp",
    ],

    cflags: [
        "-DREACTOR_ANONYMOUS_MMAP_NAME=swiftshader_jit",
        "-Wno-unused-parameter",
        "-Wno-implicit-fallthrough",
    ],

    static_libs: [
        "libLLVM16_swiftshader",
    ],

    shared_libs: [
        "libcutils",
        "liblog",
    ],
}

cc_library_static {
    name: "libswiftshadervk_llvm",
    vendor: true,
    defaults: [ "libswiftshadervk_llvm_defaults" ],
}

cc_library_static {
    name: "libswiftshadervk_llvm_debug",
    vendor: true,
    defaults: [ "libswiftshadervk_llvm_defaults" ],
    cflags: [
        "-UNDEBUG",
    ],
}

genrule {
    name: "commit_header",
    out: ["commit.h"],
    tool_files: ["commit_id.py"],
    cmd: "$(location commit_id.py) gen $(genDir)/commit.h",
}

cc_defaults {
    name: "libvk_swiftshader_defaults",
    host_supported: true,
    vendor: true,

    defaults: [ "swiftshader_common" ],

    cflags: [
        "-D_GNU_SOURCE",
        "-D__STDC_LIMIT_MACROS",
        "-D__STDC_CONSTANT_MACROS",
        "-D__STDC_FORMAT_MACROS",
        "-Wno-implicit-fallthrough",
        "-Wno-unused-parameter",
        "-Wno-unused-local-typedef",
        "-Wno-missing-field-initializers",
        // Enable to output commit hash when SwiftShader is initialized
        //"-DENABLE_BUILD_VERSION_OUTPUT",
    ],

    cppflags: [
        "-Wno-sign-promo",
        "-Wno-non-virtual-dtor",
    ],

    ldflags: [
        // -Bsymbolic binds symbol references to their global definitions within
        // a shared object, thereby preventing symbol preemption.
        "-Wl,-Bsymbolic",
    ],

    local_include_dirs: [ "Vulkan" ],

    generated_headers: [ "commit_header" ],

    target: {
        android: {
            relative_install_path: "hw",
            header_libs: [
                "swiftshader_platform_headers",
                "vulkan_headers",
                "hwvulkan_headers",
            ],
            shared_libs: [
                "libnativewindow",
                "libhardware",
                "libsync",
                "liblog",
            ],
            static_libs: [
                "libarect",
            ],
            version_script: "Vulkan/android_vk_swiftshader.lds",
        },
        host: {
            version_script: "Vulkan/android_host_vk_swiftshader.lds",
        },
    },
}

cc_library_static {
    name: "swiftshader_debug",

    host_supported: true,

    vendor_available: true,

    cflags: [
        "-DLOG_TAG=\"swiftshader\"",
    ],

    srcs: [
        "System/Debug.cpp",
    ],

    export_include_dirs: [
        ".",
    ],

    shared_libs: [
        "liblog",
    ],
}

cc_defaults {
    name: "libvk_swiftshader_common_defaults",

    cflags: [
        "-DLOG_TAG=\"swiftshader\"",
        "-DSWIFTSHADER_ENABLE_ASTC",  // TODO(b/150130101)
        "-DSWIFTSHADER_DEVICE_MEMORY_REPORT",
    ],

    srcs: [
        "System/Build.cpp",
        "System/Configurator.cpp",
        "System/CPUID.cpp",
        "System/Half.cpp",
        "System/Linux/MemFd.cpp",
        "System/Math.cpp",
        "System/Memory.cpp",
        "System/Socket.cpp",
        "System/SwiftConfig.cpp",
        "System/Timer.cpp",
        "Device/*.cpp",
        "Pipeline/*.cpp",
        "Vulkan/libVulkan.cpp",
        "Vulkan/main.cpp",
        "Vulkan/VkBuffer.cpp",
        "Vulkan/VkBufferView.cpp",
        "Vulkan/VkCommandBuffer.cpp",
        "Vulkan/VkCommandPool.cpp",
        "Vulkan/VkDebugUtilsMessenger.cpp",
        "Vulkan/VkDescriptorPool.cpp",
        "Vulkan/VkDescriptorSet.cpp",
        "Vulkan/VkDescriptorSetLayout.cpp",
        "Vulkan/VkDescriptorUpdateTemplate.cpp",
        "Vulkan/VkDevice.cpp",
        "Vulkan/VkDeviceMemory.cpp",
        "Vulkan/VkDeviceMemoryExternalHost.cpp",
        "Vulkan/VkFormat.cpp",
        "Vulkan/VkFramebuffer.cpp",
        "Vulkan/VkGetProcAddress.cpp",
        "Vulkan/VkImage.cpp",
        "Vulkan/VkImageView.cpp",
        "Vulkan/VkInstance.cpp",
        "Vulkan/VkMemory.cpp",
        "Vulkan/VkPhysicalDevice.cpp",
        "Vulkan/VkPipelineCache.cpp",
        "Vulkan/VkPipeline.cpp",
        "Vulkan/VkPipelineLayout.cpp",
        "Vulkan/VkPromotedExtensions.cpp",
        "Vulkan/VkQueryPool.cpp",
        "Vulkan/VkQueue.cpp",
        "Vulkan/VkRenderPass.cpp",
        "Vulkan/VkSampler.cpp",
        "Vulkan/VkSemaphore.cpp",
        "Vulkan/VkShaderModule.cpp",
        "Vulkan/VkSpecializationInfo.cpp",
        "Vulkan/VkStringify.cpp",
        "Vulkan/VkTimelineSemaphore.cpp",
        "WSI/HeadlessSurfaceKHR.cpp",
        "WSI/VkSurfaceKHR.cpp",
    ],

    static_libs: [
        "swiftshader_astc",
        "swiftshader_debug",
        "swiftshader_marl",
        "swiftshader_spirv-tools",
    ],

    include_dirs: [
        "external/swiftshader/third_party/SPIRV-Headers/include",
        "external/swiftshader/include",
    ],

    target: {
        android: {
            srcs: [
                "Vulkan/VkDeviceMemoryExternalAndroid.cpp",
            ],
            cflags: [
                "-DSWIFTSHADER_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER",
            ],
        },
        host: {
            srcs: [
                "WSI/VkSwapchainKHR.cpp",
            ],
            cflags: [
                "-DSWIFTSHADER_EXTERNAL_MEMORY_OPAQUE_FD",
                // Allocations which may be mapped into a KVM based virtual
                // machine must be page aligned.
                "-DSWIFTSHADER_DEVICE_MEMORY_ALLOCATION_ALIGNMENT=4096",
            ],
        },
    },
}

cc_library_shared {
    name: "vulkan.pastel",

    static_libs: [
        "libswiftshadervk_llvm",
        "libLLVM16_swiftshader",
    ],

    target: {
        host: {
            strip: {
                keep_symbols_and_debug_frame: true,
            },
        },
    },

    defaults: [
        "libvk_swiftshader_common_defaults",
        "libvk_swiftshader_defaults"
    ],
}

cc_library_shared {
    name: "vulkan.pastel.debug",

    static_libs: [
        "libswiftshadervk_llvm_debug",
        "libLLVM16_swiftshader_debug",
    ],

    cflags: [
        "-UNDEBUG",
        "-g",
        "-O0",
        "-DDEFAULT_THREAD_COUNT=1",
    ],

    defaults: [
        "libvk_swiftshader_common_defaults",
        "libvk_swiftshader_defaults",
    ],
}

filegroup {
    name: "swiftshader_icd_json_template",
    srcs: [
        "Vulkan/vk_swiftshader_icd.json.tmpl",
    ],
}
