From 9e80bee41ed54f202e87d464c566f4aaea46a7a1 Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Sat, 17 Nov 2018 16:00:00 +0100 Subject: [PATCH 1/6] install_clcache_msbuild.py : helper for msbuild integration Since the integration of `clcache` with `msbuild` is rather cumbersome, this script provide an helper in order to simplify the process. What this script does: ********************* * Check that python3 and pip3 are installed and are in the PATH * Check that the pip installed scripts are in the PATH (PYTHONHOME\Scripts) * Call `pip install .` from the repo and check that clcache is then in the PATH. `clcache` will subsequently be used from the PYTHONHOME\\Scripts directory. * Modify the user msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` so that clcache becomes the default compiler * Set the env variable `CLCACHE_CL` with the correct path to cl.exe As additional options, this script can also * change the cache location * change the cache size * change the timeout CLCACHE_OBJECT_CACHE_TIMEOUT_MS Usage : ******* ```` c: cd C:\clcache\install_for_msbuild python install_clcache_msbuild.py -h usage: install_clcache_msbuild.py [-h] [--cachedir CACHEDIR] [--cache_size CACHE_SIZE] [--clcache_timeout CLCACHE_TIMEOUT] {status,install,disable,enable_logs,disable_logs} Configure clcache for use with msbuild positional arguments: {status,install,disable,enable_logs,disable_logs} action optional arguments: -h, --help show this help message and exit --cachedir CACHEDIR clcache directory --cache_size CACHE_SIZE clcache size in Go --clcache_timeout CLCACHE_TIMEOUT clcache object cache timeout in seconds (increase if you have failures during your build) Actions summary: status : Show the install status and tells if clcache is enabled install: : Install and enable clcache for msbuild integration" disable: : Disable clcache enable_logs : Activate clcache logs during builds disable_logs : Disable clcache logs during builds ```` --- install_for_msbuild/Readme.md | 87 +++++ .../install_clcache_msbuild.py | 332 ++++++++++++++++++ 2 files changed, 419 insertions(+) create mode 100644 install_for_msbuild/Readme.md create mode 100644 install_for_msbuild/install_clcache_msbuild.py diff --git a/install_for_msbuild/Readme.md b/install_for_msbuild/Readme.md new file mode 100644 index 00000000..39b250dc --- /dev/null +++ b/install_for_msbuild/Readme.md @@ -0,0 +1,87 @@ +# install_clcache_msbuild + +Since the integration of `clcache` with `msbuild` is rather cumbersome, +this script provide an helper in order to simplify the process. + +## What this script does: + +* Check that python3 and pip3 are installed and are in the PATH +* Check that the pip installed scripts are in the PATH (PYTHONHOME\Scripts) +* Call `pip install .` from the repo and check that clcache is then in the PATH. + `clcache` will subsequently be used from the PYTHONHOME\\Scripts directory. +* Modify the user msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` + so that clcache becomes the default compiler +* Set the env variable `CLCACHE_CL` with the correct path to cl.exe + +As additional options, this script can also +* change the cache location +* change the cache size +* change the timeout CLCACHE_OBJECT_CACHE_TIMEOUT_MS + +Usage : + +```` +c: +cd C:\clcache\install_for_msbuild +python install_clcache_msbuild.py -h + +usage: install_clcache_msbuild.py [-h] [--cachedir CACHEDIR] + [--cache_size CACHE_SIZE] + [--clcache_timeout CLCACHE_TIMEOUT] + {status,install,disable,enable_logs,disable_logs} + +Configure clcache for use with msbuild + +positional arguments: + {status,install,disable,enable_logs,disable_logs} + action + +optional arguments: + -h, --help show this help message and exit + --cachedir CACHEDIR clcache directory + --cache_size CACHE_SIZE + clcache size in Go + --clcache_timeout CLCACHE_TIMEOUT + clcache object cache timeout in seconds (increase if + you have failures during your build) + +Actions summary: + status : Show the install status and tells if clcache is enabled + install: : Install and enable clcache for msbuild integration" + disable: : Disable clcache + enable_logs : Activate clcache logs during builds + disable_logs : Disable clcache logs during builds + +```` + + + +# Caveats with msbuild and clcache : + +## incremental builds with clcache and msbuild + +clcache has serious isses with incremental builds. After a full build, you will always get a full rebuild even if you modify only one file ! + +There is a pull request that succesfully correct this here: https://github.com/frerich/clcache/pull/319/commits + + + +## clcache is not compatible with `/Zi` debug information format : use `/Z7` instead. + +See +https://github.com/frerich/clcache/issues/30 +and https://stackoverflow.com/questions/284778/what-are-the-implications-of-using-zi-vs-z7-for-visual-studio-c-projects + +With cmake, you can do the following: + + + ```cmake + message("msvc_clccache_force_z7_debug_format use /Z7 debug format") + if(MSVC) + string(REGEX REPLACE "/Z[iI7]" "" + CMAKE_CXX_FLAGS_DEBUG + "${CMAKE_CXX_FLAGS_DEBUG}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7") + endif() + ```` + diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py new file mode 100644 index 00000000..4f329bf7 --- /dev/null +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -0,0 +1,332 @@ + +import ctypes +import sys +import subprocess +import os +import os.path +import winreg +import argparse + + +def dirAbsolutePath(folder): + return os.path.abspath(os.path.realpath(folder)) + + +THIS_DIR = dirAbsolutePath(os.path.dirname(__file__)) +CLCACHE_REPO_DIR = dirAbsolutePath(THIS_DIR + "\\..") +MSVC_BIN_FOLDER = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\" +MSBUILD_USER_SETTINGS_DIR = dirAbsolutePath(os.getenv('APPDATA') + "\\..\\Local\\Microsoft\\MSBuild\\v4.0") +MSBUILD_SETTING_FILE_CONTENT_CLCACHE = """ + + + + + + + clcache.exe + + + + +""" +MSBUILD_SETTING_FILE_CONTENT_NO_CLCACHE = """ + + + + + + + + +""" + + +def isAdmin(): + return ctypes.windll.shell32.IsUserAnAdmin() + + +def currentFuncName(n=0): + return sys._getframe(n + 1).f_code.co_name #pylint: disable=W0212 + + +def hasProgramInPath(prog): + print("Looking for " + prog + " in PATH") + result = subprocess.call("where " + prog) + if result != 0: + print(prog + " not found in PATH") + return result == 0 + + +def whereProgram(prog): + allProgrs = subprocess.check_output("where " + prog).decode("utf-8") + firstProg = allProgrs.split("\r")[0] + return firstProg + + +def showCmd(cmd): + print("====> " + cmd) + + +def callAndShowCmd(command: str, cwd: str = None) -> bool: + if cwd is not None: + print("====> " + command + "(in folder " + cwd + ")") + else: + print("====> " + command) + if cwd is not None: + return subprocess.call(command, cwd=cwd) == 0 + else: + return subprocess.call(command) == 0 + + +def implSetAndStoreEnvVariable(name, value, allUsers=False): + """ + Stocke une variable d'environnement touts utilisateurs sous windows + """ + if allUsers: + cmd = "SETX {0} \"{1}\" /M".format(name, value) + else: + cmd = "SETX {0} \"{1}\"".format(name, value) + if not callAndShowCmd(cmd): + return False + os.environ[name] = value + return True + + +def setAndStoreEnvVariable(name, value): + return implSetAndStoreEnvVariable(name, value, allUsers=isAdmin()) + + +def implRemoveEnvVariable(name, allUsers=False): + if allUsers: + command = "REG DELETE HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment /F /V " + name + else: + command = "REG DELETE HKCU\\Environment /F /V " + name + if not callAndShowCmd(command): + return False + if name is os.environ: + os.environ.pop(name, None) + return True + + +def removeEnvVariable(name): + return implRemoveEnvVariable(name, allUsers=isAdmin()) + + +def implReadEnvVariableFromRegistry(name, allUsers=False) -> str: + if allUsers: + reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) + key = winreg.OpenKey(reg, r"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment") + else: + reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) + key = winreg.OpenKey(reg, r"Environment") + try: + result = winreg.QueryValueEx(key, name) + except FileNotFoundError: + return None + return result[1] + + +def readEnvVariableFromRegistry(name): + return implReadEnvVariableFromRegistry(name, allUsers=isAdmin()) + + +def showStepIntro(details=0): + print() + print("######################################################################") + print(details + " (" + currentFuncName(1) + ")") + print("######################################################################") + + +def installClcache(): + showStepIntro("Installing clcache") + status = callAndShowCmd("pip install .", cwd=CLCACHE_REPO_DIR) + if not status: + return False + if not hasProgramInPath("clcache"): + print("Humm. its seems that the install failed") + return False + return True + + +def listFiles(folder, appendFolder=True): + files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))] + if appendFolder: + files = [os.path.join(folder, f) for f in files] + return files + + +def implCopyMsvcPref(prefContent): + files = listFiles(MSBUILD_USER_SETTINGS_DIR) + for file in files: + with open(file, 'w') as f: + f.write(prefContent) + print("Wrote pref in " + file) + return True + + +def copyMsvcPrefClcache(): + showStepIntro("Force clcache via Msbbuild user settings") + return implCopyMsvcPref(MSBUILD_SETTING_FILE_CONTENT_CLCACHE) + + +def copyMsvcPrefOriginal(): + showStepIntro("Disable clcache via Msbbuild user settings") + return implCopyMsvcPref(MSBUILD_SETTING_FILE_CONTENT_NO_CLCACHE) + + +def clcacheSetEnv(): + showStepIntro("set CLCACHE_CL env variable") + if not setAndStoreEnvVariable("CLCACHE_CL", MSVC_BIN_FOLDER + "\\cl.exe"): + return False + # CLCACHE_OBJECT_CACHE_TIMEOUT_MS + return True + + +def enableLogs(): + return setAndStoreEnvVariable("CLCACHE_LOG", "1") + + +def disableLogs(): + return removeEnvVariable("CLCACHE_LOG") + + +def showClCacheUsage(): + showStepIntro("Note about clcache usage:") + subprocess.run("clcache --help") + return True + + +def fullClcacheSetup(): + if not installClcache(): + return False + if not copyMsvcPrefClcache(): + return False + if not clcacheSetEnv(): + return False + if not showClCacheUsage(): + return False + return True + + +def clCacheDisable(): + if not copyMsvcPrefOriginal(): + return False + return True + + +def showStatus(): + if hasProgramInPath("clcache"): + print("clcache is in your PATH") + else: + print("clcache is not installed") + + if readEnvVariableFromRegistry("CLCACHE_LOG") is not None: + print("logs are enabled") + else: + print("logs are disabled") + + prefFile = MSBUILD_USER_SETTINGS_DIR + "\\Microsoft.Cpp.Win32.user.props" + isEnabled = False + with open(prefFile, "r") as f: + lines = f.readlines() + for line in lines: + if "clcache.exe" in line: + isEnabled = True + if isEnabled: + print("clcache is *ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) + else: + print("clcache is *NOT ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) + print("call clcache -s for statistics") + return True + + +def makeInitialChecks(): + if not hasProgramInPath("python"): + print("This program needs python 3") + return False + if not hasProgramInPath("pip"): + print("This program needs pip 3") + return False + + if not "python 3" in subprocess.check_output(["python", "--version"]).decode("utf-8").lower(): + print("Bad python version : this program needs python 3") + return False + + if not "python 3" in subprocess.check_output(["pip", "--version"]).decode("utf-8").lower(): + print("Bad pip version : this program needs pip for python 3") + return False + + pipScriptsDir = os.path.dirname(whereProgram("python")) + "\\Scripts" + if pipScriptsDir.lower() not in os.environ["PATH"].lower(): + print("Can't find pip_scripts_dir in your PATH. pip_scripts_dir=" + pipScriptsDir) + print("Please add this to your PATH") + return False + return True + + +def main(): + epilog = """Actions summary: + status : Show the install status and tells if clcache is enabled + install: : Install and enable clcache for msbuild integration" + disable: : Disable clcache + enable_logs : Activate clcache logs during builds + disable_logs : Disable clcache logs during builds + """ + helpTimeout = """clcache object cache timeout in seconds + (increase if you have failures during your build) + """ + parser = argparse.ArgumentParser( + description="Configure clcache for use with msbuild", + epilog=epilog, + formatter_class=argparse.RawDescriptionHelpFormatter + ) + choices = ["status", "install", "disable", "enable_logs", "disable_logs"] + parser.add_argument("action", choices=choices, help="action") + parser.add_argument("--cachedir", help="clcache directory") + parser.add_argument("--cache_size", help="clcache size in Go", type=int, default=0) + parser.add_argument("--clcache_timeout", help=helpTimeout, type=int, default=0) + + if sys.argv[0][-3:] == ".py": + argv = sys.argv[1:] + else: + argv = sys.argv + args = parser.parse_args(argv) + + if args.action == "status": + if not showStatus(): + return False + elif args.action == "install": + if not makeInitialChecks(): + return False + if not fullClcacheSetup(): + return False + elif args.action == "disable": + if not clCacheDisable(): + return False + elif args.action == "enable_logs": + if not enableLogs(): + return False + elif args.action == "disable_logs": + if not disableLogs(): + return False + + if args.cachedir is not None: + setAndStoreEnvVariable("CLCACHE_DIR", args.cachedir) + + if args.cache_size > 0: + giga = 1024 * 1024 * 1024 + byteSize = giga * args.cache_size + if not callAndShowCmd("clcache -M " +str(byteSize)): + return False + + if args.clcache_timeout > 0: + timeMs = args.clcache_timeout * 1000 + setAndStoreEnvVariable("CLCACHE_OBJECT_CACHE_TIMEOUT_MS", str(timeMs)) + + return True + + +if __name__ == "__main__": + if not main(): + print("FAILURE") + sys.exit(1) From 689b4b936663942c21859cf0f60c899e5b631134 Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Sun, 18 Nov 2018 15:15:23 +0100 Subject: [PATCH 2/6] install_for_msbuild : compat for MSVC 2010, 2015 and 2017 This script should now be compatible with MSVC installs, even if not installed in the default folder. The install will now ask to select the correct compiler Notes: * `vswhere.exe` is a tool provided by Microsoft in order to locate installations of MSVC >= 2017. * locate_cl_exe.py : will create a list of all the available cl.exe compiler such as below: Sample usage session: ****************** > python install_clcache_msbuild.py install Looking for python in PATH C:\Python36-32\python.exe Looking for pip in PATH C:\Python36-32\Scripts\pip.exe Installing clcache (installClcache) ====> pip install .(in folder F:\dvp\OpenSource\clcache) Processing f:\dvp\opensource\clcache Requirement already satisfied: pymemcache in c:\python36-32\lib\site-packages (from clcache==4.1.1.dev65+g105e486.d20181119) (2.0.0) Requirement already satisfied: pyuv in c:\python36-32\lib\site-packages (from clcache==4.1.1.dev65+g105e486.d20181119) (1.4.0) Requirement already satisfied: six in c:\python36-32\lib\site-packages (from pymemcache->clcache==4.1.1.dev65+g105e486.d20181119) (1.11.0) Installing collected packages: clcache Found existing installation: clcache 4.1.1.dev65+g105e486.d20181119 Uninstalling clcache-4.1.1.dev65+g105e486.d20181119: Successfully uninstalled clcache-4.1.1.dev65+g105e486.d20181119 Running setup.py install for clcache ... done Successfully installed clcache-4.1.1.dev65+g105e486.d20181119 You are using pip version 10.0.1, however version 18.1 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command. Looking for clcache in PATH C:\Python36-32\Scripts\clcache.exe Force clcache via Msbbuild user settings (copyMsvcPrefClcache) Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.ARM.user.props Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props Select cl compiler: (selectCl) # version targetArch hostArch folder (shortened) 1 14.0 amd64 amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64 2 14.0 arm amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64_arm 3 14.0 x86 amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64_x86 4 14.0 amd64 x86 C:\ProgX86\MSVC 14.0\vc\bin\x86_amd64 5 14.0 arm x86 C:\ProgX86\MSVC 14.0\vc\bin\x86_arm 6 14.0 x86 x86 C:\ProgX86\MSVC 14.0\vc\bin 7 15.7.27703.2047 x64 x64 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64 8 15.7.27703.2047 x86 x64 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x86 9 15.7.27703.2047 x64 x86 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x64 10 15.7.27703.2047 x86 x86 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x86 Enter the number corresponding to the desired compiler: 6 Selected : C:\Program Files (x86)\Microsoft Visual Studio 14.0\vc\bin\cl.exe ====> SETX CLCACHE_CL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\vc\bin\cl.exe" SUCCESS: Specified value was saved. Note about clcache usage: (showClCacheUsage) ====> clcache --help clcache.py v4.1.0-dev --help : show this help -s : print cache statistics -c : clean cache -C : clear cache -z : reset cache statistics -M : set maximum cache size (in bytes) --- install_for_msbuild/Readme.md | 112 +++++-- install_for_msbuild/env_utils.py | 168 +++++++++++ install_for_msbuild/env_utils_tests.py | 33 +++ .../install_clcache_msbuild.py | 273 +++++++----------- install_for_msbuild/locate_cl_exe.py | 133 +++++++++ install_for_msbuild/vswhere.exe | Bin 0 -> 428224 bytes 6 files changed, 518 insertions(+), 201 deletions(-) create mode 100644 install_for_msbuild/env_utils.py create mode 100644 install_for_msbuild/env_utils_tests.py create mode 100644 install_for_msbuild/locate_cl_exe.py create mode 100644 install_for_msbuild/vswhere.exe diff --git a/install_for_msbuild/Readme.md b/install_for_msbuild/Readme.md index 39b250dc..a8cd007a 100644 --- a/install_for_msbuild/Readme.md +++ b/install_for_msbuild/Readme.md @@ -3,6 +3,8 @@ Since the integration of `clcache` with `msbuild` is rather cumbersome, this script provide an helper in order to simplify the process. +It is compatible with MSVC 2010, 2015 and 2017 (tested with MSVC 2015 and 2017). + ## What this script does: * Check that python3 and pip3 are installed and are in the PATH @@ -10,7 +12,9 @@ this script provide an helper in order to simplify the process. * Call `pip install .` from the repo and check that clcache is then in the PATH. `clcache` will subsequently be used from the PYTHONHOME\\Scripts directory. * Modify the user msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` - so that clcache becomes the default compiler + so that clcache becomes the default compiler. (These prefs are shared between MSVC 2010 to 2017). +* Find all cl.exes version on your computer (for MSVC 2010 to MSVC 2017), and allows you + to select the correct one, by showing a detailed list of their version and target architecture. * Set the env variable `CLCACHE_CL` with the correct path to cl.exe As additional options, this script can also @@ -18,43 +22,89 @@ As additional options, this script can also * change the cache size * change the timeout CLCACHE_OBJECT_CACHE_TIMEOUT_MS -Usage : +## Caveat +Since the msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` are shared +between different MSVC installations, clcache will be activated for all instances of MSVC. -```` -c: -cd C:\clcache\install_for_msbuild -python install_clcache_msbuild.py -h +## Note +`vswhere.exe` is a tool provided by Microsoft in order to locate installations of MSVC >= 2017. +## Usage + +```` usage: install_clcache_msbuild.py [-h] [--cachedir CACHEDIR] [--cache_size CACHE_SIZE] [--clcache_timeout CLCACHE_TIMEOUT] - {status,install,disable,enable_logs,disable_logs} - -Configure clcache for use with msbuild - -positional arguments: - {status,install,disable,enable_logs,disable_logs} - action - -optional arguments: - -h, --help show this help message and exit - --cachedir CACHEDIR clcache directory - --cache_size CACHE_SIZE - clcache size in Go - --clcache_timeout CLCACHE_TIMEOUT - clcache object cache timeout in seconds (increase if - you have failures during your build) - -Actions summary: - status : Show the install status and tells if clcache is enabled - install: : Install and enable clcache for msbuild integration" - disable: : Disable clcache - enable_logs : Activate clcache logs during builds - disable_logs : Disable clcache logs during builds - + {status,install,disable,enable_logs,disable_logs,show_cl_list,select_cl} ```` - +Sample usage session: + +````bash +> python install_clcache_msbuild.py install +Looking for python in PATH +C:\Python36-32\python.exe +Looking for pip in PATH +C:\Python36-32\Scripts\pip.exe + +###################################################################### +Installing clcache (installClcache) +###################################################################### +====> pip install .(in folder F:\dvp\OpenSource\clcache) +Processing f:\dvp\opensource\clcache +Requirement already satisfied: pymemcache in c:\python36-32\lib\site-packages (from clcache==4.1.1.dev65+g105e486.d20181119) (2.0.0) +Requirement already satisfied: pyuv in c:\python36-32\lib\site-packages (from clcache==4.1.1.dev65+g105e486.d20181119) (1.4.0) +Requirement already satisfied: six in c:\python36-32\lib\site-packages (from pymemcache->clcache==4.1.1.dev65+g105e486.d20181119) (1.11.0) +Installing collected packages: clcache + Found existing installation: clcache 4.1.1.dev65+g105e486.d20181119 + Uninstalling clcache-4.1.1.dev65+g105e486.d20181119: + Successfully uninstalled clcache-4.1.1.dev65+g105e486.d20181119 + Running setup.py install for clcache ... done +Successfully installed clcache-4.1.1.dev65+g105e486.d20181119 +You are using pip version 10.0.1, however version 18.1 is available. +You should consider upgrading via the 'python -m pip install --upgrade pip' command. +Looking for clcache in PATH +C:\Python36-32\Scripts\clcache.exe + +###################################################################### +Force clcache via Msbbuild user settings (copyMsvcPrefClcache) +###################################################################### +Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.ARM.user.props +Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.Win32.user.props +Wrote pref in C:\Users\pascal\AppData\Local\Microsoft\MSBuild\v4.0\Microsoft.Cpp.x64.user.props + +###################################################################### +Select cl compiler: (selectCl) +###################################################################### + # version targetArch hostArch folder (shortened) + 1 14.0 amd64 amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64 + 2 14.0 arm amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64_arm + 3 14.0 x86 amd64 C:\ProgX86\MSVC 14.0\vc\bin\amd64_x86 + 4 14.0 amd64 x86 C:\ProgX86\MSVC 14.0\vc\bin\x86_amd64 + 5 14.0 arm x86 C:\ProgX86\MSVC 14.0\vc\bin\x86_arm + 6 14.0 x86 x86 C:\ProgX86\MSVC 14.0\vc\bin + 7 15.7.27703.2047 x64 x64 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x64 + 8 15.7.27703.2047 x86 x64 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx64\x86 + 9 15.7.27703.2047 x64 x86 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x64 + 10 15.7.27703.2047 x86 x86 C:\ProgX86\MSVC\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\Hostx86\x86 +Enter the number corresponding to the desired compiler: 6 +Selected : C:\Program Files (x86)\Microsoft Visual Studio 14.0\vc\bin\cl.exe +====> SETX CLCACHE_CL "C:\Program Files (x86)\Microsoft Visual Studio 14.0\vc\bin\cl.exe" + +SUCCESS: Specified value was saved. + +###################################################################### +Note about clcache usage: (showClCacheUsage) +###################################################################### +====> clcache --help +clcache.py v4.1.0-dev + --help : show this help + -s : print cache statistics + -c : clean cache + -C : clear cache + -z : reset cache statistics + -M : set maximum cache size (in bytes) +```` # Caveats with msbuild and clcache : diff --git a/install_for_msbuild/env_utils.py b/install_for_msbuild/env_utils.py new file mode 100644 index 00000000..0e033ae7 --- /dev/null +++ b/install_for_msbuild/env_utils.py @@ -0,0 +1,168 @@ +import ctypes +import winreg +import os +import os.path +import sys +import subprocess +import platform + + +def shortDirectoryName(folder): + result = folder + result = result.replace("Program Files (x86)", "ProgX86") + result = result.replace("Program Files", "Prog") + result = result.replace("Microsoft Visual Studio", "MSVC") + return result + + +def isOs64bit(): + return platform.machine().endswith('64') + +def dirNameAbsolute(folder: str) -> str: + return os.path.abspath(os.path.realpath(folder)) + + +def fileDirNameAbsolute(file: str) -> str: + return dirNameAbsolute(os.path.dirname(file)) + + +def appDataPathLocal() -> str: + result = dirNameAbsolute(os.getenv('APPDATA') + "\\..\\Local") + return result + +def isAdmin(): + return ctypes.windll.shell32.IsUserAnAdmin() + + +def currentFuncName(n=0): + return sys._getframe(n + 1).f_code.co_name #pylint: disable=W0212 + + +def showFunctionIntro(details=""): + print() + print("######################################################################") + print(details + " (" + currentFuncName(1) + ")") + print("######################################################################") + + +def hasProgramInPath(prog): + print("Looking for " + prog + " in PATH") + result = subprocess.call("where " + prog) + if result != 0: + print(prog + " not found in PATH") + return result == 0 + + +def whereProgram(prog: str) -> str: + allProgrs = subprocess.check_output("where " + prog).decode("utf-8") + firstProg = allProgrs.split("\r")[0] + return firstProg + + +def whereProgramFolder(prog: str) -> str: + progLocation = whereProgram(prog) + return os.path.dirname(progLocation) + + +def pipScriptsDir(): + return whereProgramFolder("python") + "\\Scripts" + + +def showCmd(cmd): + print("====> " + cmd) + + +def callAndShowCmd(command: str, cwd: str = None) -> bool: + if cwd is not None: + print("====> " + command + "(in folder " + cwd + ")") + else: + print("====> " + command) + if cwd is not None: + return subprocess.call(command, cwd=cwd) == 0 + else: + return subprocess.call(command) == 0 + + +def callCmdGetOutput(command: str, cwd: str = None) -> str: + return subprocess.check_output(command, cwd=cwd).decode("utf-8") + + +def implSetAndStoreEnvVariable(name, value, allUsers=False): + if allUsers: + cmd = "SETX {0} \"{1}\" /M".format(name, value) + else: + cmd = "SETX {0} \"{1}\"".format(name, value) + if not callAndShowCmd(cmd): + return False + os.environ[name] = value + return True + + +def setAndStoreEnvVariable(name, value): + return implSetAndStoreEnvVariable(name, value, allUsers=isAdmin()) + + +def implRemoveEnvVariable(name, allUsers=False): + if allUsers: + command = "REG DELETE HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment /F /V " + name + else: + command = "REG DELETE HKCU\\Environment /F /V " + name + if not callAndShowCmd(command): + return False + if name is os.environ: + os.environ.pop(name, None) + return True + + +def removeEnvVariable(name): + return implRemoveEnvVariable(name, allUsers=isAdmin()) + + +def implReadRegistryValue(registryKind: int, keyName: str, valueName: str) -> str: + reg = winreg.ConnectRegistry(None, registryKind) + try: + key = winreg.OpenKey(reg, keyName) + result = winreg.QueryValueEx(key, valueName) + return result[0] + except FileNotFoundError: + return None + + +def readRegistryValueLocalMachine(keyName: str, valueName: str) -> str: + return implReadRegistryValue(winreg.HKEY_LOCAL_MACHINE, keyName, valueName) + + +def implReadEnvVariableFromRegistry(valueName, allUsers=False) -> str: + if allUsers: + keyName = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment" + return implReadRegistryValue(winreg.HKEY_LOCAL_MACHINE, keyName, valueName) + else: + return implReadRegistryValue(winreg.HKEY_CURRENT_USER, "Environment", valueName) + + +def readEnvVariableFromRegistry(name): + return implReadEnvVariableFromRegistry(name, allUsers=isAdmin()) + + +def readPathFromEnvironment() -> str: + return os.environ["PATH"] + + +def readPathFromRegistry() -> str: + result = implReadEnvVariableFromRegistry("PATH", allUsers=False) + result = result + ";" + implReadEnvVariableFromRegistry("PATH", allUsers=True) + return result + + +def listFiles(folder, appendFolder=True): + files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))] + if appendFolder: + files = [os.path.join(folder, f) for f in files] + return files + + +def listSubdirs(folder, appendFolder=True): + files = [f for f in os.listdir(folder) if os.path.isdir(os.path.join(folder, f))] + if appendFolder: + files = [os.path.join(folder, f) for f in files] + return files diff --git a/install_for_msbuild/env_utils_tests.py b/install_for_msbuild/env_utils_tests.py new file mode 100644 index 00000000..798cdb53 --- /dev/null +++ b/install_for_msbuild/env_utils_tests.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python +import unittest +import env_utils +import locate_cl_exe + +class EnvUtilsTests(unittest.TestCase): + def testEnvVars(self): + env_utils.setAndStoreEnvVariable("DUMMYVAR", "dummy") + result = env_utils.readEnvVariableFromRegistry("DUMMYVAR") + self.assertEqual(result, "dummy") + env_utils.removeEnvVariable("DUMMYVAR") + result = env_utils.readEnvVariableFromRegistry("DUMMYVAR") + self.assertTrue(result is None) + + +class LocateClTests(unittest.TestCase): + def testFindfindMsvcUpTo2015(self): + result = locate_cl_exe.implFindMsvcUpTo2015() + self.assertTrue(len(result) > 0) + def testFindMsvc2017(self): + aux = locate_cl_exe.implFindMsvc2017() + self.assertTrue(len(aux) >= 0) + def testFindMsvc(self): + aux = locate_cl_exe.findMsvc() + self.assertTrue(len(aux) > 0) + def testFindCl(self): + aux = locate_cl_exe.findClExesList() + self.assertTrue(len(aux) > 0) + + +if __name__ == '__main__': + unittest.TestCase.longMessage = True + unittest.main() diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py index 4f329bf7..3b6e1195 100644 --- a/install_for_msbuild/install_clcache_msbuild.py +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -1,21 +1,13 @@ -import ctypes import sys -import subprocess -import os -import os.path -import winreg import argparse +import env_utils +import locate_cl_exe -def dirAbsolutePath(folder): - return os.path.abspath(os.path.realpath(folder)) - - -THIS_DIR = dirAbsolutePath(os.path.dirname(__file__)) -CLCACHE_REPO_DIR = dirAbsolutePath(THIS_DIR + "\\..") -MSVC_BIN_FOLDER = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\bin\\" -MSBUILD_USER_SETTINGS_DIR = dirAbsolutePath(os.getenv('APPDATA') + "\\..\\Local\\Microsoft\\MSBuild\\v4.0") +THIS_DIR = env_utils.fileDirNameAbsolute(__file__) +CLCACHE_REPO_DIR = env_utils.dirNameAbsolute(THIS_DIR + "\\..") +MSBUILD_USER_SETTINGS_DIR = env_utils.appDataPathLocal() + "\\Microsoft\\MSBuild\\v4.0" MSBUILD_SETTING_FILE_CONTENT_CLCACHE = """ @@ -24,6 +16,7 @@ def dirAbsolutePath(folder): clcache.exe + PIP_SCRIPTS_DIR @@ -41,122 +34,19 @@ def dirAbsolutePath(folder): """ -def isAdmin(): - return ctypes.windll.shell32.IsUserAnAdmin() - - -def currentFuncName(n=0): - return sys._getframe(n + 1).f_code.co_name #pylint: disable=W0212 - - -def hasProgramInPath(prog): - print("Looking for " + prog + " in PATH") - result = subprocess.call("where " + prog) - if result != 0: - print(prog + " not found in PATH") - return result == 0 - - -def whereProgram(prog): - allProgrs = subprocess.check_output("where " + prog).decode("utf-8") - firstProg = allProgrs.split("\r")[0] - return firstProg - - -def showCmd(cmd): - print("====> " + cmd) - - -def callAndShowCmd(command: str, cwd: str = None) -> bool: - if cwd is not None: - print("====> " + command + "(in folder " + cwd + ")") - else: - print("====> " + command) - if cwd is not None: - return subprocess.call(command, cwd=cwd) == 0 - else: - return subprocess.call(command) == 0 - - -def implSetAndStoreEnvVariable(name, value, allUsers=False): - """ - Stocke une variable d'environnement touts utilisateurs sous windows - """ - if allUsers: - cmd = "SETX {0} \"{1}\" /M".format(name, value) - else: - cmd = "SETX {0} \"{1}\"".format(name, value) - if not callAndShowCmd(cmd): - return False - os.environ[name] = value - return True - - -def setAndStoreEnvVariable(name, value): - return implSetAndStoreEnvVariable(name, value, allUsers=isAdmin()) - - -def implRemoveEnvVariable(name, allUsers=False): - if allUsers: - command = "REG DELETE HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment /F /V " + name - else: - command = "REG DELETE HKCU\\Environment /F /V " + name - if not callAndShowCmd(command): - return False - if name is os.environ: - os.environ.pop(name, None) - return True - - -def removeEnvVariable(name): - return implRemoveEnvVariable(name, allUsers=isAdmin()) - - -def implReadEnvVariableFromRegistry(name, allUsers=False) -> str: - if allUsers: - reg = winreg.ConnectRegistry(None, winreg.HKEY_LOCAL_MACHINE) - key = winreg.OpenKey(reg, r"SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment") - else: - reg = winreg.ConnectRegistry(None, winreg.HKEY_CURRENT_USER) - key = winreg.OpenKey(reg, r"Environment") - try: - result = winreg.QueryValueEx(key, name) - except FileNotFoundError: - return None - return result[1] - - -def readEnvVariableFromRegistry(name): - return implReadEnvVariableFromRegistry(name, allUsers=isAdmin()) - - -def showStepIntro(details=0): - print() - print("######################################################################") - print(details + " (" + currentFuncName(1) + ")") - print("######################################################################") - - def installClcache(): - showStepIntro("Installing clcache") - status = callAndShowCmd("pip install .", cwd=CLCACHE_REPO_DIR) + env_utils.showFunctionIntro("Installing clcache") + status = env_utils.callAndShowCmd("pip install .", cwd=CLCACHE_REPO_DIR) if not status: return False - if not hasProgramInPath("clcache"): + if not env_utils.hasProgramInPath("clcache"): print("Humm. its seems that the install failed") return False return True -def listFiles(folder, appendFolder=True): - files = [f for f in os.listdir(folder) if os.path.isfile(os.path.join(folder, f))] - if appendFolder: - files = [os.path.join(folder, f) for f in files] - return files - - def implCopyMsvcPref(prefContent): - files = listFiles(MSBUILD_USER_SETTINGS_DIR) + files = env_utils.listFiles(MSBUILD_USER_SETTINGS_DIR) for file in files: with open(file, 'w') as f: f.write(prefContent) @@ -165,46 +55,20 @@ def implCopyMsvcPref(prefContent): def copyMsvcPrefClcache(): - showStepIntro("Force clcache via Msbbuild user settings") - return implCopyMsvcPref(MSBUILD_SETTING_FILE_CONTENT_CLCACHE) + env_utils.showFunctionIntro("Force clcache via Msbbuild user settings") + prefContent = MSBUILD_SETTING_FILE_CONTENT_CLCACHE.replace( + "PIP_SCRIPTS_DIR", env_utils.pipScriptsDir()) + return implCopyMsvcPref(prefContent) def copyMsvcPrefOriginal(): - showStepIntro("Disable clcache via Msbbuild user settings") + env_utils.showFunctionIntro("Disable clcache via Msbbuild user settings") return implCopyMsvcPref(MSBUILD_SETTING_FILE_CONTENT_NO_CLCACHE) -def clcacheSetEnv(): - showStepIntro("set CLCACHE_CL env variable") - if not setAndStoreEnvVariable("CLCACHE_CL", MSVC_BIN_FOLDER + "\\cl.exe"): - return False - # CLCACHE_OBJECT_CACHE_TIMEOUT_MS - return True - - -def enableLogs(): - return setAndStoreEnvVariable("CLCACHE_LOG", "1") - - -def disableLogs(): - return removeEnvVariable("CLCACHE_LOG") - - def showClCacheUsage(): - showStepIntro("Note about clcache usage:") - subprocess.run("clcache --help") - return True - - -def fullClcacheSetup(): - if not installClcache(): - return False - if not copyMsvcPrefClcache(): - return False - if not clcacheSetEnv(): - return False - if not showClCacheUsage(): - return False + env_utils.showFunctionIntro("Note about clcache usage:") + env_utils.callAndShowCmd("clcache --help") return True @@ -215,12 +79,12 @@ def clCacheDisable(): def showStatus(): - if hasProgramInPath("clcache"): + if env_utils.hasProgramInPath("clcache"): print("clcache is in your PATH") else: print("clcache is not installed") - if readEnvVariableFromRegistry("CLCACHE_LOG") is not None: + if env_utils.readEnvVariableFromRegistry("CLCACHE_LOG") is not None: print("logs are enabled") else: print("logs are disabled") @@ -236,42 +100,105 @@ def showStatus(): print("clcache is *ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) else: print("clcache is *NOT ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) + + cl = env_utils.readEnvVariableFromRegistry("CLCACHE_CL") + print("CLCACHE_CL (real compiler) is :" + cl) print("call clcache -s for statistics") return True def makeInitialChecks(): - if not hasProgramInPath("python"): + if not env_utils.hasProgramInPath("python"): print("This program needs python 3") return False - if not hasProgramInPath("pip"): + if not env_utils.hasProgramInPath("pip"): print("This program needs pip 3") return False - if not "python 3" in subprocess.check_output(["python", "--version"]).decode("utf-8").lower(): + if not "python 3" in env_utils.callCmdGetOutput("python --version").lower(): print("Bad python version : this program needs python 3") return False - if not "python 3" in subprocess.check_output(["pip", "--version"]).decode("utf-8").lower(): + if not "python 3" in env_utils.callCmdGetOutput("pip --version").lower(): print("Bad pip version : this program needs pip for python 3") return False - pipScriptsDir = os.path.dirname(whereProgram("python")) + "\\Scripts" - if pipScriptsDir.lower() not in os.environ["PATH"].lower(): + pipScriptsDir = env_utils.pipScriptsDir() + if pipScriptsDir.lower() not in env_utils.readPathFromRegistry().lower(): print("Can't find pip_scripts_dir in your PATH. pip_scripts_dir=" + pipScriptsDir) print("Please add this to your PATH") return False return True +def selectCl(): + env_utils.showFunctionIntro("Select cl compiler:") + clExesList = locate_cl_exe.findClExesList() + locate_cl_exe.printClList(clExesList) + while True: + answer = input("Enter the number corresponding to the desired compiler: ") + try: + nb = int(answer) + except ValueError: + print("Enter a number between 1 and " + str(len(clExesList))) + continue + if nb >= 1 and nb <= len(clExesList): + clExe = clExesList[nb - 1].installDir + "\\cl.exe" + print("Selected : " + clExe) + env_utils.setAndStoreEnvVariable("CLCACHE_CL", clExe) + return True + else: + print("Enter a number between 1 and " + str(len(clExesList))) + return False + + +def fullClcacheSetup(): + if not installClcache(): + return False + if not copyMsvcPrefClcache(): + return False + if not selectCl(): + return False + if not showClCacheUsage(): + return False + return True + + def main(): - epilog = """Actions summary: + epilog = r"""Actions summary: status : Show the install status and tells if clcache is enabled - install: : Install and enable clcache for msbuild integration" + install: : Install and enable clcache for msbuild integration" + (will let you choose between the available cl.exe) disable: : Disable clcache enable_logs : Activate clcache logs during builds disable_logs : Disable clcache logs during builds - """ + show_cl_list : List available cl.exe compilers + select_cl : Choose which cl.exe to activate + +What this script does: +********************** + +* Check that python3 and pip3 are installed and are in the PATH +* Check that the pip installed scripts are in the PATH (PYTHONHOME\Scripts) +* Call `pip install .` from the repo and check that clcache is then in the PATH. + `clcache` will subsequently be used from the PYTHONHOME\\Scripts directory. +* Modify the user msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` + so that clcache becomes the default compiler. (These prefs are shared between MSVC 2010 to 2017). +* Find all cl.exes version on your computer (for MSVC 2010 to MSVC 2017), and allows you + to select the correct one, by showing a detailed list of their version and target architecture. +* Set the env variable `CLCACHE_CL` with the correct path to cl.exe + +As additional options, this script can also +* change the cache location +* change the cache size +* change the timeout CLCACHE_OBJECT_CACHE_TIMEOUT_MS + +Caveat +****** +since the msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` are shared +between different MSVC installations, clcache will be activated for all instances of MSVC. + + """.replace("MSBUILD_USER_SETTINGS_DIR", MSBUILD_USER_SETTINGS_DIR) helpTimeout = """clcache object cache timeout in seconds (increase if you have failures during your build) """ @@ -280,7 +207,7 @@ def main(): epilog=epilog, formatter_class=argparse.RawDescriptionHelpFormatter ) - choices = ["status", "install", "disable", "enable_logs", "disable_logs"] + choices = ["status", "install", "disable", "enable_logs", "disable_logs", "show_cl_list", "select_cl"] parser.add_argument("action", choices=choices, help="action") parser.add_argument("--cachedir", help="clcache directory") parser.add_argument("--cache_size", help="clcache size in Go", type=int, default=0) @@ -304,24 +231,30 @@ def main(): if not clCacheDisable(): return False elif args.action == "enable_logs": - if not enableLogs(): + if not env_utils.setAndStoreEnvVariable("CLCACHE_LOG", "1"): return False elif args.action == "disable_logs": - if not disableLogs(): + if not env_utils.removeEnvVariable("CLCACHE_LOG"): return False + elif args.action == "show_cl_list": + locate_cl_exe.printClList(locate_cl_exe.findClExesList()) + return True + elif args.action == "select_cl": + selectCl() + return True if args.cachedir is not None: - setAndStoreEnvVariable("CLCACHE_DIR", args.cachedir) + env_utils.setAndStoreEnvVariable("CLCACHE_DIR", args.cachedir) if args.cache_size > 0: giga = 1024 * 1024 * 1024 byteSize = giga * args.cache_size - if not callAndShowCmd("clcache -M " +str(byteSize)): + if not env_utils.callAndShowCmd("clcache -M " +str(byteSize)): return False if args.clcache_timeout > 0: timeMs = args.clcache_timeout * 1000 - setAndStoreEnvVariable("CLCACHE_OBJECT_CACHE_TIMEOUT_MS", str(timeMs)) + env_utils.setAndStoreEnvVariable("CLCACHE_OBJECT_CACHE_TIMEOUT_MS", str(timeMs)) return True diff --git a/install_for_msbuild/locate_cl_exe.py b/install_for_msbuild/locate_cl_exe.py new file mode 100644 index 00000000..5c445451 --- /dev/null +++ b/install_for_msbuild/locate_cl_exe.py @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +import json +import typing +import os.path +import os +import env_utils + +THIS_DIR = env_utils.fileDirNameAbsolute(__file__) + +class MsvcInstall(object): + version: str + installDir: str + def __init__(self, version, installDir): + self.version = version + self.installDir = installDir + + +class ClInfo(object): + msvcInstall: MsvcInstall + installDir: str + hostArch: str + targetArch: str + def __init__(self, msvcInstall, installDir, hostArch, targetArch): + self.msvcInstall = msvcInstall + self.installDir = installDir + self.hostArch = hostArch + self.targetArch = targetArch + def __str__(self): + result = "version: " + self.msvcInstall.version + " hostArch:" \ + + self.hostArch + " targetArch:" + self.targetArch + " (" + self.installDir + ")" + return result + + +def implFindMsvcUpTo2015() -> typing.List[MsvcInstall]: + versions = ["8.0", "9.0", "10.0", "11.0", "12.0", "13.0", "14.0", "15.0"] + if env_utils.isOs64bit(): + softwareSubkey = "SOFTWARE\\Wow6432Node" + else: + softwareSubkey = "SOFTWARE" + keyTemplate = softwareSubkey + "\\Microsoft\\VisualStudio\\__VERSION__\\" + + result = [] + for version in versions: + valueName = "InstallDir" + key = keyTemplate.replace("__VERSION__", version) + installDir = env_utils.readRegistryValueLocalMachine(key, valueName) + if installDir is not None: + result.append(MsvcInstall(version, installDir)) + return result + + +def implFindMsvc2017() -> typing.List[MsvcInstall]: + jsonStr = env_utils.callCmdGetOutput(THIS_DIR + "\\vswhere.exe -format json") + jsonData = json.loads(jsonStr) + result = [] + for entry in jsonData: + result.append( + MsvcInstall(entry["installationVersion"], entry["installationPath"])) + return result + + +def findMsvc() -> typing.List[MsvcInstall]: + return implFindMsvcUpTo2015() + implFindMsvc2017() + + +def implfindClExesForOldMsvc(msvcInstall: MsvcInstall) -> typing.List[ClInfo]: + result = [] + mainClPath = env_utils.dirNameAbsolute(msvcInstall.installDir + "\\..\\..\\vc\\bin") + subDirs = env_utils.listSubdirs(mainClPath, appendFolder=False) + ["."] + def hasClExe(subdir): + return os.path.isfile(mainClPath + "\\" + subdir + "\\cl.exe") + dirsWithCl = [ dir for dir in subDirs if hasClExe(dir)] + # dirWithCl is something like + # ['amd64', 'amd64_arm', 'amd64_x86', 'x86_amd64', 'x86_arm', '.'] + # in this ist : "." = x86_x86 and amd64 = amd64_amd64 + for dirWithCl in dirsWithCl: + fullDir = env_utils.dirNameAbsolute(mainClPath + "\\" + dirWithCl) + if dirWithCl == ".": + hostArch = "x86" + targetArch = "x86" + elif dirWithCl == "amd64": + hostArch = "amd64" + targetArch = "amd64" + else: + tokens = dirWithCl.split("_") + hostArch = tokens[0] + targetArch = tokens[1] + result.append( ClInfo(msvcInstall, fullDir, hostArch, targetArch ) ) + return result + + +def implfindClExesForMsvc2017(msvcInstall: MsvcInstall) -> typing.List[ClInfo]: + result = [] + topDir = msvcInstall.installDir + "\\VC\\Tools\\MSVC" + for dirpath, dirnames, filenames in os.walk(topDir): + for file in filenames: + if file == "cl.exe": + # dirpath looks like + # c:\Program Files (x86)\...\bin\Hostx64\x64 + dirTokens = dirpath.split("\\") + hostArch = dirTokens[-2].replace("Host", "") + targetArch = dirTokens[-1] + result.append(ClInfo(msvcInstall, dirpath, hostArch, targetArch)) + return result + + +def findClExesList() -> typing.List[ClInfo]: + result = [] + msvcInstallOld = implFindMsvcUpTo2015() + for msvcInstall in msvcInstallOld: + result = result + implfindClExesForOldMsvc(msvcInstall) + + msvcInstallNew = implFindMsvc2017() + for msvcInstall in msvcInstallNew: + result = result + implfindClExesForMsvc2017(msvcInstall) + + return result + + +def printClList(clInfoList: typing.List[ClInfo]) -> str: + def clInfoToData(clInfo: ClInfo): + return [clInfo.msvcInstall.version, clInfo.targetArch, + clInfo.hostArch, env_utils.shortDirectoryName(clInfo.installDir)] + headers = ["#", "version", "targetArch", "hostArch", "folder (shortened)"] + data = [clInfoToData(clInfo) for clInfo in clInfoList] + rowFormat = "{:>4}{:>18}{:>11}{:>11}{:>80}" + + print(rowFormat.format(*headers)) + id = 1 + for version in data: + print(rowFormat.format(id, *version)) + id = id + 1 diff --git a/install_for_msbuild/vswhere.exe b/install_for_msbuild/vswhere.exe new file mode 100644 index 0000000000000000000000000000000000000000..ecfb3bfb2f5f6cea19c28d56f67c22c94073031f GIT binary patch literal 428224 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%0A8;*;ED;41DS9P#i}u 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 z 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 OUkprGkLkqOOD$IeUZE#w&Gfi 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 literal 0 HcmV?d00001 From 377c2c8f62ce1eddba4f6dcd5c6569989cdb0c31 Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Mon, 19 Nov 2018 12:20:53 +0100 Subject: [PATCH 3/6] install_clcache_msbuild.py : add enable option --- install_for_msbuild/Readme.md | 2 +- .../install_clcache_msbuild.py | 26 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/install_for_msbuild/Readme.md b/install_for_msbuild/Readme.md index a8cd007a..fd104680 100644 --- a/install_for_msbuild/Readme.md +++ b/install_for_msbuild/Readme.md @@ -35,7 +35,7 @@ between different MSVC installations, clcache will be activated for all instance usage: install_clcache_msbuild.py [-h] [--cachedir CACHEDIR] [--cache_size CACHE_SIZE] [--clcache_timeout CLCACHE_TIMEOUT] - {status,install,disable,enable_logs,disable_logs,show_cl_list,select_cl} + {status,install,enable,disable,enable_logs,disable_logs,show_cl_list,select_cl} ```` Sample usage session: diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py index 3b6e1195..9014f7ba 100644 --- a/install_for_msbuild/install_clcache_msbuild.py +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -72,12 +72,6 @@ def showClCacheUsage(): return True -def clCacheDisable(): - if not copyMsvcPrefOriginal(): - return False - return True - - def showStatus(): if env_utils.hasProgramInPath("clcache"): print("clcache is in your PATH") @@ -167,9 +161,14 @@ def fullClcacheSetup(): def main(): epilog = r"""Actions summary: status : Show the install status and tells if clcache is enabled - install: : Install and enable clcache for msbuild integration" + install: : Install and enable clcache for msbuild integration (will let you choose between the available cl.exe) + enable : : Enable clcache for msbuild: + Modifies the user msbuild preference files + inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 disable: : Disable clcache + Modifies the user msbuild preference files + inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 enable_logs : Activate clcache logs during builds disable_logs : Disable clcache logs during builds show_cl_list : List available cl.exe compilers @@ -182,7 +181,7 @@ def main(): * Check that the pip installed scripts are in the PATH (PYTHONHOME\Scripts) * Call `pip install .` from the repo and check that clcache is then in the PATH. `clcache` will subsequently be used from the PYTHONHOME\\Scripts directory. -* Modify the user msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` +* Modify the user msbuild preference files inside `APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0` so that clcache becomes the default compiler. (These prefs are shared between MSVC 2010 to 2017). * Find all cl.exes version on your computer (for MSVC 2010 to MSVC 2017), and allows you to select the correct one, by showing a detailed list of their version and target architecture. @@ -198,7 +197,9 @@ def main(): since the msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` are shared between different MSVC installations, clcache will be activated for all instances of MSVC. - """.replace("MSBUILD_USER_SETTINGS_DIR", MSBUILD_USER_SETTINGS_DIR) + """ + epilog = epilog.replace("MSBUILD_USER_SETTINGS_DIR", MSBUILD_USER_SETTINGS_DIR) + epilog = epilog.replace("APPDATAPATHLOCAL", env_utils.appDataPathLocal()) helpTimeout = """clcache object cache timeout in seconds (increase if you have failures during your build) """ @@ -207,7 +208,7 @@ def main(): epilog=epilog, formatter_class=argparse.RawDescriptionHelpFormatter ) - choices = ["status", "install", "disable", "enable_logs", "disable_logs", "show_cl_list", "select_cl"] + choices = ["status", "install", "enable", "disable", "enable_logs", "disable_logs", "show_cl_list", "select_cl"] parser.add_argument("action", choices=choices, help="action") parser.add_argument("--cachedir", help="clcache directory") parser.add_argument("--cache_size", help="clcache size in Go", type=int, default=0) @@ -227,8 +228,11 @@ def main(): return False if not fullClcacheSetup(): return False + elif args.action == "enable": + if not copyMsvcPrefClcache(): + return False elif args.action == "disable": - if not clCacheDisable(): + if not copyMsvcPrefOriginal(): return False elif args.action == "enable_logs": if not env_utils.setAndStoreEnvVariable("CLCACHE_LOG", "1"): From 9001bb08df489b3c67f278e97c73e3a6e852449e Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Mon, 19 Nov 2018 15:23:26 +0100 Subject: [PATCH 4/6] install_clcache_msbuild.py : add enable_server / disable_server options This add two requirements: winshell and pywin32 --- install_for_msbuild/env_utils.py | 25 +++++++ install_for_msbuild/env_utils_tests.py | 17 +++++ .../install_clcache_msbuild.py | 74 +++++++++++++++---- install_for_msbuild/requirements.txt | 2 + 4 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 install_for_msbuild/requirements.txt diff --git a/install_for_msbuild/env_utils.py b/install_for_msbuild/env_utils.py index 0e033ae7..30f494fc 100644 --- a/install_for_msbuild/env_utils.py +++ b/install_for_msbuild/env_utils.py @@ -5,6 +5,31 @@ import sys import subprocess import platform +# import winshell +from win32com.client import Dispatch + +def createShortcut(src_file, dst_shortcut_path): + path = os.path.join(dst_shortcut_path) + wDir = os.path.dirname(src_file) + icon = src_file + shell = Dispatch('WScript.Shell') + shortcut = shell.CreateShortCut(path) + shortcut.Targetpath = src_file + shortcut.WorkingDirectory = wDir + shortcut.IconLocation = icon + shortcut.save() + print("Created shortcut : {} points to {}".format(dst_shortcut_path, src_file)) + + +def removeFile(filename): + os.remove(filename) + print("Removed file " + filename) + + +def runProcessDetached(command): + pid = subprocess.Popen(command).pid + print("Launched detached process with pid={} for command {}".format(pid, command)) + return pid def shortDirectoryName(folder): diff --git a/install_for_msbuild/env_utils_tests.py b/install_for_msbuild/env_utils_tests.py index 798cdb53..4ad56e8b 100644 --- a/install_for_msbuild/env_utils_tests.py +++ b/install_for_msbuild/env_utils_tests.py @@ -1,5 +1,8 @@ #!/usr/bin/env python +import os.path +import time import unittest +import winshell import env_utils import locate_cl_exe @@ -11,6 +14,20 @@ def testEnvVars(self): env_utils.removeEnvVariable("DUMMYVAR") result = env_utils.readEnvVariableFromRegistry("DUMMYVAR") self.assertTrue(result is None) + def testShortcut(self): + pythonProg = env_utils.whereProgram("python") + dstFolder = winshell.startup() + dst = dstFolder + "\\python.lnk" + env_utils.createShortcut(pythonProg, dst) + self.assertTrue(os.path.exists(dst)) + os.remove(dst) + self.assertTrue(not os.path.exists(dst)) + # def testRunProcessDetached(self): + # prog = env_utils.whereProgram("Calc.exe") + # pid = env_utils.runProcessDetached(prog) + # time.sleep(1) + # env_utils.callAndShowCmd("taskkill /PID {}".format(pid)) + class LocateClTests(unittest.TestCase): diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py index 9014f7ba..f7a9fc39 100644 --- a/install_for_msbuild/install_clcache_msbuild.py +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -3,6 +3,7 @@ import argparse import env_utils import locate_cl_exe +import winshell THIS_DIR = env_utils.fileDirNameAbsolute(__file__) @@ -158,21 +159,56 @@ def fullClcacheSetup(): return True +def enableServer(): + """ + will enable the clache-server, start it, + and make sure that it starts when your computer starts. + """ + env_utils.setAndStoreEnvVariable("CLCACHE_SERVER", "1") + + env_utils.runProcessDetached(env_utils.pipScriptsDir() + "\\clcache-server.exe") + + dstFolder = winshell.startup() + dst = dstFolder + "\\clache-server.lnk" + src = env_utils.pipScriptsDir() + "\\clcache-server.exe" + env_utils.createShortcut(src, dst) + return True + + +def disableServer(): + """ + will disable the clcache-server and remove it from the startup programs. + Note : this does not kil the clcache-server.exe process, + however subsequent builds will not use it. + """ + env_utils.removeEnvVariable("CLCACHE_SERVER") + + dstFolder = winshell.startup() + dst = dstFolder + "\\clache-server.lnk" + env_utils.removeFile(dst) + return True + + def main(): epilog = r"""Actions summary: - status : Show the install status and tells if clcache is enabled - install: : Install and enable clcache for msbuild integration - (will let you choose between the available cl.exe) - enable : : Enable clcache for msbuild: - Modifies the user msbuild preference files - inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 - disable: : Disable clcache - Modifies the user msbuild preference files - inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 - enable_logs : Activate clcache logs during builds - disable_logs : Disable clcache logs during builds - show_cl_list : List available cl.exe compilers - select_cl : Choose which cl.exe to activate + status : Show the install status and tells if clcache is enabled + install: : Install and enable clcache for msbuild integration + (will let you choose between the available cl.exe) + enable : : Enable clcache for msbuild: + Modifies the user msbuild preference files + inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 + disable: : Disable clcache + Modifies the user msbuild preference files + inside APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0 + enable_server : will enable the clache-server, start it, + and make sure that it starts when your computer starts. + disable_server : will disable the clcache-server and remove it from the startup programs. + Note : this does not kil the clcache-server.exe process, + however subsequent builds will not use it. + enable_logs : Activate clcache logs during builds + disable_logs : Disable clcache logs during builds + show_cl_list : List available cl.exe compilers + select_cl : Choose which cl.exe to activate What this script does: ********************** @@ -208,7 +244,11 @@ def main(): epilog=epilog, formatter_class=argparse.RawDescriptionHelpFormatter ) - choices = ["status", "install", "enable", "disable", "enable_logs", "disable_logs", "show_cl_list", "select_cl"] + choices = [ "status", "install", + "enable", "disable", + 'enable_server', "disable_server" + "enable_logs", "disable_logs", + "show_cl_list", "select_cl"] parser.add_argument("action", choices=choices, help="action") parser.add_argument("--cachedir", help="clcache directory") parser.add_argument("--cache_size", help="clcache size in Go", type=int, default=0) @@ -234,6 +274,12 @@ def main(): elif args.action == "disable": if not copyMsvcPrefOriginal(): return False + elif args.action == "enable_server": + if not enableServer(): + return False + elif args.action == "disable_server": + if not disableServer(): + return False elif args.action == "enable_logs": if not env_utils.setAndStoreEnvVariable("CLCACHE_LOG", "1"): return False diff --git a/install_for_msbuild/requirements.txt b/install_for_msbuild/requirements.txt new file mode 100644 index 00000000..66238fe7 --- /dev/null +++ b/install_for_msbuild/requirements.txt @@ -0,0 +1,2 @@ +winshell +pywin32 From 5d48d44ab97343bbc918661d4a98ca08a51e52c0 Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Mon, 19 Nov 2018 17:02:29 +0100 Subject: [PATCH 5/6] install_clcache_msbuild.py : more robust cl.exe detection (+ some linting) --- install_for_msbuild/install_clcache_msbuild.py | 18 +++++++++--------- install_for_msbuild/locate_cl_exe.py | 18 ++++++++++-------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py index f7a9fc39..96d13e70 100644 --- a/install_for_msbuild/install_clcache_msbuild.py +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -1,9 +1,9 @@ import sys import argparse +import winshell import env_utils import locate_cl_exe -import winshell THIS_DIR = env_utils.fileDirNameAbsolute(__file__) @@ -95,7 +95,7 @@ def showStatus(): print("clcache is *ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) else: print("clcache is *NOT ENABLED* in " + MSBUILD_USER_SETTINGS_DIR) - + cl = env_utils.readEnvVariableFromRegistry("CLCACHE_CL") print("CLCACHE_CL (real compiler) is :" + cl) print("call clcache -s for statistics") @@ -150,10 +150,10 @@ def selectCl(): def fullClcacheSetup(): if not installClcache(): return False - if not copyMsvcPrefClcache(): - return False if not selectCl(): return False + if not copyMsvcPrefClcache(): + return False if not showClCacheUsage(): return False return True @@ -244,11 +244,11 @@ def main(): epilog=epilog, formatter_class=argparse.RawDescriptionHelpFormatter ) - choices = [ "status", "install", - "enable", "disable", - 'enable_server', "disable_server" - "enable_logs", "disable_logs", - "show_cl_list", "select_cl"] + choices = ["status", "install", + "enable", "disable", + "enable_server", "disable_server" + "enable_logs", "disable_logs", + "show_cl_list", "select_cl"] parser.add_argument("action", choices=choices, help="action") parser.add_argument("--cachedir", help="clcache directory") parser.add_argument("--cache_size", help="clcache size in Go", type=int, default=0) diff --git a/install_for_msbuild/locate_cl_exe.py b/install_for_msbuild/locate_cl_exe.py index 5c445451..b01c1eef 100644 --- a/install_for_msbuild/locate_cl_exe.py +++ b/install_for_msbuild/locate_cl_exe.py @@ -45,7 +45,7 @@ def implFindMsvcUpTo2015() -> typing.List[MsvcInstall]: valueName = "InstallDir" key = keyTemplate.replace("__VERSION__", version) installDir = env_utils.readRegistryValueLocalMachine(key, valueName) - if installDir is not None: + if installDir is not None and os.path.isdir(installDir): result.append(MsvcInstall(version, installDir)) return result @@ -67,10 +67,12 @@ def findMsvc() -> typing.List[MsvcInstall]: def implfindClExesForOldMsvc(msvcInstall: MsvcInstall) -> typing.List[ClInfo]: result = [] mainClPath = env_utils.dirNameAbsolute(msvcInstall.installDir + "\\..\\..\\vc\\bin") + if not os.path.isdir(mainClPath): + return [] subDirs = env_utils.listSubdirs(mainClPath, appendFolder=False) + ["."] def hasClExe(subdir): return os.path.isfile(mainClPath + "\\" + subdir + "\\cl.exe") - dirsWithCl = [ dir for dir in subDirs if hasClExe(dir)] + dirsWithCl = [dir for dir in subDirs if hasClExe(dir)] # dirWithCl is something like # ['amd64', 'amd64_arm', 'amd64_x86', 'x86_amd64', 'x86_arm', '.'] # in this ist : "." = x86_x86 and amd64 = amd64_amd64 @@ -86,14 +88,14 @@ def hasClExe(subdir): tokens = dirWithCl.split("_") hostArch = tokens[0] targetArch = tokens[1] - result.append( ClInfo(msvcInstall, fullDir, hostArch, targetArch ) ) + result.append(ClInfo(msvcInstall, fullDir, hostArch, targetArch)) return result def implfindClExesForMsvc2017(msvcInstall: MsvcInstall) -> typing.List[ClInfo]: result = [] topDir = msvcInstall.installDir + "\\VC\\Tools\\MSVC" - for dirpath, dirnames, filenames in os.walk(topDir): + for dirpath, _, filenames in os.walk(topDir): for file in filenames: if file == "cl.exe": # dirpath looks like @@ -120,14 +122,14 @@ def findClExesList() -> typing.List[ClInfo]: def printClList(clInfoList: typing.List[ClInfo]) -> str: def clInfoToData(clInfo: ClInfo): - return [clInfo.msvcInstall.version, clInfo.targetArch, + return [clInfo.msvcInstall.version, clInfo.targetArch, clInfo.hostArch, env_utils.shortDirectoryName(clInfo.installDir)] headers = ["#", "version", "targetArch", "hostArch", "folder (shortened)"] data = [clInfoToData(clInfo) for clInfo in clInfoList] rowFormat = "{:>4}{:>18}{:>11}{:>11}{:>80}" print(rowFormat.format(*headers)) - id = 1 + rowId = 1 for version in data: - print(rowFormat.format(id, *version)) - id = id + 1 + print(rowFormat.format(rowId, *version)) + rowId = rowId + 1 From 0ba3f1699db42a14dff2b765676bece4db07118e Mon Sep 17 00:00:00 2001 From: Pascal Thomet Date: Mon, 19 Nov 2018 18:45:01 +0100 Subject: [PATCH 6/6] install_clcache_msbuild.py : correct option disable_server --- install_for_msbuild/env_utils.py | 7 +++++-- install_for_msbuild/install_clcache_msbuild.py | 12 +++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/install_for_msbuild/env_utils.py b/install_for_msbuild/env_utils.py index 30f494fc..7a10f9f3 100644 --- a/install_for_msbuild/env_utils.py +++ b/install_for_msbuild/env_utils.py @@ -22,8 +22,11 @@ def createShortcut(src_file, dst_shortcut_path): def removeFile(filename): - os.remove(filename) - print("Removed file " + filename) + if os.path.exists(filename): + os.remove(filename) + print("Removed file " + filename) + else: + print("Cannot remove " + filename + " (does not exist)") def runProcessDetached(command): diff --git a/install_for_msbuild/install_clcache_msbuild.py b/install_for_msbuild/install_clcache_msbuild.py index 96d13e70..7a836088 100644 --- a/install_for_msbuild/install_clcache_msbuild.py +++ b/install_for_msbuild/install_clcache_msbuild.py @@ -84,6 +84,11 @@ def showStatus(): else: print("logs are disabled") + if env_utils.readEnvVariableFromRegistry("CLCACHE_SERVER") is not None: + print("clcache-server is enabled") + else: + print("clcache-server is disabled") + prefFile = MSBUILD_USER_SETTINGS_DIR + "\\Microsoft.Cpp.Win32.user.props" isEnabled = False with open(prefFile, "r") as f: @@ -181,7 +186,8 @@ def disableServer(): Note : this does not kil the clcache-server.exe process, however subsequent builds will not use it. """ - env_utils.removeEnvVariable("CLCACHE_SERVER") + if env_utils.readEnvVariableFromRegistry("CLCACHE_SERVER") is not None: + env_utils.removeEnvVariable("CLCACHE_SERVER") dstFolder = winshell.startup() dst = dstFolder + "\\clache-server.lnk" @@ -230,7 +236,7 @@ def main(): Caveat ****** -since the msbuild preference files inside `%AppData%\..\Local\Microsoft\MSBuild\v4.0` are shared +since the msbuild preference files inside `APPDATAPATHLOCAL\Microsoft\MSBuild\v4.0` are shared between different MSVC installations, clcache will be activated for all instances of MSVC. """ @@ -246,7 +252,7 @@ def main(): ) choices = ["status", "install", "enable", "disable", - "enable_server", "disable_server" + "enable_server", "disable_server", "enable_logs", "disable_logs", "show_cl_list", "select_cl"] parser.add_argument("action", choices=choices, help="action")