Releases: markfinal/BuildAMation
v2.0.0
Highlights of v2.0.0
This is the first major upgrade to BuildAMation since the initial release.
New features
- Targets .NET Core 2.1.
- C#7 language usage.
- Completely rewritten package dependency evaluation in the Core assembly.
- NuGets can now be used by package scripts.
- Settings toolchain mapping simplified and moved to attribute markup.
- Package sources can be automatically downloaded.
- Separated the preprocessor tool from the compiler in the C package.
- API simplification and streamlining. (These are breaking changes to the APIs.)
- Xcode 10 and 11.
- Gcc 6, 7, 8, 9.
- VisualStudio 2019
- Documented everything.
- Revamped continuous integration with AppVeyor and TravisCI to massively improve coverage.
Known issues
v2.0.0 beta 3
Highlights of v2.0.0b3
This is the last planned beta of v2.0.0. It resolves all the issues found during the documentation pass in beta 2.
There are a number of breaking changes in this beta, which is unfortunate timing, but better to do before v2.0.0 is released.
Changes
Many of these are breaking changes.
- The signature to
Module.Init
no longer requires any arguments. Other mechanisms for discoveringModule
parentage now exists. - Removed
Bam.Core.ITool.CreateDefaultSettings<T>(Module)
with the getter propertyBam.Core.ITool.SettingsType
. This simplifies package code, and centralises the Settings object construction. Bam.Core.Module.InputModules
renamed toInputModulePaths
, and theKeyValuePair
argument replaced with a(Bam.Core.Module module, string pathKey)
tuple to simplify the API.- Virtual function
Bam.Core.Settings.AssignFileLayout()
has been removed. The propertyFileLayout
has been renamed toCommandLayout
, and the setter made private.Bam.Core.Settings
constructor now requires anELayout
value. This enforces the invariant nature of the layout, and eliminates one (virtual) function call perSettings
instance. - Initialisation of
Settings
interface properties simplified. Settings classes only require a default constructor now. RemovedInitializeAllInterfaces
method. AddedSetModuleAndDefaultPropertyValues
andAssignModule
methods toBase.Core.Settings
.
Interfaces that can be delta'd (e.g. compiler interfaces used in project generator build modes) no longer require anEmpty
extension method. Instead,Defaults
andClone
extension methods are responsible for initialising any reference properties before use. - Removed the
Bam.Core.Module
argument from the extension methodDefaults
for each settings interface. If theModule
is needed, then theModule
property on theSettings
itself can be queried. - VisualStudio projects are associated by module type, while VS project configurations are associated to a module. Reinforced this by changing
VSSolution.EnsureProjectExists
to take the module type (and build environment, needed for additional data) instead of the module itself. Assigning theVSProject
to aModule
'sMetaData
property is now the responsibility ofVSProject.GetConfiguration
. - Deprecated classes and functions that generate a
*Container
in favour of*Collection
. - Replaced
ReadOnlyCollections
with genericIEnumerable
where possible (avoids allocating a new object). - Removed
public
access modifier from classes in the standard packages folder. Since package scripts get accumulated into a single assembly at build time, the default access modifier (internal
) suffices. This does mean that end-user packages should no longer usepublic
access modifiers onModule
derivations, and just leave the default. - Updated various NuGet package versions.
And many more bug fixes. See 'Changelog.txt' for details.
Known issues
v2.0.0 beta 2
Highlights of v2.0.0b2
The effort in this beta was all to do with documentation. Can now build documentation for Bam, Bam.Core and all default packages without warning or error. Won't say it's complete documentation, but it's a start.
New features
- Added command line option
--includeallversions
, which modifies the behaviour of-p
/--createdebugproject
, to include all package versions. This project will not compile to an assembly, due to duplicate symbols, but is source browse-able.
Changes
- Fixed VisualStudio 2019 issues with powershell and telemetry.
Known issues
v2.0.0 beta 1
Highlights of v2.0.0b1
New features
- Added
Clang-Xcode11
package. (Currently tested against Xcode 11 beta.) - Added common boilerplate code as extension methods:
SetVisualCWarningLevel
SetClangWarningOptions
SetGccWarningOptions
SetMingwWarningOptions
FindSharedObjectsNextToExecutable
GccExportAllSymbols
ClangExportAllSymbols
MingwExportAllSymbols
To use, addusing <Toolchain>Common.Helpers;
to the top of your BAM script.
- Added CocoaTest2 test package.
Changes
- Hardened
TokenizedString
edge cases, including unit tests. C.PreprocessedFile
now performs evaluation similar to an object file.- Only specifying a major version in
SetSemanticVersion
is now supported. - Updated tests to use the following default toolchains:
Clang-Xcode10
(minimum version in Mojave)Gcc-7
(assuming default Ubuntu 18.04 LTS compiler; can be installed on CentOS7 with http://blog.stevedoria.net/20180214/how-to-install-gcc-7-on-centos-7)VisualC-15.0
(VisualStudio 2017 as a stable version, since 2019 has only recently been released)
- Converted all string formatting to C# string interpolation.
Known issues
v2.0.0 alpha 4
Highlights of v2.0.0a4
This is the last planned alpha of the BuildAMation v2.0.0 release.
New features
- 7Zip, InnoSetup and NSIS now use installations from NuGet packages, rather than assuming the development machine has them installed.
- Added command line option,
--mpd=<directory>
, to set the master package directory. This overrides the current working directory as BAM's choice of where the master package resides. - Debug project files for packages now also inherit the command line arguments used to create them. This avoids any ambiguity between running from the command line or debugging in an IDE.
- Added command line option,
--toplevelmodule=<name>
, which can be used to specify aModule
class that wasn'tsealed
as the top-levelModule
to build. - [VisualC] Added Link Time Code Generation support. No PGO yet.
- [Gcc] Added versions 6, 8 and 9 packages.
- [VisualC] Added
VisualC.MetaData.RuntimeLibrary
property, used to initialise the compiler setting. This can be overridden with aBam.Core.IPackageMetaDataConfigure
subclass. Also a command line switch,--VisualC.runtime
, is also provided, accepting eitherMD
,MDd
,MT
,MTd
, the usual designations for the runtime library.
Changes
- Zip module has been moved from Publisher to Installer package, to be in a consistent location with tar.
- The debug project entry point,
main.cs
, is no longer overwritten if it exists. - [Gcc & Clang] Now use
-isystem
and-iquote
instead of-I
to distinguish between system (angle bracket#include
) and non-system (quoted#include
) include search paths. - Many improvements to handling package repositories.
- Rewrote the package dependency evaluation.
Known issues
v2.0.0 alpha 3
Highlights of v2.0.0a3
This alpha release introduces VisualStudio 2019 support, and addresses some source archive download issues introduced in earlier alphas.
New features
- Added
VisualC-16
package for VisualStudio 2019 support. Extended AppVeyor CI to test VS2019.
Changes
Package
source archive downloads now only starts once aModule
in thatPackage
is used in the build. This does reduce the ability to concurrently download archives, but does mean builds only download the archives they need (some may only be required on certain platforms, for example).- Bam Core tar extraction support is now fully realised by the
SharpCompress
NuGet. All custom extraction code has been deleted from BuildAMation. - The following NuGets have been updated:
- GitInfo from 2.0.15 to 2.0.20
- Microsoft.NET.Test.Sdk from 15.8.0 to 16.0.1
- NUnit from 3.10.1 to 3.11.0
- NUnit3TestAdapter from 3.10.0 to 3.13.0
- Microsoft.Extensions.Configuration.EnvironmentVariables from 2.1.1 to 2.2.0
- Microsoft.Extensions.Configuration.Ini from 2.1.1 to 2.2.0
- SharpCompress from 0.22 to 0.23
- vswhere from 2.5.2 to 2.6.7
Known issues
Release v2.0.0 alpha 2
Highlights of v2.0.0a2
This alpha release addresses some bugs and adds several features. Most changes are a byproduct of the author working on Intel Thread Building Blocks build scripts in https://github.com/markfinal/bam-parallelism and SPIRV integration with BAM in https://github.com/markfinal/bam-graphicssdk.
New features
- Breaking Change The preprocessor has been split out of the compiler in the C package as a standalone tool, with its own settings interface. Each compiler still has the same settings properties available, as they now must implement the
C.ICommonPreprocessorSettings
interface. This does mean that existing patches that set preprocessor definitions or include search paths, for example, will need to be updated to use the preprocessor interface instead. Added a new test,PreprocessFile1
to exercise the preprocessor standalone. - Added
ClangCommon.ICommonLinkerSettings.ExportedSymbolList
to specify a file containing the exported symbols for a dylib on macOS. Other toolchains for Windows and Linux already have support for export definition files and version scripts, respectively. - Added TokenizedString function
@extension(path)
, that returns the extension of the file path, without a leading period.
Known issues
Release v2.0.0 alpha 1
Highlights of v2.0.0a1
This is a major rewrite/upgrade of the BuildAMation build system and project generator. There is no guarantee of backward compatibility with packages written against BAM v1.x.
It has the following high level changes:
- BAM is now a .NET Core 2.1 application
- Settings interface properties are now more elegantly converted through reflection, simplifying maintenance and creating new tools
- New compiler support
- Xcode 10
- Gcc 7
- and a new option to enable C++17 compilation, where supported
- Compiler warning suppression can now be delegated away from a module's build script, to keep build scripts clean from compiler specific details of warning free builds
- Compiler version comparisons are now precise, and can distinguish between VS2015 and all VS2017 revisions of the compiler.
- New TokenizedString expression functions
@isrelative
@tounix
@exists
- and new macros of the form
$(<name>.packagedir)
to get an arbitrary package's root directory.
- Packages can now provide URLs to zip/tar/tgz archives containing their C/C++ source, which are automatically downloaded and extracted as necessary.
See the BuildAMation blog for more in-depth details.
Known issues
Release v1.2.0
Highlights of v1.2.0
This release represents is a significant upgrade from the v1.1 family. Highlights are
- Upgrade of the
Bam.Core.TokenizedString
API. - Upgrade of the Publisher package, significantly to avoid duplication of dependents that had already been specified in the build scripts.
- VisualC packages now use
vswhere
andvcvarsall.bat
to detect install locations and environments, and also that for WindowsSDK. - Removed 'deferred' evaluation (figuring out dependencies on procedurally generated source), replacing it with an upgrade of the existing threading mechanism in
Bam.Core
. - Hardened thread safety in all build modes.
- Added unit tests.
- Many optimisations and bug fixes.
Note that many of the changes included in this release are breaking changes from v1.1 API. See the Changelog.txt
for more details.
Known issues
Release v1.2.0 alpha 5
Highlights of v1.2.0a5
This alpha release includes a few useful fixes, as well as some improved support work.
- Breaking change: for the Native build mode, procedural generation of source/headers used to follow a 'deferred evaluation' code path to detect updated source within the build. This has been removed, and now synchronises evaluation Tasks with any execution Tasks in multi-threaded modes, and are in lock-step in single-threaded mode (relying on the order in the dependency graph).
- Added
C.ExternalSourceGenerator
module, for executing any external command, with arbitrary inputs and outputs, ideally mapping to source generators. Added two examples to execute Python scripts to illustrate. - Added
VisualCCommon.ICommonCompilerSettings.IncreaseObjectFileSectionCount
(bool) property to enable the use of '-bigobj' for those compilations requiring more sections in an object file. - The
vswhere
NuGet is now shipped as part of the package. The use of this was introduced in alpha 3. - A PowerShell script is now provided to create a shortcut to
env.bat
, to keep a cmd prompt open but BAM pathed in. - Executing
bam --version
will now display the git hash information of the checkout, or a tag if a release. - All packages and tests have been updated to work on bam installation paths containing a space.