Skip to content

The Hook for Visual Studio builds

A critical component of Turbo Build Accelerator is how it redirects the build process to utilise Turbo.

Turbo Build Accelerator creates/updates Visual Studio Project User .vcxproj.user files. This alteration causes Visual Studio MSbuild to launch the Turbo Hook executable bin\turbo-cl.exe instead of the Microsoft Compiler cl.exe.

The Hook process will then launch cl.exe to pre-compile your c/c++ source files. It then communicates to the local Agent, passing the pre-compiled source. In turn the local Agent will then launch cl.exe to compile your c/c++ source.

Logging

The Visual Studio build output window will display the output from the Hook.

This will include log messages from :

  • msbuild.exe
  • The Hook turbo-cl.exe
  • and the Microsoft c++ compiler cl.exe

For comparison, below, we have various log outputs for a simple 'HelloWorld' Visual Studio Solution, at progressively more verbose logging levels.

At the warning log level :

Rebuild started...
1>------ Rebuild All started: Project: HelloWorld, Configuration: Debug Win32 ------
1>Build started 05/11/2025 17:46:39.
1>Target _PrepareForClean:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>Target InitializeBuildStatus:
1>  Creating "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Target ClCompile:
1>  --------------------  Build is powered by Turbo  --------------------
1>  HelloWorld.cpp
1>  HelloWorld.cpp
1>Target Link:
1>  HelloWorld.vcxproj -> C:\dev\turbo\test\examples\HelloWorld-simple-subdir\bin\HelloWorld.exe
1>Target FinalizeBuildStatus:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild".
1>  Touching "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>
1>Build succeeded.
1>    0 Warning(s)
1>    0 Error(s)
1>
1>Time Elapsed 00:00:00.88
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

An example log output for a simple 'HelloWorld' Visual Studio Solution in information log level :

Rebuild started...
1>------ Rebuild All started: Project: HelloWorld, Configuration: Debug Win32 ------
1>Build started 05/11/2025 17:45:54.
1>Target _PrepareForClean:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>Target InitializeBuildStatus:
1>  Creating "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Target ClCompile:
1>  --------------------  Build is powered by Turbo  --------------------
1>  TURBO : 20251105 17:45:55.091 I [0] ---------------------------------------------------
1>  TURBO : 20251105 17:45:55.092 I [0] Log level set to 6
1>  TURBO : 20251105 17:45:55.092 I [0] Logging to 'C:\ProgramData\Turbo\logs\turbo-cl.43784.log'
1>  TURBO : 20251105 17:45:55.092 I [0] Loading configuration from 'C:\ProgramData\Turbo\config\turbo-cl.xml'
1>  TURBO : 20251105 17:45:55.104 I [0] No config found for 'agent.ip_address' - defaulting to network interface 'Ethernet' and address '192.168.2.73'
1>  TURBO : 20251105 17:45:55.119 I [0] msbuild cl.exe invoked from exe '\Device\HarddiskVolume2\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Tracker.exe'
1>  TURBO : 20251105 17:45:55.120 I [0] Checking for installed build environments...
1>  TURBO : 20251105 17:45:55.176 I [0] Checking for installed build environments. Took 0.056 secs
1>  TURBO : 20251105 17:45:55.179 I [0] Build Env 'VisualStudio.14.0' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:45:55.179 I [0] Build Env 'VisualStudio.16.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.16.27023, 14.29.30133', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:45:55.179 I [0] Build Env 'VisualStudio.17.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.42.34433', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:45:55.179 I [0] Build Env 'VisualStudio.18.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.44.35207, 14.50.35710', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:45:55.179 I [0] Connecting to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:45:55.184 I [0] Succesfully connected to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:45:55.192 I [0] Caching within the cluster is enabled
1>  TURBO : 20251105 17:45:55.192 I [0] License : ExpiryDate '2025-12-18' (42 days left), MaxNumberOfSlots '64'
1>  TURBO : 20251105 17:45:55.198 I [9] Connecting to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:45:55.200 I [9] Succesfully connected to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:45:55.202 I [9] msbuild cl.exe [pre-processing] building 'src\HelloWorld.cpp' ('16.0', '14.29.30133', '10.0.26100.0')
1>  HelloWorld.cpp
1>  TURBO : 20251105 17:45:55.397 I [9] cl.exe [pre-processing] returned with '0' 'Success' for 'HelloWorld.cpp'. Took 0.192 secs
1>  TURBO : 20251105 17:45:55.437 I [1] HelloWorld.cpp
1>  HelloWorld.cpp
1>  TURBO : 20251105 17:45:55.443 I [0] ============   Turbo Build Summary   ============
1>  TURBO : 20251105 17:45:55.443 I [0] JobItem 'src\HelloWorld.cpp' : Duration 0.199 secs (pre-proc 0.192, compile 0.007), Elapsed 0.228 secs (pre-proc 0.192, compile 0.035). CacheHit=1. BuiltBy 'DELLOPTIPLEX'. OK
1>  TURBO : 20251105 17:45:55.443 I [0] Totals : compiles 1, cache hits 1, Cache Hit ratio 100.0%
1>  TURBO : 20251105 17:45:55.443 I [0] Totals : compile time 0.01 secs, pre-proc time 0.19 secs, build retries 0
1>  TURBO : 20251105 17:45:55.449 I [0] Finished build. Took 0.358 secs
1>Target Link:
1>  HelloWorld.vcxproj -> C:\dev\turbo\test\examples\HelloWorld-simple-subdir\bin\HelloWorld.exe
1>Target FinalizeBuildStatus:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild".
1>  Touching "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>
1>Build succeeded.
1>    0 Warning(s)
1>    0 Error(s)
1>
1>Time Elapsed 00:00:00.71
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

An example log output for a simple 'HelloWorld' Visual Studio Solution in debug log level :

Rebuild started...
1>------ Rebuild All started: Project: HelloWorld, Configuration: Debug Win32 ------
1>Build started 05/11/2025 17:43:48.
1>Target _PrepareForClean:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>Target InitializeBuildStatus:
1>  Creating "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
1>Target ClCompile:
1>  --------------------  Build is powered by Turbo  --------------------
1>  TURBO : 20251105 17:43:48.354 I [0] ---------------------------------------------------
1>  TURBO : 20251105 17:43:48.355 I [0] Log level set to 7
1>  TURBO : 20251105 17:43:48.355 I [0] Logging to 'C:\ProgramData\Turbo\logs\turbo-cl.63116.log'
1>  TURBO : 20251105 17:43:48.355 I [0] Loading configuration from 'C:\ProgramData\Turbo\config\turbo-cl.xml'
1>  TURBO : 20251105 17:43:48.355 D [0] Raising process priority to High [recommended].
1>  TURBO : 20251105 17:43:48.366 I [0] No config found for 'agent.ip_address' - defaulting to network interface 'Ethernet' and address '192.168.2.73'
1>  TURBO : 20251105 17:43:48.366 D [0] Current Working Path 'C:\dev\turbo\test\examples\HelloWorld-simple-subdir'
1>  TURBO : 20251105 17:43:48.366 D [0] Process commandPath 'c:\Program Files (x86)\Turbo\bin\turbo-cl_x86.exe'
1>  TURBO : 20251105 17:43:48.369 D [0] Turbo hook for MS VC++ starting v2.0.2.1 (built on Oct 26 2025 11:35:39) on host : DELLOPTIPLEX (Windows NT 10.0 (Build 19045))
1>  TURBO : 20251105 17:43:48.371 D [0] Initialising Cache DigestEngine took 0.002 secs
1>  TURBO : 20251105 17:43:48.371 D [0] Arg 1='@C:\Users\david\AppData\Local\Temp\tmp993ac5b6e40b4ceb83dd5a8a0b022c34.rsp'
1>  TURBO : 20251105 17:43:48.373 D [0] msbuild cl.exe response file saved here 'C:\ProgramData\Turbo\logs\turbo-cl.63116.rsp'
1>  TURBO : 20251105 17:43:48.398 I [0] msbuild cl.exe invoked from exe '\Device\HarddiskVolume2\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Tracker.exe'
1>  TURBO : 20251105 17:43:48.399 I [0] Checking for installed build environments...
1>  TURBO : 20251105 17:43:48.454 I [0] Checking for installed build environments. Took 0.056 secs
1>  TURBO : 20251105 17:43:48.457 I [0] Build Env 'VisualStudio.14.0' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:43:48.457 I [0] Build Env 'VisualStudio.16.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.16.27023, 14.29.30133', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:43:48.457 I [0] Build Env 'VisualStudio.17.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.42.34433', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:43:48.457 I [0] Build Env 'VisualStudio.18.Release' has dimensions : archs 'x64, x86', VCToolsVersions '14.0.24247.2, 14.44.35207, 14.50.35710', WindowsSDKversions '10.0.19041.0, 10.0.22621.0, 10.0.26100.0'
1>  TURBO : 20251105 17:43:48.457 D [0] Process commandName 'turbo-cl_x86', Target Architecture 'x86', vcToolsVersion='14.29.30133', windowsSDKVersion='10.0.26100.0'
1>  TURBO : 20251105 17:43:48.457 I [0] Connecting to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:43:48.459 I [0] Succesfully connected to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:43:48.462 D [0] Getting Build Environment from Agent took 0.003 secs
1>  TURBO : 20251105 17:43:48.463 D [0] Build output MS Tracker.EXE TLOG Read file was missing. Created 'C:\dev\turbo\test\examples\HelloWorld-simple-subdir\Win32\obj\Debug\HelloWorld.tlog\turbo-cl_x86.read.1.tlog'
1>  TURBO : 20251105 17:43:48.464 D [0] Build output MS Tracker.EXE TLOG Write file was missing. Created 'C:\dev\turbo\test\examples\HelloWorld-simple-subdir\Win32\obj\Debug\HelloWorld.tlog\turbo-cl_x86.write.1.tlog'
1>  TURBO : 20251105 17:43:48.465 D [0] Build output MS Tracker.EXE TLOG Read file was missing. Created 'C:\dev\turbo\test\examples\HelloWorld-simple-subdir\Win32\obj\Debug\HelloWorld.tlog\turbo-cl_x86-cl.read.1.tlog'
1>  TURBO : 20251105 17:43:48.466 D [0] Build output MS Tracker.EXE TLOG Write file was missing. Created 'C:\dev\turbo\test\examples\HelloWorld-simple-subdir\Win32\obj\Debug\HelloWorld.tlog\turbo-cl_x86-cl.write.1.tlog'
1>  TURBO : 20251105 17:43:48.467 I [0] Caching within the cluster is enabled
1>  TURBO : 20251105 17:43:48.467 I [0] License : ExpiryDate '2025-12-18' (42 days left), MaxNumberOfSlots '64'
1>  TURBO : 20251105 17:43:48.467 D [0] Getting Cluster Info from Agent took 0.001 secs
1>  TURBO : 20251105 17:43:48.467 D [0] Cluster has 8 slots
1>  TURBO : 20251105 17:43:48.467 D [0] Local Machine has 8 Turbo CPU Slots
1>  TURBO : 20251105 17:43:48.467 D [0] Local Machine has 8 logical cores
1>  TURBO : 20251105 17:43:48.467 D [0] Job Submission ThreadPool has min capacity 8 and max capacity 24
1>  TURBO : 20251105 17:43:48.470 D [0] Pre-Processing ThreadPool has min capacity 8 and max capacity 24
1>  TURBO : 20251105 17:43:48.474 D [0] Starting thread in PreProcessingThreadPool for 'src\HelloWorld.cpp'. PreProcessingThreadPool now has 1 threads
1>  TURBO : 20251105 17:43:48.474 I [9] Connecting to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:43:48.474 D [0] Starting thread for Job for file 'src\HelloWorld.cpp'. Job Submission ThreadPool now has 1 threads running.
1>  TURBO : 20251105 17:43:48.476 I [9] Succesfully connected to Agent at '192.168.2.73:5556'
1>  TURBO : 20251105 17:43:48.479 D [9] Submitting BuildJob 'src\HelloWorld.cpp' to Agent took 0.003 secs
1>  TURBO : 20251105 17:43:48.479 I [9] msbuild cl.exe [pre-processing] building 'src\HelloWorld.cpp' ('16.0', '14.29.30133', '10.0.26100.0')
1>  TURBO : 20251105 17:43:48.479 D [9] msbuild cl.exe [pre-processing] arch 'x86', args '/c /ZI /JMC /nologo /W3 /WX- /diagnostics:column /sdl /Od /Oy- /D WIN32 /D _DEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /RTC1 /MDd /GS /fp:precise /permissive- /Zc:wchar_t /Zc:forScope /Zc:inline /std:c++14 /Fo"Win32\obj\Debug\\" /Fd"Win32\obj\Debug\vc142.pdb" /external:W3 /Gd /TP /analyze- /FC /errorReport:prompt /P /Fi"C:\ProgramData\Turbo\work-temp\cb6a8bfb-6265-439c-8c4c-d0afb82f0847\src\HelloWorld.cpp.i" "C:\dev\turbo\test\examples\HelloWorld-simple-subdir\src\HelloWorld.cpp"'
1>  HelloWorld.cpp
1>  TURBO : 20251105 17:43:48.913 I [9] cl.exe [pre-processing] returned with '0' 'Success' for 'HelloWorld.cpp'. Took 0.432 secs
1>  TURBO : 20251105 17:43:48.913 D [9] cl.exe [pre-processing] output for 'src\HelloWorld.cpp' follows ...
1>  TURBO : 20251105 17:43:48.918 D [9] Send of BuildJobProgress for 'HelloWorld.cpp' to Agent took 0.000 secs
1>  TURBO : 20251105 17:43:48.919 D [1] Waiting on [compile] Build Job Result for 'src\HelloWorld.cpp'
1>  TURBO : 20251105 17:43:49.577 D [1] Build Job Result [compile] received for 'HelloWorld.cpp'. Status '0'. CacheHit=0. Built by 'DELLOPTIPLEX'. Took 0.619 secs (elapsed 0.659 secs)
1>  TURBO : 20251105 17:43:49.577 I [1] HelloWorld.cpp
1>  HelloWorld.cpp
1>  TURBO : 20251105 17:43:49.583 I [0] ============   Turbo Build Summary   ============
1>  TURBO : 20251105 17:43:49.583 I [0] JobItem 'src\HelloWorld.cpp' : Duration 1.051 secs (pre-proc 0.432, compile 0.619), Elapsed 1.091 secs (pre-proc 0.432, compile 0.659). CacheHit=0. BuiltBy 'DELLOPTIPLEX'. OK
1>  TURBO : 20251105 17:43:49.583 I [0] Totals : compiles 1, cache hits 0, Cache Hit ratio 0.0%
1>  TURBO : 20251105 17:43:49.583 I [0] Totals : compile time 0.62 secs, pre-proc time 0.43 secs, build retries 0
1>  TURBO : 20251105 17:43:49.583 D [0] Finishing main job submission loop. Cleaning up...
1>  TURBO : 20251105 17:43:49.589 D [0] Finished main job submission loop
1>  TURBO : 20251105 17:43:49.589 I [0] Finished build. Took 1.236 secs
1>  TURBO : 20251105 17:43:49.589 D [0] Cleaning up ...
1>  TURBO : 20251105 17:43:49.589 D [0] Shutting down ...
1>Target Link:
1>  HelloWorld.vcxproj -> C:\dev\turbo\test\examples\HelloWorld-simple-subdir\bin\HelloWorld.exe
1>Target FinalizeBuildStatus:
1>  Deleting file "Win32\obj\Debug\HelloWorld.tlog\unsuccessfulbuild".
1>  Touching "Win32\obj\Debug\HelloWorld.tlog\HelloWorld.lastbuildstate".
1>
1>Build succeeded.
1>    0 Warning(s)
1>    0 Error(s)
1>
1>Time Elapsed 00:00:01.63
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

Offline Fallback Mode

On startup of the Hook it will attempt to connect to the local Agent. If this fails then the Hook will revert to an Offline Fallback mode.

In this mode the Hook will process its Build Jobs itself. It will skip the preparation phase of the Build Job and go straight for the compilation.

This mode is intended to provide a seamless fallback to the Developers experience of the build. If communication to the Agent is lost, the build should continue without failure.

Configuration

See the config\turbo-cl.xml file.

For more details on the configuration files see Configuration for more details.

Also see Turbo Monitor Settings for possible configuration via the GUI.