mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 19:47:05 +00:00

This is the first commit in a series that will reformat all the python files in the LLVM repository. Reformatting is done with `black`. See more information here: https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style Reviewed By: jhenderson, JDevlieghere, MatzeB Differential Revision: https://reviews.llvm.org/D150545
112 lines
4.0 KiB
Python
Executable File
112 lines
4.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
"""Helps manage sysroots."""
|
|
|
|
import argparse
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def make_fake_sysroot(out_dir):
|
|
def cmdout(cmd):
|
|
return subprocess.check_output(cmd).decode(sys.stdout.encoding).strip()
|
|
|
|
if sys.platform == "win32":
|
|
|
|
def mkjunction(dst, src):
|
|
subprocess.check_call(["mklink", "/j", dst, src], shell=True)
|
|
|
|
os.mkdir(out_dir)
|
|
p = os.getenv("ProgramFiles(x86)", "C:\\Program Files (x86)")
|
|
|
|
winsdk = os.getenv("WindowsSdkDir")
|
|
if not winsdk:
|
|
winsdk = os.path.join(p, "Windows Kits", "10")
|
|
print("%WindowsSdkDir% not set. You might want to run this from")
|
|
print("a Visual Studio cmd prompt. Defaulting to", winsdk)
|
|
os.mkdir(os.path.join(out_dir, "Windows Kits"))
|
|
mkjunction(os.path.join(out_dir, "Windows Kits", "10"), winsdk)
|
|
|
|
vswhere = os.path.join(p, "Microsoft Visual Studio", "Installer", "vswhere")
|
|
vcid = "Microsoft.VisualStudio.Component.VC.Tools.x86.x64"
|
|
vsinstalldir = cmdout(
|
|
[
|
|
vswhere,
|
|
"-latest",
|
|
"-products",
|
|
"*",
|
|
"-requires",
|
|
vcid,
|
|
"-property",
|
|
"installationPath",
|
|
]
|
|
)
|
|
|
|
mkjunction(os.path.join(out_dir, "VC"), os.path.join(vsinstalldir, "VC"))
|
|
# Not all MSVC versions ship the DIA SDK, so the junction destination
|
|
# might not exist. That's fine.
|
|
mkjunction(
|
|
os.path.join(out_dir, "DIA SDK"), os.path.join(vsinstalldir, "DIA SDK")
|
|
)
|
|
elif sys.platform == "darwin":
|
|
# The SDKs used by default in compiler-rt/cmake/base-config-ix.cmake.
|
|
# COMPILER_RT_ENABLE_IOS defaults to on.
|
|
# COMPILER_RT_ENABLE_WATCHOS and COMPILER_RT_ENABLE_TV default to off.
|
|
# compiler-rt/cmake/config-ix.cmake sets DARWIN_EMBEDDED_PLATFORMS
|
|
# depending on these.
|
|
sdks = ["macosx", "iphoneos", "iphonesimulator"]
|
|
os.mkdir(out_dir)
|
|
for sdk in sdks:
|
|
sdkpath = cmdout(["xcrun", "-sdk", sdk, "-show-sdk-path"])
|
|
# sdkpath is something like /.../SDKs/MacOSX11.1.sdk, which is a
|
|
# symlink to MacOSX.sdk in the same directory. Resolve the symlink,
|
|
# to make the symlink in out_dir less likely to break when the SDK
|
|
# is updated (which will bump the number on xcrun's output, but not
|
|
# on the symlink destination).
|
|
sdkpath = os.path.realpath(sdkpath)
|
|
os.symlink(sdkpath, os.path.join(out_dir, os.path.basename(sdkpath)))
|
|
else:
|
|
os.symlink("/", out_dir)
|
|
|
|
print("Done. Pass these flags to cmake:")
|
|
abs_out_dir = os.path.abspath(out_dir)
|
|
if sys.platform == "win32":
|
|
# CMake doesn't like backslashes in commandline args.
|
|
abs_out_dir = abs_out_dir.replace(os.path.sep, "/")
|
|
print(" -DLLVM_WINSYSROOT=" + abs_out_dir)
|
|
elif sys.platform == "darwin":
|
|
flags = [
|
|
"-DCMAKE_OSX_SYSROOT=" + os.path.join(abs_out_dir, "MacOSX.sdk"),
|
|
# For find_darwin_sdk_dir() in
|
|
# compiler-rt/cmake/Modules/CompilerRTDarwinUtils.cmake
|
|
"-DDARWIN_macosx_CACHED_SYSROOT=" + os.path.join(abs_out_dir, "MacOSX.sdk"),
|
|
"-DDARWIN_iphoneos_CACHED_SYSROOT="
|
|
+ os.path.join(abs_out_dir, "iPhoneOS.sdk"),
|
|
"-DDARWIN_iphonesimulator_CACHED_SYSROOT="
|
|
+ os.path.join(abs_out_dir, "iPhoneSimulator.sdk"),
|
|
]
|
|
print(" " + " ".join(flags))
|
|
else:
|
|
print(" -DCMAKE_SYSROOT=" + abs_out_dir + " to cmake.")
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
makefake = subparsers.add_parser(
|
|
"make-fake", help="Create a sysroot that symlinks to local directories."
|
|
)
|
|
makefake.add_argument("--out-dir", required=True)
|
|
|
|
args = parser.parse_args()
|
|
|
|
assert args.command == "make-fake"
|
|
make_fake_sysroot(args.out_dir)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|