1cb93a386Sopenharmony_ci#!/usr/bin/env python 2cb93a386Sopenharmony_ci# 3cb93a386Sopenharmony_ci# Copyright 2016 Google Inc. 4cb93a386Sopenharmony_ci# 5cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 6cb93a386Sopenharmony_ci# found in the LICENSE file. 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci 9cb93a386Sopenharmony_ci""" 10cb93a386Sopenharmony_ciCreate an updated VS toolchain 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_ciBefore you can run this script, you need a collated VC toolchain + Windows SDK. 13cb93a386Sopenharmony_ciTo generate that, run depot_tools/win_toolchain/package_from_installed.py 14cb93a386Sopenharmony_ciThat script pulls all of the compiler and SDK bits from your locally installed 15cb93a386Sopenharmony_civersion of Visual Studio. The comments in that script include instructions on 16cb93a386Sopenharmony_ciwhich components need to be installed (C++, ARM64, etc...) 17cb93a386Sopenharmony_ci 18cb93a386Sopenharmony_ciThat script produces a .zip file with a SHA filename. Unzip that file, then 19cb93a386Sopenharmony_cipass the unzipped directory as the src_dir to this script. 20cb93a386Sopenharmony_ci""" 21cb93a386Sopenharmony_ci 22cb93a386Sopenharmony_ci 23cb93a386Sopenharmony_cifrom __future__ import print_function 24cb93a386Sopenharmony_ciimport argparse 25cb93a386Sopenharmony_ciimport os 26cb93a386Sopenharmony_ciimport shlex 27cb93a386Sopenharmony_ciimport shutil 28cb93a386Sopenharmony_ciimport subprocess 29cb93a386Sopenharmony_ciimport sys 30cb93a386Sopenharmony_ci 31cb93a386Sopenharmony_ci 32cb93a386Sopenharmony_ciENV_VAR = 'WIN_TOOLCHAIN_SRC_DIR' 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_ci# By default the toolchain includes a bunch of unnecessary stuff with long path 36cb93a386Sopenharmony_ci# names. Trim out directories with these names. 37cb93a386Sopenharmony_ciIGNORE_LIST = [ 38cb93a386Sopenharmony_ci 'WindowsMobile', 39cb93a386Sopenharmony_ci 'App Certification Kit', 40cb93a386Sopenharmony_ci 'Debuggers', 41cb93a386Sopenharmony_ci 'Extension SDKs', 42cb93a386Sopenharmony_ci 'DesignTime', 43cb93a386Sopenharmony_ci 'AccChecker', 44cb93a386Sopenharmony_ci] 45cb93a386Sopenharmony_ci 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_cidef getenv(key): 48cb93a386Sopenharmony_ci val = os.environ.get(key) 49cb93a386Sopenharmony_ci if not val: 50cb93a386Sopenharmony_ci print(('Environment variable %s not set; you should run this via ' 51cb93a386Sopenharmony_ci 'create_and_upload.py.' % key), file=sys.stderr) 52cb93a386Sopenharmony_ci sys.exit(1) 53cb93a386Sopenharmony_ci return val 54cb93a386Sopenharmony_ci 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_cidef filter_toolchain_files(dirname, files): 57cb93a386Sopenharmony_ci """Callback for shutil.copytree. Return lists of files to skip.""" 58cb93a386Sopenharmony_ci split = dirname.split(os.path.sep) 59cb93a386Sopenharmony_ci for ign in IGNORE_LIST: 60cb93a386Sopenharmony_ci if ign in split: 61cb93a386Sopenharmony_ci print('Ignoring dir %s' % dirname) 62cb93a386Sopenharmony_ci return files 63cb93a386Sopenharmony_ci return [] 64cb93a386Sopenharmony_ci 65cb93a386Sopenharmony_ci 66cb93a386Sopenharmony_cidef main(): 67cb93a386Sopenharmony_ci if sys.platform != 'win32': 68cb93a386Sopenharmony_ci print('This script only runs on Windows.', file=sys.stderr) 69cb93a386Sopenharmony_ci sys.exit(1) 70cb93a386Sopenharmony_ci 71cb93a386Sopenharmony_ci parser = argparse.ArgumentParser() 72cb93a386Sopenharmony_ci parser.add_argument('--target_dir', '-t', required=True) 73cb93a386Sopenharmony_ci args = parser.parse_args() 74cb93a386Sopenharmony_ci 75cb93a386Sopenharmony_ci # Obtain src_dir from create_and_upload via an environment variable, since 76cb93a386Sopenharmony_ci # this script is called via `sk` and not directly. 77cb93a386Sopenharmony_ci src_dir = getenv(ENV_VAR) 78cb93a386Sopenharmony_ci 79cb93a386Sopenharmony_ci target_dir = os.path.abspath(args.target_dir) 80cb93a386Sopenharmony_ci shutil.copytree(src_dir, target_dir, ignore=filter_toolchain_files) 81cb93a386Sopenharmony_ci 82cb93a386Sopenharmony_ci 83cb93a386Sopenharmony_ciif __name__ == '__main__': 84cb93a386Sopenharmony_ci main() 85