Changelog

v0.98 (29-Apr-2019)
Notes
  • DB Version Changed : clean build will occur
  • Distributed compilation protocol version changed : please update workers
New
  • .UseLightCache_Experimental mode on Compiler() can be used for massively accelerated caching
  • -compdb option can create a JSON Compilation Database (Thanks to dummyunit)
Fixes
  • Distributed Compilation:
    • Fix race condition resulting in crash when a local race is won (Thanks to dummyunit, Sam Hocevar & Lambert Clara)
    • Prevent rare crash during startup when using distributed compilation
  • BFF Parsing:
    • Variable self-assignment is handled correctly during bff parsing (Thanks to dummyunit)
    • Fix inconsistent parsing of bff function headers without args (Thanks to dummyunit)
  • [OSX][Linux] FASTBUILD_CACHE_PATH env var is respected on OSX and Linux (Thanks to Damian Szuberski)
  • GCC is corrently detected for when version specific exe is referenced (Thanks to Damian Szuberski)
  • Strip -isysroot when compiling preprocessed output; should only be used during preprocessing (Thanks to Nick Edwards)
  • Paths terminated with .. are correctly canonicalized (Thanks to Yaroslav Kovtun)
  • DLL() detects dll when a library is configured via -Wl,--oformat=prx (Thanks to jfr2)
  • Precompiled headers are migrated when using AllowDBMigration_Experimental (Thanks to Yaroslav Kovtun)
  • MSVC precompiled header users are retrievable from cache after DB migration using AllowDBMigration_Experimental
  • [Windows] UNC paths are respected in some places they were not (Thanks to Brian Burgin)
  • MSVC .pchast is correctly cached when folder name contains a period (Thanks to Brian Burgin)
  • MSVC .pchast is correctly cached when filename contains a period
Improvements
  • Distributed Compilation:
    • FBuildWorker responds to quite notifications (Thanks to Brian Burgin)
    • Compiler files sent for distributed compilation are compressed (Thanks to Brian Burgin)
    • -forceremote no longer modifies caching options
    • Remote MSVC out of heap space is automatically retried
    • Remote MSVC failing to write compiler tmp file is automatically retried
    • Remove worker timeout mechanism which could cause unnecessary disconnections under heavy network load
    • Workers will reject connections from mismatched platforms
  • BFF Parsing:
    • Non-bff parsing error formats standardized (Thanks to Brian Burgin)
  • Project Generation:
    • XCode schemes appear alphabetically
    • XCode project folders appear alphabetically
    • XCode "doc" schemes are hidden by default
  • [Linux][OSX] Significantly improve compile times by fixing process output capture (Thanks to Yaroslav Kovtun)
  • Improve resilience against corrupt files in the network cache
  • Exec() can be made to run every time with new .ExecAlways property
  • Test will print test output if a test times out to assist triage (Thanks to dummyunit)
  • .i extension is used for preprocessed files when using gcc (Thanks to Damian Szuberski)
  • Colored output from Clang and GCC is supported (Thanks to dummyunit)
  • .Environment can be set per Compiler, Library, Executable and DLL (Thanks to Brian Burgin)
  • .CompilerOutputKeepBaseExtension can be set on ObjectList if extension is needed to uniquify (Thanks to Yaroslav Kovtun)
  • The .fdb is uniquified per-platform to allow filesystem shared between operating systems/VMs
  • Improve compression speed slightly (Upgrade to LZ4)
v0.97 (9-Jan-2019)
Notes
  • DB Version Changed : clean build will occur
New
  • [Experimental] .AllowDBMigration_Experimental (Settings) allows retention of build state across BFF changes
  • [OSX][Linux] Settings() .CachePathMountPoint option allows enforcing of cache mount validity
  • _CURRENT_BFF_DIR_ is defined containing path to the bff being parsed
  • Error() function allows user errors to be emitted during BFF parsing (Error 1999)
Fixes
  • Distributed Compilation:
    • Fix occasional build failure with error 0x1 when a distributed race is won
    • [OSX][Linux] Sockets are not inheritable by child processes
    • [OSX] Sockets don't trigger spurious SIG_PIPE errors
    • [OSX] Port reuse updated for OS X behavior change (SO_REUSEADDR vs SO_REUSEPORT)
    • Nagle's algorithm is disabled for return connection from server->client
    • Fix -distverbose stack overflow when remote worker is blacklisted (and possibly in other situations)
    • Fix file handle leak on IO error transferring compiler files (Thanks to dummyunit)
    • Remote system failure info is shown when -distverbose is used
  • BFF Parsing:
    • If() error correctly reports type when lhs is unsupported for operator "in"
    • If() reports an error if extraneous text is found after a valid expression
  • Project Generation:
    • VCXProject files correctly pathed for project in sub-directory of BasePath
    • VCXProject generation correctly handles files and folders with common sub-strings (Thanks to Jeremy Moore)
    • Solution() errors in .Projects or .Dependencies print the correct property name in the error
    • Solution() paths to .vcxproject are relative even when .vcxproject is not in a sub-directory (Thanks to Chris Helvig)
  • Prevent duplicate symbols in libraries when using ar.exe in some situations
  • Emit error when failing to delete .exe/.dll/.pdb/.ilk
  • Folders are created for .asm and .pdb files when paths contain inconsistent slashes
  • Add missing -monitor option to cmd line usage info
  • Add missing -monitor and -progress option documentation
  • [OSX][Linux] .lock files are no longer inherited by child processes, preventing "FASTBuild is already running" messages
  • Fix incremental link when NOREF, NOICF or NOLBR options are used on cmd line (Thanks to Lambert Clara)
  • [Windows] Prevent deadlock if Ctrl+C is used to terminate certain tools like Clang (Thanks to Brian Burgin)
  • Settings() .CachePath takes precedence over environment variable as intended
  • [OSX][Linux] Child processes no longer inherit file handles, avoiding issues like .lock files being held incorrectly
  • Linker removes bad trailing slashes from LIBPATH that would escape quotes
  • -monitor works if build is started before monitor application has ever been run (Thanks to Lambert Clara)
  • [Linux][OSX] -cacheinfo age is correctly calculated (Thanks to Yaroslav Kovtun)
  • Fixed typo in options documentation for -report (Thanks to Brian Burgin)
Improvements
  • Distributed Compilation:
    • Remote failure details are shown when -distverbose is used
    • Brokerage path shown as part of "Workers Found" message (Thanks to Lambert Clara)
  • BFF Parsing:
    • If() supports operator >, <, >= and <=
    • If() supports integers in comparisson syntax
    • Add _FASTBUILD_VERSION_ and _FASTBUILD_VERSION_STRING_ built-in variables
    • If() Documentation lists all currently supported syntax and operators
    • Small speedup to bff parsing when parsing Linker (Executable/DLL) nodes (Thanks to dummyunit)
    • Small optimization to BFF parsing, avoiding memory allocations appending strings to arrays (Thanks to dummyunit)
  • Project Generation:
    • Solution() generates solutions with paths to projects using Windows style slashes on Linux and OSX
    • Solution() "deploy" project scan be set via SolutionDeployProjects
    • Solution() "build" and "deploy" projects can be set per SolutionConfiguration
    • Intellisense AdditionalOptions are auto-populated for /std: option
  • Improve IO performance on local disk and SMB shares
  • Work around Windows file system permission problems when creating response files
  • FASTBuild detects MSVC linker error LNK1136 (pdb corruption) and retries linking
v0.96 (5-Jul-2018)
Notes
  • DB Version Changed : clean build will occur
  • FBuildWorker version has changed - ensure all workers are updated
  • Visual Studio Project generation uses new GUID scheme
  • FBuildWorker no longer shows balloon tip when being minimized
New
  • Add _WORKING_DIR_ built-in variable
  • If() function allows basic branching logic in bff config (Thanks to clevijoki)
  • [Experimental] Add "-nounity" option: build individually all files that would normally be in Unity
Fixes
  • Distributed Compilation:
    • Local fbuild.exe was deleting the worker token on build completion (Thanks to Lambert Clara)
    • Fix crash in distributed compilation caused by race condition (Thanks to dummyunit)
    • Processes terminated on a remote worker don't cause the build to fail with error 0x1
    • Errors from remote workers are emitted to the -monitor log (Thanks to hillin)
    • [Windows] Avoid file creation error 32 when a remote worker wins a race (Thanks to Alexandre Ganea)
    • FBuildWorker retries restarting for 10s when updated, so occasional locks don't preventing re-spawning
    • FBuildWorker tooltip restored (Thanks to Lambert Clara)
  • BFF Parsing:
    • Fix inifinte loop when an unterminated string is not handled correctly (Thanks to dummyunit)
    • Attempting to modify frozen variables in nested ForEach loops reports an error (Thanks to dummyunit)
    • Cyclic dependencies result in new error 1043 during parsing instead of crashing during shutdown
    • Fix crash when struct is replaced by its member in Using() (Thanks to dummyunit)
    • Fix closing brace in string incorrectly terminating scope in some rare cases (Thanks to dummyunit)
  • Project Generation:
    • Visual Studio Project GUID generation allows multiple projects with the same name (Thanks to James Leitch)
    • VSSolution errors relating to missing projects report correct property in errors
    • Avoid generating invalid Visual Studio projects when duplicate files are specified
    • Fix incorrect ToolsVersion (4.0 -> 15.0) in .vcxproj file (Thanks to Layla Mah)
    • VCXProject and XCodeProjects missing targets for some configs if one target was empty
  • Fix MS linker error when command line length is exactly 32767 (Thanks to Lambert Clara)
  • Fix typo in Executable error when ExecExecutable is missing (Thanks to dummyunit)
  • /analyze- is no longer incorrectly detected as enabling static analysis (Thanks to dummyunit)
  • CopyDir SourceExcludePaths paths are correctly applied (Thanks to James Leitch)
  • [OSX] Ctrl+C supported on OSX (build progress not lost when using Ctrl+C)
  • LIB variable from Settings() is used when finding libs (Thanks to Francisco Facioni)
  • [OSX][Linux] Fix thread handle leaks (Thanks to dummyunit)
  • Add missing keywords to VisualStudio and Notepad++ syntax highlighting (Thanks to Lucian Muresan)
  • Exec() correctly depends on dynamically discovered files (Thanks to James Leitch)
  • [Windows] Avoid temp file creation failures (anti-virus or async termination) (Thanks to Alexandre Ganea)
  • CopyDir reports error when target already exists (regression in v0.95) (Thanks to dummyunit)
  • RemoveDir reports error when target already exists (regression in v0.95) (Thanks to dummyunit)
  • Executable/DLL respect gcc/clang style cmd line dependencies (Thanks to Francisco Facioni)
  • Correctly handle nested aliases in .Compiler for ObjectList/Library
  • Fix "buidl" typo in -help text
Improvements
  • Distributed Compilation:
    • FBuildWorker no longer steals focus briefly on startup (Thanks to v1ne)
    • FBuildWorker no longer adds Windows 10 notification on startup (Thanks to v1ne)
    • FBuildWorker no longer steals focus when launched (or restarted) unminimized
    • -distverbose provides information about attempted and failed connections
  • Project Generation:
    • .SolutionBuildProject doesn't need to be specified redundantly in .SolutionProjects
    • VSSolution() .SolutionBuildProject supports multiple projects for increased flexibility
  • Upgrade LZ4 compression to v1.8.2 for improved cache and distribution performance
  • Compiler() can reference executables compiled by FASTBuild (Thanks to gkoreman)
  • Orbis-wave-psslc is auto-detected as a supported compiler (Thanks to gkoreman)
  • BFF parsing speed improved ~5%
  • Allow UnityInputExcludedFiles to handle partial paths (Thanks to Lambert Clara)
  • Exec() supports InputPath, InputPattern etc to dynamically discover files
  • [Linux] Reduce glibc dependencies to version 2.6 (Thanks to dummyunit)
  • Test() supports TestInput* options for additional dependency specification (Thanks to James Leitch)
  • Compiler detection works for Android when using .cmd wrappers (Thanks to Pavel Bibergal)
  • Progress output is automatically disabled when redirecting output (Thanks to dummyunit)
  • Better handling of symlinks in file operations; specifically when copying files (Thanks to James Leitch)
  • Add .CompilerInputAllowNoFiles to ObjectList/Library (Don't fail if no files are found)
  • Remove redundant "x64" from various places (help, ui) now that only x64 is supported
  • Report (-report) specifies host OS (Windows, OSX, Linux) rather than x64
v0.95 (4-Feb-2018)
Notes
  • DB Version Changed : clean build will occur
  • Cache version changed : previous cache entries will be ignored
  • Behaviour Changed: Sub struct concatenation order has been fixed (see fixes)
  • Pre-built executables for 32-bit Windows version will no longer be released
New
  • The VBCC compiler is now supported
  • -cacheinfo option dumps information about the cache
  • -cachetrim option trims the cache to the desired size
  • Support WindRiver compiler (dcc.exe) (treat as gcc) (Thanks to Mohamed El-Shahawi)
  • Add -cacheverbose command line option
Fixes
  • Distributed Compilation:
    • Prevent rare shutdown crash or deadlock when using distributed compilation
    • [Windows] Fix handle leak in FBuildWorker
    • FBuildWorker no longer exits if exe is deleted prior to replacement
  • BFF Parsing:
    • Concatenation of members in first level of sub-structs was reversed
    • Internal string copies avoid some potentially unsafe operations (Thanks to dummyunit)
    • Fix crash when accessing variable from parent scope that doesn't exist (Thanks to dummyunit)
    • Fix crash when mismatched types are provided in an Array declaration (Thanks to dummyunit)
    • Empty strings in Arrays report 'Empty string not allowed' instead of being silently accepted
    • Empty strings sepcified for files report 'Empty string not allowed' insead of 'Path not allowed'
    • Empty arrays being set for required properties are no longer silently accepted
    • Strings with embedded nuls not being copied properly during a grow operation (Thanks to dummyunit)
    • Mismatched types in Struct concatenation reports error #1034 instead of crashing
  • Project Generation:
    • Generated Visual Studio projects are compatible with Visual Studio Selector (Thanks to slonopotamus)
    • [OSX][Linux] .vcxproj Intellisense includes are generated with Windows-style slashes
    • Intellisense and CodeSense options are discovered when using spaces (e.g. "-D WIN32")
    • [Windows] .xcodeproj CodeSense include paths are generated with OSX-style slashes
  • Cache:
    • [OSX][Linux] Error message when failing to load cache plugin dll is correctly output (Thanks to dummyunit)
    • Cache entries not being unique when only filename changes
    • Cache stores additional files required by /analyze flag with msvc compiler
  • Prevent source files being deleted due to a rare race condition using experimental -fastcancel (Thanks to Lambert Clara)
  • [Linux] Fix FileCopy when dest file is read-only
  • Prevent precompiled headers using deoptimzation settings (Thanks to Jean-Sebastien Pelletier)
  • [Linux] Fix unsafe readlink retrieving executable path for fbuild (Thanks to dummyunit)
  • [Linux] Performance of hashing & compression was 5-10x slower due to incorrect optimizations (Thanks to dummyunit)
  • [OSX] [Linux] Handle DT_UNKNOWN correctly when walking directories on some file systems (Thanks to fuzzac)
  • [Windows] Clang/GCC remote failures no longer incorrectly report as System Failures (Thanks to Arturmazurek)
  • DLL() and Exectuable() have a proper dependency on the linker executable
  • [Linux] Tests which crash are correctly reported as failed (Thanks to dummyunit)
  • Failure to create temp files when compiling objects reports correct error (Thanks to dummyunit)
  • Work around VS2013/15 bug resulting in missing dependencies when an old .pch is on disk (Thanks to Lambert Clara)
  • Fix include detection when Clang is used as cl.exe (Thanks to Poppolopoppo)
  • Prevent crash breaking via Ctrl+C when -wrapper mode is used (-vs, -ide etc)
  • -config paths with spaces are correctly handled when using -vs or -ide (Thanks to liamkf)
Improvements
  • Distributed Compilation:
    • Remote compilation can win a race, improving compile times
    • Greatly reduce memory usage of FBuildWorker
    • FBuildWorker idle CPU usage reduced (check every 500ms instead of 100ms)
    • Expose local .DistributableJobMemoryLimitMiB in Settings
    • Increase distributable job memory limit to 2GiB for 64bit builds
    • Increase FBuildWorker idle detection threshold to 20%
    • Increase connection timeout which was too aggressive (0.5s -> 2.0s)
    • [Linux] FBuildWorker idle detection implemented
  • Project Generation:
    • VCXProj Intellisense info can be derived automatically in more situations
    • .ProjectAllowedFileExtensions includes *.asm and *.s by default
  • Copy with multiple .Source and non-dir .Dest generates an explicit error (#1400)
  • Avoid Copy() error setting timestamps for copy if dst file is locked by another application
  • Remove CopyNode serializing SourceBasePath property to DB unnecessarily
  • Error 1009 'Unknown variable.' includes variable name in case it's not obvious from the context
  • .CompilerFamily can be explicitly set on Compiler() to override auto-detection (Thanks to Layla Mah)
  • Unity pragmas are commented out for files isolated from unity
  • DLL() and Executable() support .PreBuildDependencies
  • Test() supports .PreBuildDependencies
  • Bash completion script updates for latest options (Thanks to dummyunit)
v0.94 (28-Sep-2017)
Notes
  • DB Version Changed : clean build will occur
New
  • -quiet option can be used to supress build output (Thanks to Nik Reiman)
  • -showdeps displays dependencies, useful for debugging build configs (Thanks to Layla Mah)
  • FBuildWorker -console cmd line arg enables UI-less "console" mode
  • -nosummaryonerror option supresses -summary if the build fails (Thanks to Lambert Clara)
  • Added -forceremote option for troubleshooting (Thanks to Lambert Clara)
Fixes
  • CSAssembly pattern defaults to *.cs again (regression introduced in v0.93)
  • Fix compatibility with Recode (include paths removed sometimes) (regression introduced in v0.93)
  • Return code in wrapper mode is now non-zero when child process crashes (Thanks to Sam Hocevar)
  • Restore custom Preprocessor functionality (regression in v0.93)
  • [Linux] Ctrl+C no longer causes build progress to be lost on Linux (Thanks to comicfans)
  • Keep-alive timeout was too low, causing dropped connections during distributed compilation
  • Prevent unsafe caching of precompiled headers that differ only in unused defines (Thanks to Lambert Clara)
  • Fix rare crash when using distributed compilation
  • Distributed job local memory limit is now correctly respected
  • Prevent rare crash when using distributed compilation (Thanks to Jean-Sebastien Pelletier)
  • [OSX] Fix init failure on some configurations when using -dist due to TCP send/recv buffer size (Thanks to myevan)
  • Fix socket leak when send/recv buffer size could not be set
  • Prevent network disconnections due to too small Send timeouts
  • DirCopy no longer fails if a source file is deleted (Thanks to kwayle)
  • Remote workers failing to read files no longer fail without error (Thanks to Lambert Clara)
  • Fix -wrapper mode on Windows if fbuild.exe is renamed (Thanks to James Leitch)
  • Exe name is printed correctly in usage info if exe is renamed (Thanks to James Leitch)
  • Exe name is printed correctly in usage info on OSX and Linux (Thanks to James Leitch)
  • MSVC linker and lib warnings shown when not using /WX (Thanks to Lambert Clara)
  • [Linux] CopyFile and CopyDir transfer file permissions on copy (Thanks to Javier Blazquez)
Improvements
  • [Experimental] New -fastcancel option allows immediate termination on build failure (Thanks to Jean-Sebastien Pelletier)
  • Remote internal compiler errors will be retried to avoid breaks due to faulty hardware (Thanks to Sam Hocevar)
  • Paths inside VisualStudio projects are relative where possible, including Intellisense (Thanks to Eric Arnold)
  • [Windows] FASTBuild supports >64 cores on x64 and >32 cores on x86 (Thanks to missmah)
  • Visual Studio projects can be generated with generic source bindings via ProjectSccEntrySAK (Thanks to Lucian Muresan)
  • Increase distributed job local memory limit to 1GiB (was 512MiB)
  • Add work around for bugs in MS Linker causing PDB corruption (LNK1318), seen in VS2017
  • Add basic documentation for operator + when used on Structs
  • Lib uses source objects for other libs where possible (Thanks to Javier Blazquez)
  • Add link to Syntax highlighting link by Manuzor (Thanks to Manuzor)
  • Distributed compilation worked limit can be set via .WorkerConnectionLimit
  • Add -distverbose command line to help with troubleshooting distributed compilation issues
  • Improve summary output for CopyFile, CopyDir and RemoveDir
  • .BuildLogFile path can be set for generated Visual Studio projects (thanks to lucianm)
  • Libraries are flattened for non-MSVC librarian when nesting libs (Thanks to Javier Blazquez)
  • New FASTBUILD_TEMP_PATH env var can set TEMP dir for FASTBuild to use (Thanks to comicfans)
  • Objects and Libs are only deleted before building if using -clean, reducing overhead
  • Small memory usage and performance optimization during builds and bff parsing
  • Avoid opening files unnecessarily when #once directive is used
v0.93 (13-Mar-2017)
Notes
  • DB Version Changed : clean build will occur
  • Distributed protocol version has changed
New
  • New .SimpleDistributionMode allows distributed compilation of arbitrary single file objects (Thanks to gkoreman)
Fixes
  • Prevent error D8049 when compiling remotely with really long command line args
  • Fix missing depencies when using Clang with empty files and mixed line endings (Thanks to Wickerwaka)
  • Fix unescaped ampersands in VCXProject documentation
  • [Linux][OSX] Fix cache paths using wrong slash type (Thanks to dummyunit)
  • Slashes are escaped in response files for ar.exe in Windows (useful when building for Android)
  • Assignment of .String to .ArrayOfStrings silently failing in some cases
  • Cache plugin DLL is correctly handled on X86 Windows
  • Copy, CSAssembly and Unity can have PreBuildDependencies which are ObjectLists
  • Alias .Targets can be ObjectLists
  • Libraries are rebuilt when Librarian changes
  • Correct documentation for -ide option (add note about -ideo enabling -fixuperrorpaths on Windows only)
Improvements
  • XCode Projects now support CodeSense
  • Support for optional environment variables via "#if exists(VAR_NAME)" (Thanks to Javier Blazquez)
  • [Linux][OSX] New LZ4 (v1.7.4.2) improves compression speed for OSX and Linux ~10-30%, improving cache performance
  • BFF parsing speed significantly increased (upto 2x)
  • Exec() can have a PreBuildDependency on a CopyDir node
  • .CustomEnvironmentVariables can be set for distributed compilation (Thanks to gkoreman)
  • .ExecutableRootPath can control root of distributed toolchains (Thanks to gkoreman)
  • Allow string properties to be set to empty strings if they are optional
  • Compiler exposes .ClangRewriteIncludes to allow use of -frewrite-includes to be disabled if needed
  • Add Sublime Text markup (Thanks to Andreas Haferburg)
v0.92 (27-Nov-2016)
Notes
  • DB Version Changed : clean build will occur
  • Cache version has changed : Existing cache entries will be ignored
New
  • [Experimental] -monitor option writes a machine-readable log for external visualizers (Thanks to Yass007 and LiamKF)
  • bash completion script for fbuild executable now available (Thanks to dummyunit)
Fixes
  • Prevent MSVC Error C1382 due to an .obj and .pch mismatch due to multiple machines partially populating the cache
  • FASTBuild is no longer incompatilble with Clang's static analyzer (-analyze) (Thanks to Pavel Bibergal)
  • Fix various MSVC compiler args not being detected when using -X instead of /X syntax
  • Fix various MSVC linker args not being detected when using -X instead of /X syntax
  • Fix various MSVC linker args being assumed to be case-sensitive (linker args are case insensitive)
  • Linking against Orbis .prxs built by FASTBuild uses _stub_weak.a (Thanks to jairbubbles)
  • Fix CopyDir destination path not being normalized causing failures
  • Fix typo in Report when there are no includes (Thanks to Leandros)
  • -showtargets now includes targets defined by ObjectList and Unity
  • .Target property in XCodeProject() .Configs is optional
  • Removing empty strings in bff with operator - is ignored instead of being incredibly slow (Thanks to dummyunit)
Improvements
  • Solution() allows the same folder to be specified multiple times for added flexibility (Thanks to Poppolopoppo)
  • Documentation for Test() (Thanks to Manuzor)
  • ObjectList(), Library() and CSAssembly() support .CompilerInputPatternExclude (Thanks to Fitzymj)
  • Added .TestAlwaysShowOutput option to Test() which prints the test output even if it passes
  • Optimize network sends, reducing kernel call overhead
  • Improved diagnostic messages for distributed compilation (Thanks to Sam Hocevar)
  • Copy() .Source can now be empty as this allows for greater configuration flexibility
  • An invalid .Target in an XCode configuration will now fail during bff parsing
v0.91 (25-Aug-2016)
Notes
  • DB Version Changed : clean build will occur
  • Cache Version changed : prior version cache items will be ignored
Fixes
  • Array of Structures behaves consistently with Array of Strings (Thanks to dummyunit)
    • Empty arrays are now essentially treated as untyped
  • Edge cases which allowed variables to silently change type are now prevented (Thanks to dummyunit)
  • Integer addition works with explicit values as well as variables (Thanks to dummyunit)
  • Database detects when it is moved or copied, avoiding difficult to diagnose build errors
  • Fix crash when .UnityInputFiles and .UnityInputIsolateWritableFiles were used together
  • Pre-build deletion of MSVC pch object file didn't work in some cases
  • TestTimeOut value is correctly interpretted as being in seconds (not milliseconds)
Improvements
  • Optimizations:
    • Precompiled Header with MSVC can be cached
    • Precompiled header acceleration is no longer disabled for MSVC when writing to the cache
  • Empty arrays can now be treated as arrays of structures (Thanks to dummyunit)
  • Allow for longer variable names in BFF files (256 vs 64) (Thanks to poppolopoppo)
  • Subtraction operator behaviour is handled more consistently (Thanks to dummyunit)
  • Bools and Ints can be formatted into string with $var$ syntax (Thanks to poppolopoppo)
  • CSAssembly supports PreBuildDependencies (Thanks to poppolopoppo)
  • Unity supports PreBuildDependencies
  • BFF syntax now supports #else directive
  • Remove .PCHOptionsDeoptimized option - it's not useful and causes problems
  • Use Clang's -frewrite-includes option to avoid preprocessing inconsistencies (Thanks to Jean-Sebastien Pelletier)
v0.90 (2-Jul-2016)
Notes
  • DB Version Changed : clean build will occur
  • Behaviour Change: code compiled with /ZW can now be cached
New
  • VCXProject can automatically derive intellisense settings if new Target property is set
  • .SolutionPlatform and .SolutionConfig added to Visual Studio sln generation (Thanks to Agga)
  • .CompilerInputFilesRoot allows root path setting for .obj path generation for explicitly listed files (Thanks to Sergey Makeev)
  • Test() supports an optional .TestTimeOut, after which it will be terminated with failure
Fixes
  • Warnings shown when using Microsoft compiler, even if "warnings as errors" (/WX) is not enabled (Thanks to matlec)
  • Avoid anonymous namespace conflicts with distributed compilation with MS Compiler (Thanks to Sergey Makeev)
  • [OSX][Linux] Fix occasional hang in process spawning
  • [OSX] Overridden environment is correctly set for spawned processes
  • Fix corrupt solution generation when Folder path is specified with a trailing slash
  • Prevent exit being delayed when some workers are incommunicado (cuts as much as 2s off some no-op builds)
  • BFFs changes are correctly detected when switching between .bff files using -config option (Thanks to Jalal El Mansouri)
  • Fix cmdline usage info for FBuildWorker (should read -mode=dedicated not -mode=always)
  • Create directory for .pdb and .asm files if different from .obj file (Thanks to Tengato)
  • [OSX][Linux] -ide was reformatting errors on OSX/Linux, preventing IDEs (like XCode) parsing them
Improvements
  • Optimizations:
    • Reduce time to hand out and accept distributed compilation
    • Optimize large command line processing, reducing overhead spawning processes with > 4KiB of cmd line
    • [Windows] Reduce process spawning overhead by ~8ms on average
    • Speed up worker discovery when some workers are incommunicado (improves distributed compilation performance)
    • Hostname to IP resolution of valid workers no longer stalled by incommunicado worker timeout
  • Config files hash is used during parsing to reduce rebuilds on edit/revert (Thanks to dummyunit)
  • Rebuilding is minimized when manually switching between .bff files using -config option (Thanks to Jalal El Mansouri)
  • .natvis fils are included in project generation by default for enhanced debugging support in VS
  • .ProjectPatternToExclude can be used to exclude files from project generation (Thanks to Keith Gunning)
  • Add support for caching /ZW (Windows Runtime) object files (Thanks to ClxS)
  • Continued work on distributed compilation for OSX and Linux
v0.89 (13-Feb-2016)
New
  • Operator '-' can be used to remove substrings from strings
  • -showtargets cmdline option displays primary build targets (Thanks to Cyberkm)
Fixes
  • Precompiled headers used with GCC now work correctly (acceleration is no longer prevented)
  • -include option is correctly handled with GCC and Clang
  • Exec() works with non-zero return codes on Linux and OS X
  • Fix race condition in shutdown of fbuild that could cause an extremely rare hang
  • Correct position of arrow for error 1009 and 1034 in some situations
  • FBuildWorker only checks free space of drive containing temp directory
Improvements
  • Small optimization (0-10%) to cache storage and retrieval (updated LZ4 from r127 to r131)
  • When specifying an invalid target on the cmdline, similar targets are suggested (Thanks to poppolopoppo)
  • Avoid local hostname lookup when not running in distributed compilation mode for small speedup
v0.88 (9-Dec-2015)
Note
  • DB version has changed : clean build will occur
  • Cache version changed : existing cached items will be ignored.
New
  • Support dependency tracking for Qt resource files (.qrc)
  • RemoveDir can be used to create cleanup build steps (Thanks to Poppolopoppo)
  • Optional .LinkerType on DLL & Executable allows explicit specification of linker type (Thanks to Josh Green)
  • Caching and Distribution can be disabled for an ObjectList or Library using
  • Variable names can by dynamically constructed, such as: .Var = ."MyThing_$Config$" (Thanks to Poppolopoppo)
Fixes
  • Config (.bff) #include works when a full path is specified
  • Prevent Compiler() node from unnecessarily re-hashing files in some cases
  • Fix Compiler() node not re-hashing in some cases
  • .Environment in Settings() is now respected on Linux and OS X
  • Fix stale dependency when a file in an ObjectList() fed into Unity() is deleted or moved
  • Both command lines are shown when doing two-stage compilation and -verbose or -showcmds is used
  • Ensure command line length limit is correctly respected in all cases
  • Automatically handle response file line length limit with MS tools (avoid LNK1170)
  • Fix caching when output object is *.cpp.obj (e.g. Unreal Build Tool)
  • Don't let inaccessible drives trigger low-space disabling of FBuildWorker
  • Parent scoping ^ now works correctly with ^X = { .Y } syntax
  • A parse-time error will be emitted for conflicting files listed in Compiler()
  • Fix crash caching of objects with preprocessed source > 2GiB (replace MurmurHash3a with xxHash)
  • Treat remote failure with 0xC0000142 (Windows) as system error and retry (occurs during "force shutdown screen") (Thanks to Jean-Sebastien Pelletier)
  • -nostoponerror no longer skips some parts of hierarchy when errors occur (Thanks to Jean-Sebastien Pelletier)
Improvements
  • Report an error when command line is too long and response files can't be used
  • Cache plugin now supported for OS X and Linux (Thanks to gdaow)
  • Cache lookup using faster hashing algorithm (replace MurmurHash3a with xxHash)
  • Add work-around for VS2012 Compiler enum pre-processing bug (Thanks to Jean-Sebastien Pelletier)
  • VCXProject supports wildcards for file extensions
  • Work towards feature parity on OS X and Linux
v0.87 (26-Sep-2015)
Note
  • DB version has changed : clean build will occur
New
  • The Intel Compiler is now a supported compiler (icl.exe)
  • Variable prefix ^ allows access/modification of higher-level scope variables (Thanks to poppolopoppo)
  • #define/#undef directives allow for user defined tokens (thanks to Poppolopoppo)
Fixes
  • Fix missing dependency in some cases where #include was preceded by whitespace with MSVC compiler
  • Prevent jobs being accepted if disk-space drops below threshold after a build has already started
  • Improve detection of disk space failures with MSVC compiler
  • Support /IMPLIB for Executables with MSVC Linker (Thanks to Josh Green)
  • link.exe is recognized as a valid librarian, since it can be used with /LIB (Thanks to Josh Green)
  • Fix VS Solution generated GUIDs being inconsistent in some situations, causing Solution to always be "dirty" (Thanks to Arttu Peltonen)
Improvements
  • FBuildWorker UI shows warning in title when disk-space is low
  • Missing documentation for Exec() .ExecReturnCode added (thanks to Josh Green)
  • Exec() has new .UseStdOutAsOutput option, for executables which don't normally generate a file (thanks to Josh Green)
  • Exec() function now supports multiple inputs (Thanks to Josh Green)
  • Support for negating #if directive - i.e. #if !TOKEN (thanks to Poppolopoppo)
  • Add .SourceBasePath to Copy() function - allows duplicating partial source path hierarchies into destination
  • Multiple Wildcard Support:
    • CompilerInputPattern (CSAssembly, ObjectList and Library) supports multiple wildcards
    • UnityInputPattern (Unity) supports multiple wildcards
    • SourcePathsPattern (CopyDir) supports multiple wildcards
  • Optimizations:
    • Latency of local job consumption is reduced by upto 15ms
    • Optimize include discovery with MSVC compiler when using the preprocessor (cached or distributed compilation)
  • Visual Studio Solution Generation:
    • VSSolution Folder structs support String or ArrayOfStrings for .Project list
    • VSSolution .SolutionProjects is now optional to avoid duplication in .SolutionFolders
    • VSSolution supports setting inter-project dependencies; Useful in some situations
v0.86 (6-Aug-2015)
Note
  • DB version has changed : clean build will occur
Fixes
  • More robust fix for bug causing unnecessary rebuilds with MSVC compiler in some situations
    • if a warning was generated, and /WX was not enabled, an invalid path could enter the dependency database
    • bug introduced in v0.84
v0.85 (3-Aug-2015)
Note
  • DB version has changed : clean build will occur
Fixes
  • Fix bug causing unnecessary rebuilds with MSVC compiler in some situations
    • if a warning was generated, and /WX was not enabled, an invalid path could enter the dependency database
    • bug introduced in v0.84
v0.84 (28-Jul-2015)
Note
  • DB version has changed : clean build will occur
  • Behaviour of operator + on structs has changed
New
  • #import directive allows importation of environment variables (Thanks to Poppolopoppo)
  • Workers will self-deactivate when low on disk space (Thanks to Jean-Sebastien Pelletier)
  • Visual Studio Solution generation (thanks to Poppolopoppo)
  • Add "-nostoponerror" option: Try to build as much as possible instead of stopping on the first error
Fixes
  • Includes are correctly tracked when using /showIncludes with non-English MSVC compiler (Thanks to Poppolopoppo)
  • .StructA + .StructB results in members being recursively concatenated instead of replaced (Thanks to Poppolopoppo)
  • Recognize -c as well as /c when checking for required compiler options with MSVC
  • [OSX/Linux] Fix crash using -report
  • Automatically strip /Gm compiler option with MSVC compiler (incompatible with FASTBuild)
  • Compiled object extension defaults to .o on Linux/OS X
  • Fix formatting of ToolManifest errors so they appear in VS Error Window (Thanks to Josh Green)
  • Warn about invalid values passed to -j[x] option (local thread count) (values <0 or >64 are invalid)
  • Prevent UnityNode excluded file list containing duplicates if using Precompiled Headers
  • Ensure path exists /IMPLIB option if different from normal output to prevent linker option (Thanks to Josh Green)
  • Fix crash when using /Fi or /P command line option with MSVC compiler (Thanks to Poppolopoppo)
Improvements
  • Print() can now output any variable, array or structure with new Print( .Var ) syntax
  • Optimizations
    • Reduce latency starting a new jobs on a remote worker
    • Reduce latency returning completed remote jobs
    • Workers request 1 more job than available CPUs to overlap network transfer and compilation
    • Reduce remote worker thread context switches
  • #include now supports variable substitutions (e.g. #include "Compilers/$VSVersion$.h") (Thanks to Poppolopoppo)
  • Excluded files support relative paths (starting with ../ or ..\) (Unity, ObjectList, Library and CSAssembly)
v0.83 (18-Jun-2015)
Note
  • DB version has changed : clean build will occur
Fixes
  • Fix formating of "-nooutputbuffering is deprecated" message
  • Fix Exec and Copy steps fed explicitly to ObjectList/Library (via .CompilerInputFiles) being ignored
  • Fix ObjectList sometimes being displayed as "??" in the -report output
  • Don't look for import .lib when linking a DLL unless using the MS linker
  • Unity() correctly depends on .UnityInputFiles that are output by other build steps
Improvements
  • BFF parsing no longer complains about missing libs (leave this upto the linker)
  • CompilerInputUnity can accept multiple Unity inputs in ObjectList() and Library()
  • Unity can take output of an ObjectList(s) as input via new UnityInputObjectLists
  • Add CompilerOutputPrefix option to ObjectList() and Library()
  • Optimizations
    • Reduce latency of Worker requesting jobs from Client
    • Avoid remote workers underrequesting jobs when available job count is low (start and end of build)
    • Use timing information from previous builds to improve local and remote scheduling
    • Compile time improved slightly by using reponse files only when args are > 32767 characters
    • Small optimization to console output
    • Reduce external process invocation overhead by upto 16ms
    • Reduce main thread context switches
v0.82 (30-May-2015)
Note
  • DB version has changed : clean build will occur
  • Location of compiled object files has changed (now in relative sub-dirs)
  • "-nooutputbuffering" is deprecated: output is now always written in a timely fashion
Fixes
  • Object files are built into sub dirs, avoiding "Conflicting objects found:" for cpp files with the same name in the same library
  • Unity node no longer silently ignores input files that don't exist
  • [Linux][OS X] Fix missing progress bar on Linux and OS X
  • Fix dll (-shared and -dynamiclib) detection for gcc/clang linker
Improvements
  • Auto-fixup incorrectly escaped closing quotes in MSVC include paths (common user error)
  • Detect missing /c or -c compiler options (common user error)
  • Total build time shown is more accurate (includes -summary and -report time)
  • CompilerOutputpath in ObjectList and Library is auto-slash terminated
  • Optimizations
    • Network brokerage is no longer accessed if not in distributed mode
    • Optimize thread pool creation, saving upto 16ms per cpu core
    • Reduce all job scheduling latency by upto 30ms
    • Optimized scheduling to eliminate additional latency in various situations
    • Optimize unity file generation
    • Optimize database loading for Compiler() nodes by eliminating unnecessary IO
    • Reduce latency of distributed compilation by disabling TCP Nagle
    • Reduce context switches on network threads (FBuild and FBuildWorker)
    • Eliminate unnecessary progress calculation during shutdown
    • Reduce context switches on main thread
    • Optimized -summary output
    • Optimized all console output slightly
v0.81 (9-May-2015)
Note
  • DB version has changed : clean build will occur
New
  • Add custom preprocessor support for ObjectList and Library (Thanks to Jussi Knuuttila):
    This allows for:
    • Different complier version for preprocessor
    • Completely different preprocessor (e.g. clang)
    • Compiler for preprocessor/dependency tracking, combined with calling a custom tool
Fixes
  • [Linux] UnityInputExcludedFiles is now case-sensitive on Linux
  • Includes now discovered correctly with Clang for Windows and -fms-compatibility
  • Avoid LNK4221 warning when all files in a unity are isolated due to .UnityInputIsolateWritableFiles
  • Fix incorrect 'missing despite success' error message when primary compiler executable is not found
Improvements
  • Print "WARNING:" instead of "PROBLEM:" in output when compiler passes, but emits text to stderr (like msvc when /nologo is not specified)
  • Show exe path when failing to spawn linker (typically due to bad path to exe)
  • Add CompilerInputExcludedFiles option to ObjectList, Library and CSNode (Thanks to Jean-Sebastien Pelletier)
v0.80 (5-Apr-2015)
Note
  • DB version has changed : clean build will occur
  • Protocol version changed : update workers
New
  • OS X & Linux now supported (Alpha)
    • All features except distributed compilation (coming in Beta)
  • Add #if/#endif directives to assist in cross-platform bff configs
  • Add built-in __WINDOWS__, __LINUX__ & __OSX__ symbols for use with #if
Fixes
  • Toolchain distribution is correctly uniquified when compiler uses exe name to alter behaviour (PS4 Clang)
  • Aliases to missing items will now report an error at build time
  • Use response files to avoid command line limit on Windows when compiling C# (Thanks to Vitalii Trubchaninov)
  • Linking a dynamic library created with GCC/SNC/Clang in a subsequent link step no longer causes an error
Improvements
  • Support multiple concurrent FASTBuilds if run in different root folders (Thanks to Vitalii Trubchaninov)
v0.77 (19-Mar-2015)
Note
  • DB version has changed : clean build will occur
  • Various internal changes to prepare for Linux & OSX
New
  • Unity supports wildcard ExcludePattern (String or ArrayOfStrings)
Fixes
  • Fix path canonicalization bug for files with double slashes in path
  • Cache path env variable is no longer ignored when Settings() is missing in BFF
  • Database is once again saved when Ctrl+C is used from cmd line (broken in v0.73)
  • Fix potential crash in string/path manipulation
  • Test now correctly detects write failure when storing results to disk
  • Avoid hanging parent process if FBuildWorker launched from script/Visual Studio
Improvements
  • Detect and report as error missing %1 or %2 args for Compiler/Librarian/Linker
  • Remove unnecessary re-parsing of BFF when cache path changes
  • Out of disc space on remote worker for detected and handeld for MSVC, GCC and Clang
  • Precompiled header generation is prioritized during scheduling
v0.76 (9-Feb-2015)
Note
  • Distributed protocol version changed; update workers (Updated to isolate from workers without fixes from v0.72+)
  • Various internal changes to prepare for Linux & OSX
Fixes
  • Fix broken incremental linking with MSVC compiler (.ilk and .pdb were being deleted every time)
  • Fix bug handling UNC paths in CachePath (leading double slashes were not respected)
  • Fix double quotes not correctly canonizalized in some situations
  • Stop LinkerStampExe being incorrectly attached to the link line
Improvements
  • Remove some unnecessary command line manipulation with MSVC compiler for Recode compatibility
v0.75 (11-Dec-2014)
Improvements
  • Large optimization for highly recursive dependency graphs
  • Progress calculation optimized
  • Progress calculation accuracy greatly improved
v0.74 (1-Dec-2014)
Note
  • Database version changed : Clean build will occur
  • Various internal changes to prepare for Linux & OSX
New
  • CopyDir function - copy contents of one or more directories
Improvements
  • Add explicit check and error msg for missing DLLs on remote machine
  • Alias can refer directly to files not built by FASTBuild
Fixes
  • Massive speedup to directory listing performance when dealing with > 4096 files
  • Copy() dest timestamp is correctly set when using PreBuildDependencies
  • #once include directive not being respected in some cases
  • Fix included bff being considered always dirty in some cases
  • VCXProjectNodes can be referenced as files (allows copying)
  • Various cases where empty strings was not correctly reported as error 1004
  • Empty Alias() .Targets is reported as an error instead of silently doing nothing
v0.73 (11-Nov-2014)
Note
  • Database version changed : Clean build will occur
  • Various internal changes to prepare for Linux & OSX
New
  • Link steps (DLL/Exe) have new options for post-link in-place stamping (.LinkerStampExe and .LinkerStampExeArgs)
Fixes
  • Preserve case of files discovered during compilation
  • Fix BFF parser crash caused by unterminated strings, arrays or structs under some circumstances (now emit Error 1002)
  • Ensure UnityInputExcludedFiles works correctly with full paths
  • Ensure directories for VS Project generation are created before use
  • Clang detection: *clang[.exe] and *clang-cl[.exe] detected in addition to existing *clang++[.exe]
v0.72 (28-Sep-2014)
Note
  • Database version changed : Clean build will occur
New
  • Support for Wii toolchain (CodeWarrior)
  • Support for WiiU toolchain (GreenHills)
  • Support for CUDA (nvcc.exe) compiler
Improvements
  • Synchronized compiler files are locked by FBuildWorker.exe to prevent deletion on remote machine
  • Project generation includes CUDA *.cu files by default
Fixes
  • UnityInputExcludedFiles matches only full filenames instead of just matching the end of file names
  • UnityInputExcludedFiles are canonicalized so double slashes no longer cause failure to exclude files
  • Gracefully handle compiler being terminated remotely due to shutdown of PC
v0.71 (19-Jul-2014)
Note
  • DB version has been increased; clean build will result after upgrading
  • Distributed worker protocol has changed; update workers
New
  • "-showcmds" option shows commands being executed during compilation (far less verbose than verbose)
  • "-cpus=n" option allows number of cpus to be controlled from the command line
  • "-mode=x" option allows worker mode to be controlled from the command line
  • "-wait" command line options to allow queueing of multiple builds
  • Add DeoptimizeWritableFiles option (use deoptimized settings for writable files)
Improvements
  • Prevent Executables/DLLs re-linking when a DLL they depend on changes, but the interface stays the same
  • Incremental link files (.ilk) deleted before linking when doing a -clean build
  • PDB files deleted before linking (if non-incremental) to avoid pdb bloat and link slowdown
  • Automatically strip /MP argument for MSVC compilers (FASTBuild controlls the parallelization)
Fixes
  • Differentiate remote "system" failures from compilation failures
    • a remote failure will cause the worker to be blacklisted and the task retried on another worker
    • remote failure on 3 different workers will fail as before (indicates a configuration problem)
  • Error path fixup now handles "remark:" and "fatal error:" style messages
  • Fix path fixup for SNC compiler output (errors, warnings etc)
  • PS4 linker uses response files to avoid 32KiB cmd line limit
  • PS4 linker tracks library dependencies passed directly on compiler command line
  • FBuildWorker.exe correctly exits on WM_CLOSE notifications (taskkill for example) instead of minimizing
  • PreBuildDependencies are correctly processed for -summary and -report
v0.70 (21-Jun-2014)
Note
  • DB version has been increased; clean build will result after upgrading
  • Cache format has changed; existing cache data will be ignored
  • Distributed worker protocol has changed; update workers
New
  • Distributed compilation is no longer in Beta.
Improvements
  • Cache size & speed optimizations
    • Cache compression switched to LZ4
    • 20-30% reduced output size (less space used on cache, less network transfer)
    • 20-30% faster compression (less time spent on local machine when storing to cache)
    • 600% faster decompression speed (when decompressing on local machine after retrieval from cache)
  • FBuildWorker can use tools synchronized from a previous run to reduce network IO
  • Distributed compilation speed optimizations
    • Replace distributed compilation compression with LZ4
    • 50% reduced transfer size (half the data sent to remote machine, half the memory usage locally when pending)
    • 230% faster compression speed (less time spent compressing before sending)
    • 700% faster decompression speed (7x less work to decompress on remote machine)
  • Use 64bit MurMur3 hash for faster/better cache key generation
    • 300% faster hash of preprocessed cache input
    • Less chance of collisions vs CRC32
    • Using 64bits MurMur3 for further reduced collision potential
  • Optimize include parsing for all compilers
  • Support /7i and /ZI debug format for distribution with MSVC compiler
Fixes
  • Handle tool synchronization failure properly to avoid leaked jobs
  • Fix remote worker over-requesting jobs when not using full cpu allocation (was causing reduced scheduling efficiency)
  • Includes no longer implictly push an addition {} scope (this was preventing includes being useful in many cases)
  • -config args are correctly passed to sub-process when in -vs or -wrapper mode
  • Fix race condition preventing copy in FBuildWorker auto-restart, causing update to fail
v0.62 (28-Apr-2014)
Note
  • DB version has changed: full build will occur
  • Wrapper Mode (-wrapper) is now active as part of Visual Studio mode (-vs)
New
  • FBuildWorker will auto-restart when updated (i.e. new version sync'd from revision control)
Improvements
  • Allow ObjectList, Library and CSAssembly to take multiple exclusion paths
  • Add "DeploymentType" and "DeploymentFiles" to vcxproj generation for Xbox360
  • .m and .mm files are included in vcxproj generation by default
  • Multiple targets are built in parallel
  • Cost of progress calculation is massively reduced
  • Remotely compiled tasks are written to the cache on return
  • -summary shows total remote CPU time
  • Reduce FBuildWorker CPU usage when worker is idle
Fixes
  • Deoptimized compilation settings were being ignored if using distributed compilation
  • Files using /FI (Force Include) with MSVC compiler compile correctly when using the cache or distribution
  • Fix -summary time output when building multiple targets
  • Consider PreBuildDependencies correctly in progress estimation
  • Fix report/chart colours not working in -report due to bad html
  • Fix bad report generation when using ObjectList
  • Fix collapsable report sections in IE and Firefox
  • Correct -summary build count for remotely compiled objects
  • Locally build distributable tasks can be written to the cache
  • Correct use of reponse files with orbis-ar.exe which requires slashes to be escaped in file
v0.61 (29-Mar-2014)
Note
  • DB version has been increased; clean build will result after upgrading
  • Cache format has changed; existing cache data will be ignored
  • Distributed worker protocol has changed; update workers
New
  • Cache Plugin Architecture - allows cache IO functionality to be provided by a plugin dll
Improvements
  • Distributed Compilation
    • Increase distributed connection limit to 15
    • Minimization state of worker is persisted between runs
    • Worker default CPU allocation is 50%
    • Add icon the FBuildWorker.exe
    • Memory usage for distributed compilation is massively reduced
    • Distributed compilation will race remaining remote jobs locally, when there is no other work to do
  • Improve validation of .LinkerOutput argument (ensure a file and not a path is provided)
  • Safely handle empty libraries passed to linker .Libraries
  • Check for and handle truncated data being returned from the cache
Fixes
  • Distributed Compilation
    • Fix crash in worker when compilation error contains %
    • Fix job leak causing hang when synchronizing the same toolchain for 2 clients at the same time
    • Prevent some unsafe access to management structures on Worker
    • Fix potentially long shutdown when a remote worker is unresponsive
    • Prevent potential hangs in networking
    • Fix memory leak in worker if disconnected during tool synchronization
  • Fix crash when doing multiple rapid build/cancel cyles with -wrapper mode
  • Use the compiler toolchain hash in the cache key
  • Fix inability to detect fully pathed libs passed to .LinkerOptions
  • Detect MSVC linker correctly when provided as file only (i.e. relying on system path for discovery)
  • Fix path canonicalization when a relative path begins with a slash
  • Fix crash if cache path is empty, or a UNC path only to a machine
  • A failure in one of multiple targets on the command line no longer causes all subsequent tasks to fail
  • Librarian step uses response files to avoid 32KiB command line length limit
v0.60 (10-Mar-2014)
Note
  • DB version has been increased; clean build will result after upgrading
New
  • [BETA] Distributed compilation support
  • Deoptimization of writable files containing FASTBUILD_DEOPTIMIZE_OBJECT token
Improvements
  • Project Generation
    • Generated projects can directly launch/debug PS3/PS4
    • Allow options to be set per-configuration
    • Many new project generation options exposed
    • Supports multiple base paths
  • Caching
    • Show cache hits in standard output
    • Caching automatically disabled for files isolated from unity
    • Cache mode can be controlled via FASTBUILD_CACHE_MODE environment variable ('r', 'w' or 'rw')
    • Allow cache path to be set via an environment variable "FASTBUILD_CACHE_PATH"
  • FASTBuild runs at below normal priority for improved machine responsiveness
  • When MS linker crashes and we retry, supress the error to prevent visual studio from failing
  • Exec with -verbose prints in a cut and pasteble format to assist config debugging
  • Saving of the dependency graph is performed atomically to reduce chance of corruption if fbuild.exe is terminated during DB serialization
  • [BETA] Add "-wrapper" command line argument for Process Isolation. Allows graceful shutdown when terminated from Visual Studio.
  • Add .PreBuildDependencies to Copy() and Exec()
  • Add '-fixuperrorpaths' command line to reformat GCC/SNC/Clang errors to Visual Studio format
  • Prevent two objects being built to the same obj
  • Enabled Unity generation on multiple threads
  • PrecompiledHeader is used when locally building a distributable job, or if cache is in read-only mode
Fixes
  • Prevent #pragma messages being incorrectly parsed as includes in some cases with GCC/SNC/Clang
  • Fix -I arguments not being removed from Clang when using preprocessed output
  • Precompiled headers with Clang are not prevented from working usefully
  • Don't try to use precompiled headers in link step with GCC/SNC/Clang
  • Project generation LocalDebuggerWorkingDirectory written to correct part of project
  • Fix missing carriage return in output with --help
  • Exec with -verbose prints args after substitutions (%1 etc)
  • Handle UNC cache path correctly
  • Format FASTBuild errors so that column is interpretted by VisualStudio correctly
  • Fix performance degradation when failure output is massive (>1MiB) - (e.g. link failure)
  • Correctly return error when multiple targets are built and one fails
  • Replace pattern matching of FindNextFile with our own (so *.cpp doesn't return files like *.cpp~)
  • Fix items not under project path not being double clickable
  • Library() deleted libraries before creation to ensure old symbols don't remain in library
  • Prevent bff included with ../ being considered dirty every time
v0.58 (23-Jan-2014)
Note
  • DB version has been increased; clean build will result after upgrading
  • BFF includes are now relative to includer (no "system" includes)
New
  • Clang & PS4 support
  • Add #once pragma which allows BFF files to be included multiple times, but parsed only once
  • MSVC linker crashes (LNK1000) will be retried once as work around for bug in x64 incremental linker
Improvements
  • VCXProject creates projects which are compatible with VS2010 as well as 2012/2013
  • VCXProject can specify debugger args (working dir, startup exe etc)
  • Path canonicalization handles \.\ and \..\ for better consistency in target names
  • Failure find include shows full path of where the include was expected to be found
  • Greatly improve performance of VS project generation when there are many folders
  • Dependencies passed directly to linker (instead of .Libraries) and have their dependencies tracked
  • Copy step shows source and dest for copy in tty
  • -verbose mode will specify the reason for building any nodes
  • Exec function supports build time substitutions %1 (input) and %2 (output)
  • /IMPLIB supported for MSVC linker. Import lib specified will be used by dependent dlls.
  • Show in output when DB version has changed and rebuild will occur
  • Show when BFF files are modified and config re-parsing will occur
  • CachePath of wrong type emits an error instead of silently being ignored
  • Various system error messages are now formatted to appear in Visual Studio error window
  • Improve GCC detection - recognize g++ as well as gcc
  • Repeat name of object when compilation fails so task is clear
Fixes
  • Caching can be safely used on objects using precompiled headers with MSVC, avoiding missing debug info.
  • CLR code is not distributed/cached (compiler bug prevents safe use of the preprocessor)
  • Fix temp file writing failure detection (ensure whole file is written)
  • Compiler and Linker use response files to avoid Windows 32KiB args limit
  • Detect cyclic BFF include dependencies and report new Error 1035 instead of crashing with stack overflow
  • Correctly detect changes to BFF files with the same name when one is bff relative and one is in the system directory
  • Fix duplicate folders in generated VS project, causing project size bloat
  • Correctly handle '-o FileName' as well as '-oFileName' arguments with GCC/SNC compiler when manipulating args
  • Fix error in command line arguments to SNC when using cache
  • Fix bad file extension for preprocessed temp file with SNC compiler
  • Disable cache when using /ZW (consume WinRT) with MSVC compiler due to incompatibility
  • Fix cache sensitivity on working dir drive letter causing cache misses
  • Correct reversed types in Error 1027 with String + ArrayOfStrings
  • Fix formatting so first error with GCC/SNC is always double-clickable in Visual Studio
v0.57 (8-Dec-2013)
Note
  • DB version has been increased; clean build will result after upgrading
New
  • VisualStudio project generation
  • New .LinkerLinkObjects option on Executable() & DLL() allows control over linking objects instead of libs.
  • New .CompilerForceUsing option on Library() and ObjectList(), with %4 build-time substitution for use with MSVC /FU option.
  • New .LinkerAssemblyResources option on Executable() & DLL(), with %3 build-time substitution for use with MSVC /ASSEMBLYRESOURCE option.
  • New .PreBuildDependencies option for Library(), allows forced execution of an external process before a Library/ObjectList is built to better support extenal code generation.
  • New ObjectList() function allows building a list of items without linking into a library, to support buiding objects or resources without making libraries.
  • .LibrarianAdditionalInputs option on Library() to allow merging of objects, libraries or resources built externally or with Exec() or ObjectList().
Improvements
  • Add '.UnityInputFiles' option to allow an explicit file list to be provided to a Unity node
  • Support various assignment/concatenation oprerations with ArrayOfStrings and ArrayOfStructs
  • For libraries with mixed Unity and Non-Unity nodes, favour Unity nodes for compilation
  • Prioritize linking over compiling to reduce DLL bottlenecks
  • Job queue manipulation overhead is reduced
  • DLL & Executable support referencing a library or dll via a copy (to ensure the copy happens at build time)
  • Copy() supports multiple inputs if an output path is specified
  • Unity files emit #pragma messages to clearly show file being compiled in case of failure
  • .CompilerOutputExtension can be specified on Library() to control the extension for built objects
  • FASTBuild emits an error and exits if another instance is already running
  • Allow use of %3 Compiler build-time expansion for PCH object in object compilation as well as precompiled header compilation
Fixes
  • Escaping correctly works for all characters, not just "
  • -summary option shows cache hit time for cache hit nodes, instead of last known build time
  • Prevent a race where some additional jobs could be started after a failed task
  • Fix incorrect error message when attempting to concatenate Struct to ArrayOfStrings
  • Fix crash when self-assigning variables (i.e. .MyString = .MyString)
  • Assignment of structs was functioning as a concatenation (was keeping old members when it shouldn't)
  • Handle quoted build-time substitutions correctly to support spaces in paths (i.e. "%1" becomes "A" "B" "C" (instead of "A B C")
  • Unity uses "" style includes (instead of <>) to satisfy compilers like Clang
  • Fix bug causing massive slowdown generating large reports (-report)
  • Fix output to stdout being truncated to 8KiB in some cases when using -verbose
  • Copy can reference an alias as a source, including those aliasing multiple inputs
  • Correct bad formatting of Exec node in -verbose mode
  • Executable & DLL linking can accept an input built by Executable()
  • Fix failure to extract includes when include as on last line with no carriage return
v0.56 (10-Nov-2013)
Note
  • DB version has been increased; clean build will result after upgrading
New
  • New -report command line argument which outputs a detailed report of the build, including:
    • Processing time by item.
    • Processing time by library.
    • Processing time by type (obj, exe, dll etc).
    • Cache statistics.
    • Include file usage.
  • Add 'UnityInputIsolateWritableFiles' to unity generation. Allows files which are "open for edit" in revision control to be built individually to speed up iterative compile times.
Improvements
  • Tests can reference execuable via alias
  • -verbose output for Objects is improved: Timing is more accurate and number of includes found is displayed.
  • Include processing optimizations
  • Dependency graph traversal optimizations
  • Progress estimation optimizations
  • Large database load/save time is greatly reduced
  • Database size is greatly reduced
  • Total build time includes some previously excluded overheads
  • Job queue contention optimization
  • Small optimization to Unity generation
Fixes
  • Avoid using preprocessor with MSVC compiler unnecessarily
  • Fix C# dependencies not being tracked properly when using -clean
  • Fix C# dependencies not being tracked correctly for multiple explicitly listed .cs files
  • GCC includes not being correcly detected
  • MSVC includes being missed on some rare occasions
  • Fix poor unity splitting logic resulting in bad distribution and occassional empty unity files
  • Cache stats in -summary were not being displayed when in "writeonly" mode
  • Cache commit to existing entry no longer results in removal of entry
  • Allow concatenation of a String variable to an ArrayOfStrings variable instead of generating error 1034
  • Copy step outputs a line to the tty during build, consistent with other tasks
  • Copy outputs detailed information when -verbose is used
  • Copy outputs a failure message when copy fails
  • Fix progress calculation reaching 100% before completion
  • Fix small memory leak when generating unity files
  • Handle some highly unlikely cases of failing to set file time for cache retrieval
  • Empty arrays containing whitespace or comments are now handled correctly
v0.55 (5-Oct-2013)
Note
  • DB version has been increased; clean build will result after upgrading
Improvements
  • Language Syntax Enhancements
    • A new variable of type Struct can be defined, grouping other variables
    • Structures can be kept in Arrays and Arrays can be iterated over
    • A new Using function takes all the variables in a Struct and pushes them into the current scope
    • Add Print function to assist debugging configurations
    • Allow 0 size ForEach loops
    • Allow String to be concantenated to ArrayOfStrings
  • Build Functionality Enhancements
    • Add SNC compiler detection
    • Add Exec() function - calls an arbitrary executable to create a file
    • Test() function can use existing executable, as well as one built by FASTBuild
  • Static libs and DLLs automatically use precompiled header obj files
  • Errors are output contiguously, improving readability when there are multiple failed nodes
  • Improve thread number output when compiling with > 9 threads
  • Unity 'InputUnityExludePath' supports multiple exlude paths
  • More detailed errors when failing to write temp files
  • Linker failure message is imrproved (specifies Dll or Exe, rather than just "Linker")
  • Add wesbite and copyright info to "-version" output
  • Show total time taken by node type in -summary output
  • Various -summary formatting enhancements
  • Small performance improvement for processing very large objects
Fixes
  • DLL Fixes
    • DLLs comiled with MSVC correctly link export symbols
    • When linking a DLL, "DLL:" is shown in output instead of "Exe:"
    • Linking a DLL with another DLL deduces the import library automatically
    • Ensure DLLs are not rebuilt unnecessarily
  • GCC/SNC/PS3 Fixes
    • Fix broken PS3/SNC compilation (was reading stderr instead of stdout)
    • Standardize GCC and MSVC compiler detection (allow with and without .exe extension)
    • Fix detection of GCC compiler in PS3 SDK
    • Fix detection of C vs C++ for GCC/SNC when using the cache
  • Correct errors not being double-clickable in VisualStudio in some situations due to thread numbering
  • Ensure active job count doesn't underflow when performing local jobs
  • Correct formatting of cache path to stdout in -verbose mode
  • Correct error message when attempting to append String to incompatible type
  • Don't spin @ 0% when failing the build
  • Save completion of items which are succesful even after the build as a whole has failed
  • -summary formatting is no longer reliant on tab width
v0.54 (3-Jun-2013)
Note
  • DB version has been increased; clean build will result after upgrading
Improvements
  • Allow {} to be used alone to create a local scope (like a function)
  • Config files (bff) can now include other config files, e.g. #include "file.bff"
  • Direct variable assignment/concatenation now supported for variables (.X = .Y)
Fixes
  • Unity generation parameter UnityInputExcludedFiles is no longer sensitive to slash type used
  • Stop tasks sometimes being started after build is aborted with Ctrl+C
  • Fix typographical error in command line usage output
  • Fix hang at startup if database file (.fdb) has been corrupted
  • Fix corrupt "Unknown argument" error message when passed bad cmd line arguments
v0.53 (24-Feb-2013)
Note
  • The cache is invalidated due to path/version changes (no old entries will be used)
Improvements
  • Cache performance and space usage improvements
    • Cache directory hierarchy is simplified to reduce IO
    • Cache contents are compressed, saving ~50% of disk space
    • Compression yields speedups on IO bound (local or network) builds
  • Handle transient file opening failures due to other applications opening our files (Antivirus etc)
  • Add "Copy" function which can copy a file during the build
  • Library and CSAssembly 'CompilerInputPath' can now accept a list of paths (or a single path as before)
  • Optimize node lookups to reduce CPU usage
  • Hide distributed task counts on progress bar when not in distributed mode
Fixes
  • Correct misleading error when unexpected character follows a variable operator (was displaying #1016, now displays new #1017)
  • Correctly handle comments in the middle of variable assignments (e.g. ".Var // comment" or ".Var = // comment")
  • Comments are correctly parsed inside {} scopes when starting at column 0
  • Add missing type safety checks on various CSAssembly and Library properties
  • Unity files are forced to be regenerated when "-clean" option is used
  • Build no longer gets stuck upon cache hit when running with "-j0"
  • Temp directory now correctly initialized when running with "-j0"
v0.52 (18-Feb-2013)
Note
  • The build database (fdb) version has changed, a clean build will forced on first use of this version
Improvements
  • Unity 'UnityInputPath' can now accept a list of paths (or a single path as before)
Fixes
  • Fix crash emitting a large errors to the TTY (>64KB)
  • Detect non-unique Unity, Executable and DLL nodes (emit Error #1100)
  • Handle Unity output paths that are not \ terminated
v0.51 (17-Feb-2013)
New
  • Config file now supports // style line comments as well as ; style
  • Add checks and errors (#1302, #1303) for bad precompiled header setup for cl.exe
  • Config markup helpers for VisualStudio and NotePad++
Improvements
  • Improve precision of timer used to track task durations
Fixes
  • All object and pch files are deleted before compilation to ensure rebuild/no old files left behind
  • Fix bad string output in "Unknown build target" message in x64
  • Compiler executable (MSVC & GCC) detection is no longer case sensitive
  • Removed detection of lower-case /z7 is as using Z7 debug format for cl.exe. (Z7 debug format arg is uppercase, and cl.exe compiler options are case sensitive)
v0.50 (12-Feb-2013)
The first public release of FASTBuild, with stable support for:
  • Optimal multi-threaded compilation
  • Build caching (network and/or local)
  • Unity/Blob generation
  • Unit Test Integration