Skip to content
This repository has been archived by the owner on Aug 11, 2021. It is now read-only.

Releases: markfinal/BuildAMation

v2.0.0

09 Sep 18:05
Compare
Choose a tag to compare

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.

All changes since v1.2.0

Known issues

Bug list

v2.0.0 beta 3

06 Sep 14:21
Compare
Choose a tag to compare
v2.0.0 beta 3 Pre-release
Pre-release

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 discovering Module parentage now exists.
  • Removed Bam.Core.ITool.CreateDefaultSettings<T>(Module) with the getter property Bam.Core.ITool.SettingsType. This simplifies package code, and centralises the Settings object construction.
  • Bam.Core.Module.InputModules renamed to InputModulePaths, and the KeyValuePair 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 property FileLayout has been renamed to CommandLayout, and the setter made private. Bam.Core.Settings constructor now requires an ELayout value. This enforces the invariant nature of the layout, and eliminates one (virtual) function call per Settings instance.
  • Initialisation of Settings interface properties simplified. Settings classes only require a default constructor now. Removed InitializeAllInterfaces method. Added SetModuleAndDefaultPropertyValues and AssignModule methods to Base.Core.Settings.
    Interfaces that can be delta'd (e.g. compiler interfaces used in project generator build modes) no longer require an Empty extension method. Instead, Defaults and Clone extension methods are responsible for initialising any reference properties before use.
  • Removed the Bam.Core.Module argument from the extension method Defaults for each settings interface. If the Module is needed, then the Module property on the Settings 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 the VSProject to a Module's MetaData property is now the responsibility of VSProject.GetConfiguration.
  • Deprecated classes and functions that generate a *Container in favour of *Collection.
  • Replaced ReadOnlyCollections with generic IEnumerable 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 use public access modifiers on Module derivations, and just leave the default.
  • Updated various NuGet package versions.

And many more bug fixes. See 'Changelog.txt' for details.

All changes since v2.0.0b2

Known issues

Bug list

v2.0.0 beta 2

12 Aug 17:44
Compare
Choose a tag to compare
v2.0.0 beta 2 Pre-release
Pre-release

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.

All changes since v2.0.0b1

Known issues

Bug list

v2.0.0 beta 1

15 Jul 18:22
Compare
Choose a tag to compare
v2.0.0 beta 1 Pre-release
Pre-release

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, add using <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:
  • Converted all string formatting to C# string interpolation.

All changes since v2.0.0a4

Known issues

Bug list

v2.0.0 alpha 4

05 Jul 13:25
a154267
Compare
Choose a tag to compare
v2.0.0 alpha 4 Pre-release
Pre-release

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 a Module class that wasn't sealed as the top-level Module 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 a Bam.Core.IPackageMetaDataConfigure subclass. Also a command line switch, --VisualC.runtime, is also provided, accepting either MD, 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.

All changes since v2.0.0a3

Known issues

Bug list

v2.0.0 alpha 3

07 Apr 12:38
Compare
Choose a tag to compare
v2.0.0 alpha 3 Pre-release
Pre-release

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 a Module in that Package 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

Full changes since v2.0.0a2

Known issues

Bug list

Release v2.0.0 alpha 2

31 Dec 08:02
Compare
Choose a tag to compare
Pre-release

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.

Full changes since v2.0.0a1

Known issues

Bug list

Release v2.0.0 alpha 1

22 Nov 20:42
Compare
Choose a tag to compare
Pre-release

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.

Full changes since v1.2.0

Known issues

Bug list

Release v1.2.0

27 Jul 20:34
Compare
Choose a tag to compare

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 and vcvarsall.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.

Full changes since v1.1.7

Known issues

Bug list

Release v1.2.0 alpha 5

28 Jun 17:57
Compare
Choose a tag to compare
Pre-release

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.

Full changes since v1.2.0a4

Known issues

Bug list