OverviewFilesCommitsIssuesDocsReleasesPeers

nvidia-rtx-godot / misc / scripts / install_angle.py

74 lines · python ref:
#!/usr/bin/env python3

import os
import platform
import shutil
import sys
import urllib.request

sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "../../"))

from misc.utility.color import Ansi, color_print

# Base Godot dependencies path
# If cross-compiling (no LOCALAPPDATA), we install in `bin`
deps_folder = os.getenv("LOCALAPPDATA")
if deps_folder:
    deps_folder = os.path.join(deps_folder, "Godot", "build_deps")
else:
    deps_folder = os.path.join("bin", "build_deps")

# ANGLE
# Check for latest version: https://github.com/godotengine/godot-angle-static/releases/latest
angle_version = "chromium/7219"
angle_folder = os.path.join(deps_folder, "angle")

# Create dependencies folder
if not os.path.exists(deps_folder):
    os.makedirs(deps_folder)

# Mesa NIR
print(f"Downloading ANGLE {angle_version} ...")
archs = [
    "arm64-llvm",
    "x86_32-gcc",
    "x86_32-llvm",
    "x86_64-gcc",
    "x86_64-llvm",
]
if platform.system() == "Windows":
    # Only download MSVC libraries if we can build using it.
    archs.append("arm64-msvc")
    archs.append("x86_32-msvc")
    archs.append("x86_64-msvc")
elif platform.system() == "Darwin":
    # Only download macOS/iOS libraries if we can build for these platforms.
    archs.append("arm64-ios")
    archs.append("arm64-ios-sim")
    archs.append("arm64-macos")
    archs.append("x86_64-macos")

for arch in archs:
    angle_filename = f"godot-angle-static-{arch}-release.zip"
    angle_archive = os.path.join(deps_folder, angle_filename)
    angle_folder = os.path.join(deps_folder, f"angle-{arch}")

    if os.path.isfile(angle_archive):
        os.remove(angle_archive)
    print(f"Downloading ANGLE {angle_filename} ...")
    urllib.request.urlretrieve(
        f"https://github.com/godotengine/godot-angle-static/releases/download/{angle_version}/{angle_filename}",
        angle_archive,
    )
    if os.path.exists(angle_folder):
        print(f"Removing existing local ANGLE installation in {angle_folder} ...")
        shutil.rmtree(angle_folder)
    print(f"Extracting ANGLE {angle_filename} to {angle_folder} ...")
    shutil.unpack_archive(angle_archive, angle_folder)
    os.remove(angle_archive)
print("ANGLE installed successfully.\n")

# Complete message
color_print(f'{Ansi.GREEN}All ANGLE components were installed to "{deps_folder}" successfully!')
color_print(f'{Ansi.GREEN}You can now build Godot with statically linked ANGLE by running "scons angle=yes".')