pkgname=('angle')
pkgver=7258
pkgrel=201
pkgdesc="A conformant OpenGL ES implementation for Windows, Mac, Linux, iOS and Android."
arch=('x86_64')
url="https://chromium.googlesource.com/angle/angle"
license=('BSD-3-Clause')
depends=('zlib' 'libglvnd' 'freetype2' 'expat' 'libpng' 'libjpeg-turbo' 'fontconfig' 'harfbuzz' 'gcc-libs' 'libwebp' 'glibc' 'wayland')
makedepends=('git' 'python' 'procps-ng' 'ninja' 'gn' 'patchelf' 'pciutils' 'linux-headers')
provides=(angle)
conflicts=(angle)
options=("!debug")
source=(
    "git+$url#branch=chromium/$pkgver"
    "angle.pc"
    "vk.patch"
    "gclient_args.gni"

    "build::git+https://chromium.googlesource.com/chromium/src/build.git#commit=169fcf699b64d2d5e75a391beaec8a7ad6e41a7f"
    "testing::git+https://chromium.googlesource.com/chromium/src/testing#commit=0d5210a4b1978e7e2c6b8623c719dff0a0994a8f"
    "abseil-cpp::git+https://chromium.googlesource.com/chromium/src/third_party/abseil-cpp#commit=e3d58ba1a2a04f85225c3c04fa4603bb64399b2c"
    "astc-encoder::git+https://chromium.googlesource.com/external/github.com/ARM-software/astc-encoder#commit=2319d9c4d4af53a7fc7c52985e264ce6e8a02a9b"
    "EGL-Registry::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/EGL-Registry#commit=7dea2ed79187cd13f76183c4b9100159b9e3e071"
    "libdrm::git+https://chromium.googlesource.com/chromiumos/third_party/libdrm.git#commit=ad78bb591d02162d3b90890aa4d0a238b2a37cde"
    "jsoncpp::git+https://chromium.googlesource.com/chromium/src/third_party/jsoncpp#commit=f62d44704b4da6014aa231cfc116e7fd29617d2a"
    "jsoncpp_upstream::git+https://chromium.googlesource.com/external/github.com/open-source-parsers/jsoncpp.git"
    "OpenGL-Registry::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/OpenGL-Registry#commit=200cea4030cb49d3e40677379e6368a5f0e8c27b"
    "rapidjson::git+https://chromium.googlesource.com/external/github.com/Tencent/rapidjson#commit=781a4e667d84aeedbeb8184b7b62425ea66ec59f"
    "spirv-headers::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers#commit=2a611a970fdbc41ac2e3e328802aed9985352dca"
    "spirv-tools::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools#commit=108b19e5c6979f496deffad4acbe354237afa7d3"
    "vulkan-headers::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Headers#commit=10739e8e00a7b6f74d22dd0a547f1406ff1f5eb9"
    "vulkan-loader::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Loader#commit=c8a2c8c9164a58ce71c1c77104e28e8de724539e"
    "vulkan-tools::git+https://chromium.googlesource.com/external/github.com/KhronosGroup/Vulkan-Tools#commit=e3fc64396755191b3c51e5c57d0454872e7fa487"
    "vulkan_memory_allocator::git+https://chromium.googlesource.com/external/github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator#commit=56300b29fbfcc693ee6609ddad3fdd5b7a449a21"
    "zlib::git+https://chromium.googlesource.com/chromium/src/third_party/zlib#commit=4028ebf8710ee39d2286cb0f847f9b95c59f84d8"
)
sha256sums=(
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'

    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
    'SKIP'
)

prepare() {
    rm -fr angle/build; ln -s "${srcdir}/build" angle/build
    rm -fr angle/testing; ln -s "${srcdir}/testing" angle/testing
    rm -fr angle/third_party/abseil-cpp; ln -s "${srcdir}/abseil-cpp" angle/third_party/abseil-cpp
    rm -fr angle/third_party/astc-encoder/src; ln -s "${srcdir}/astc-encoder" angle/third_party/astc-encoder/src
    rm -fr angle/third_party/EGL-Registry/src; ln -s "${srcdir}/EGL-Registry" angle/third_party/EGL-Registry/src
    rm -fr angle/third_party/libdrm/src; ln -s "${srcdir}/libdrm" angle/third_party/libdrm/src
    rm -fr angle/third_party/jsoncpp; ln -s "${srcdir}/jsoncpp" angle/third_party/jsoncpp
    rm -fr angle/third_party/jsoncpp/source; ln -s "${srcdir}/jsoncpp_upstream" angle/third_party/jsoncpp/source
    rm -fr angle/third_party/OpenGL-Registry/src; ln -s "${srcdir}/OpenGL-Registry" angle/third_party/OpenGL-Registry/src
    rm -fr angle/third_party/rapidjson/src; ln -s "${srcdir}/rapidjson" angle/third_party/rapidjson/src
    rm -fr angle/third_party/spirv-headers/src; ln -s "${srcdir}/spirv-headers" angle/third_party/spirv-headers/src
    rm -fr angle/third_party/spirv-tools/src; ln -s "${srcdir}/spirv-tools" angle/third_party/spirv-tools/src
    rm -fr angle/third_party/vulkan-headers/src; ln -s "${srcdir}/vulkan-headers" angle/third_party/vulkan-headers/src
    rm -fr angle/third_party/vulkan-loader/src; ln -s "${srcdir}/vulkan-loader" angle/third_party/vulkan-loader/src
    rm -fr angle/third_party/vulkan-tools/src; ln -s "${srcdir}/vulkan-tools" angle/third_party/vulkan-tools/src
    rm -fr angle/third_party/vulkan_memory_allocator; ln -s "${srcdir}/vulkan_memory_allocator" angle/third_party/vulkan_memory_allocator
    rm -fr angle/third_party/zlib; ln -s "${srcdir}/zlib" angle/third_party/zlib

    cp gclient_args.gni angle/build/config
    cd angle
    patch src/libANGLE/renderer/vulkan/vk_cache_utils.cpp <"$srcdir/vk.patch"
    gn gen out/Release --args="
        angle_build_tests=false
        angle_enable_abseil=true
        angle_enable_renderdoc=false
        angle_enable_swiftshader=false
        angle_enable_vulkan=true
        angle_enable_wgpu=false
        angle_expose_non_conformant_extensions_and_versions=true
        angle_use_wayland=true
        angle_use_x11=false
        build_angle_deqp_tests=false
        build_with_chromium=false
        chrome_pgo_phase=0
        is_cfi=false
        is_component_build=false
        is_clang=false
        is_debug=false
        is_official_build=true
        treat_warnings_as_errors=false
        use_custom_libcxx=false
        use_safe_libstdcxx=true
        use_siso=false
        use_sysroot=false
    "
}

build() {
	cd angle
	ninja -C ./out/Release
}

package() {
    cd "$srcdir/angle"

    # License
    install -vDm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"

    # Library
    libs=(
	libEGL
        libEGL_vulkan_secondaries
        libGLESv1_CM
        libGLESv2
        libGLESv2_vulkan_secondaries
        libGLESv2_with_capture
        libVkICD_mock_icd
        libfeature_support
    )
    for lib in "${libs[@]}"; do
        patchelf --set-rpath "/usr/lib/angle" "out/Release/$lib.so"
        install -vDm755 "out/Release/$lib.so" "$pkgdir/usr/lib/angle/$lib.so"
    done

    # Headers
    find include -type f -and -name "*.h" -exec install -v -D -m644 {} "$pkgdir/usr/"{} \; -print
    mv "${pkgdir}/usr/include" "${pkgdir}/usr/include.angle"
    install -d "${pkgdir}/usr/include/"
    mv "${pkgdir}/usr/include.angle" "${pkgdir}/usr/include/angle"

    install -D -m644 "$srcdir/angle.pc" "$pkgdir/usr/lib/pkgconfig/angle.pc"

    git reset --hard origin/main
}