Mercurial > hg > CbC > CbC_llvm
diff llvm/utils/sysroot.py @ 207:2e18cbf3894f
LLVM12
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Jun 2021 06:07:14 +0900 |
parents | |
children | c4bab56944e8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/llvm/utils/sysroot.py Tue Jun 08 06:07:14 2021 +0900 @@ -0,0 +1,98 @@ +#!/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': + 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) + + 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']) + + def mkjunction(dst, src): + subprocess.check_call(['mklink', '/j', dst, src], shell=True) + os.mkdir(out_dir) + mkjunction(os.path.join(out_dir, 'VC'), + os.path.join(vsinstalldir, 'VC')) + os.mkdir(os.path.join(out_dir, 'Windows Kits')) + mkjunction(os.path.join(out_dir, 'Windows Kits', '10'), winsdk) + 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()