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
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: