ladybird/Meta/gn/build/install_vcpkg.py
Andrew Kaster 6ee1afc9c0 Meta: Add third-party libraries to gn build with vcpkg install script
The vcpkg install is handled through an action to run vcpkg install with
the private --x-install-root flag that their CMake toolchain file uses
to install dependencies into a build-time directory.
2024-09-27 10:15:08 -06:00

56 lines
2.2 KiB
Python

#!/usr/bin/env python3
import argparse
import os
import pathlib
import subprocess
import sys
def main():
parser = argparse.ArgumentParser(description='Install vcpkg dependencies')
parser.add_argument('--cc', type=str, required=True, help='The C compiler to use')
parser.add_argument('--cxx', type=str, required=True, help='The C++ compiler to use')
parser.add_argument('--manifest', type=str, required=True, help='The vcpkg manifest to install')
parser.add_argument('--vcpkg', type=str, required=True, help='The path to the vcpkg executable')
parser.add_argument('--vcpkg-root', type=str, required=True, help='The path to the vcpkg root directory')
parser.add_argument('--vcpkg-triplet', type=str, required=True, help='The vcpkg triplet to use')
parser.add_argument('--vcpkg-overlay-triplets', type=str, help='Path to a vcpkg overlay triplets directory')
parser.add_argument('--vcpkg-binary-cache-dir', type=str, help='Path to a vcpkg binary cache directory')
parser.add_argument('--stamp-file', type=str, help='Path to a file to touch after installation')
parser.add_argument('install_directory', type=str, help='The directory to install vcpkg deps into')
args = parser.parse_args()
manifest_directory = pathlib.Path(args.manifest).parent
env = os.environ.copy()
env['CC'] = args.cc
env['CXX'] = args.cxx
vcpkg_arguments = [
args.vcpkg,
'install',
'--no-print-usage',
'--x-wait-for-lock',
f'--triplet={args.vcpkg_triplet}',
f'--vcpkg-root={args.vcpkg_root}',
f'--x-manifest-root={manifest_directory}',
f'--x-install-root={args.install_directory}'
]
if args.vcpkg_overlay_triplets:
vcpkg_arguments += [f'--overlay-triplets={args.vcpkg_overlay_triplets}']
if args.vcpkg_binary_cache_dir:
binary_cache_dir = pathlib.Path(args.vcpkg_binary_cache_dir).absolute()
vcpkg_arguments += [f'--binarysource=clear;files,{binary_cache_dir},readwrite']
subprocess.run(vcpkg_arguments, env=env, check=True)
if args.stamp_file:
pathlib.Path(args.stamp_file).touch()
return 0
if __name__ == '__main__':
sys.exit(main())