- Fix caching bug introduced in 0.12.3.
- Report compiler warnings (as
warnlevel log messages).
- Add
link-commandstoModule, similar tocompile-commands.
- Rename
src/module.ergoto not clash withsrc/Module.ergoon case-insensitive filesystems. - Add
@rpathto theinstall_nameused in mac shared libraries.
- Update to ergo-1.0.0rc.4.
- Completely refactor the organization of modules and how they are evaluated.
- Module creation (
module,compiled-module,exe,dynamic-library,static-library), helpers (all-files,header-paths,exact-name), and toolchains (toolchain,env-toolchain) all have the same API as before. ModuleandLink(previouslyModuleLink) are now directly exposed (no longer undertype), are specified more thoroughly, and have associated functions in each type index.contextis applied withbind-contextto prevent mistakes.Modules no longer flatten the dependency hierarchy.
- Module creation (
- Break up the one big implementation file for better maintenance.
- Fix a bug in header tracking (when
include-dependenciesisrelaxed).
- Fix the propagation of direct runtime dependencies through static libraries.
- Ensure detection works with both newer libstdc++ headers and older ones.
- The fix from 0.11.13 doesn't seem to work with older versions for some reason.
- Fix an incompatibility with newer libstdc++ headers in compiler detection.
- Fix a bug introduced in 0.11.11 which caused modules to recompile files if they depended upon a module which had to recompile a file.
- Properly unique the runtime files in
exec-output. - Fix a bug in file dependency tracking: when
include-dependenciesisaccurate(the default), if an dependent header path changed, the file dependencies were not recomputed.
- Change header dependency checks to be run as tasks (mainly to limit concurrency, but also to illuminate what's going on to users).
- Don't run header dependency checks on headers themselves when
include-dependenciesisaccurate(the default), as it is unnecessary in that case: that information is only used to reconstruct missing dependencies, which only happens inrelaxedmode. - XXX: Since 0.11.7, public/private header dependency checking has been broken (since it relied on headers not resolving). In general the dependency checking should be refactored to make it more consistent and enable better features.
- Use
LD_LIBRARY_PATHrather thanLD_PRELOADforexec-outputon linux, as this interacts better with llvm-symbolizer (used by sanitizers).- Previously we favored
LD_PRELOADbecause it avoids caring about file SONAMEs, but we've long had the runtime (e.g. abi symlinks) as part of the files so it shouldn't be an issue.
- Previously we favored
- Add a
runtime-directfield to linked modules to indicate the direct runtime dependencies (excluding secondary dependencies).
- Properly set the
runtime-if-usedfield forcompiled-modules based on the link arguments. - Use the full includes when determining header dependencies.
- In general this will behave better for weird header shenanigans, at the cost of possibly forcing dependent headers to be evaluated and accessible.
- Add an
include-dependenciesoption which can be used to revert behavior to the old method.
- Correctly handle windows env variable path separators.
- Revert the 0.11.4 change as it causes unacceptable quadratic memory behavior which is detrimental in large projects with a lot of nesting.
- Add a
library-pathsoptional argument totoolchainto ensure toolchains that require library paths in the environment are accounted for. - Add a
tool-exec-envmap and anexecfunction to the value returned fromtoolchainto make executing toolchain binaries less error-prone.
- Don't deduplicate module
header-dirsfields to allow consumers to use these to convey disparate metadata for the same root header directory.
- Correctly categorize
env-toolchainin documentation (to prevent it from being evaluated prematurely among other things), and allow strings to be passed astoolchainoverrides (which was the intention based on documentation but was not realized in the types provided). - Ensure a leading
.is removed in header-deps include paths.
- Pretty-print
compile_commands.json.
- Always include
-fPICby default.- This is less surprising when it comes to linking and also allows for more sharing of cached object files.
- Fix a caching bug resulting from the cached file dependency results being misidentified.
- Update scripts for ergo-1.0.0rc.1.
- Improve correctness/safety of configuration-based caching.
- Improve the behavior of header dependency checking when the compiler fails.
- Failures are inevitably due to preprocessor behavior which is difficult to account for, so reduce the errors to warnings (for header files).
- Change the produced
implfield of modules to belink, and change it to be an array oftype:ModuleLinktypes. - Add a
module-linksubmodule with basic functions to extract values from thelinkfield. - Add
type:ModuleLinkto distinguish linked value types. - Fix dependency visibility errors being propagated (when checking header dependencies).
- Use correct toolchain identity when changing toolchain flags from function arguments.
- Any use of
c++:compiled-modulewill need to update thelinkfield to haveModuleLink-typed values. - Any use of
c++:get-outputwill need to access thelinkfield rather than theimplfield (and access the inner values appropriately withc++:module-linkfunctions).
- Fix a bug in static library creation.
- Change compilation of
.cfiles to use the C compiler.c-compile-flagsis used to distinguish from C++ compile flags.
- Fix a bug in the detection of private includes used in public headers.
- Fix a bug in file dependency calculation.
- Fix a bug in
exact-namebehavior.
- Fix a bug in nested module change tracking.
- Changes to nested module files would be missed in subsequent builds.
- Improve concurrent behavior of configuration-based caching.
- There is a race condition that would cause an error to occur. In lieu of additional features/support from the standard library, we avoid the error but possibly do extra work.
- Change shallow copies of header files to be symlinks.
- These behave better with CI caching.
- Fix header tracking! It was broken since the update to ergo rc.0, as the semantics around evaluation were being relied upon for correct caching.
- Use shallow copies for header files so
#pragma onceand editors can find the original files. - Drastically improve performance of builds with nested modules with a little extra caching.
- Change toolchain to allow arbitrary tool names.
- Optimize header dependency tracking with additional caching.
- Fix toolchain default behavior (a bug was making it default to Unset).
- Fix bug in
header-pathspreventingallfrom working as intended.
- Updated to support ergo-1.0.0-rc.0.
- Expose the
contextvalue to retrieve the current compilation context.
- Change
options:file-content-cacheto instead beoptions:cache-policy, with options ofconfigurationandcontent. - Change modules to store arbitrary values rather than a function that takes the
context. This changes the paradigm of creating modules to one where a user
writes expressions (that optionally use
context) which evaluate to aModuletype, doing any necessary value- or context-dependent work prior to creating theModule. compile-flagsandlink-flagsarguments now are just arrays; if the context is needed, usecontext.- Change
env-toolchainto be a value rather than a function.
- Fix a bug with symbolic link creation.
- Correct
static-library-nameto return a name with alibprefix for linux/mac.
- Improve behavior of compile-flags/link-flags.
- Compile-flags for a linked output are inherited only by modules that linked output uses. Link-flags are not inherited at all.
- Add
abi-versionoption todynamic-library, supporting OS conventions for abi versioning. - Fix
exec-outputon mac when runtime libraries are needed.
- Add
compile-commandsto write acompile_commands.jsonfile from outputs. - Change caching to (by default) only depend on compile flags. Add the
optionsmap toget-outputsconfiguration, which has afile-content-cachekey which may be specified to cache based on file content as well (as it used to). - Allow
usesto be distinguished as public/private/export.- If a private include is exposed in a public header, an error will occur.
- Add
compiled-modulefunction for creating modules from pre-compiled outputs. - Move
exe:exectoexec-output, and improve behavior by using the host os and preloading libraries when possible, rather than specifying a library load path. This avoids issues with SONAME file lookup.
- A
usesthat's just an array will be interpreted as private visibility, whereas in the past it behaved as if it were public visibility. exe:execno longer works;exec-outputshould be used instead.
- Update to ergo beta.9.
- Improve type checking and performance using new ergo standard library functions.
- Add
object-dumpto the toolchain definition. - Fix the detection of c++ library and c++ abi.
- C++ library wasn't always working (depending on cassert include).
- C++ abi was getting false positives, so the detection file has been improved to only use the c preprocessor (which we didn't realize was possible before).
- Fix naming of outputs.
exact-namedetection was incorrect.
- Correctly track headers in
header-dirsoutput for each module.- Previously there was a bug where, if a header was changed, it did not consider it different and did not generate a new header directory.
- Add
c-compilerandc-compile-flagsto the toolchain in support of building external libraries. - Add
exact-nameto be able to indicate that a target's conventions shouldn't be applied to the name of a file.- This is more for nice bookkeeping, since you can still always rename the file when copying it.
- Allow
compilerandarchiverto be specified as paths to binaries
- Use
#include <cassert>rather than c++20's#include <version>in stdlib detection. - Fix
static-libraryfunctionality.
- Add C++ library and ABI detection keys to the toolchain target map
- Fix linker errors on macOS, which groups everything by default
- Fix deduplication function that broke with syntax changes in ergo 8.
- Deduplicate runtime and impl lists in modules.
- Simplify
headersandfilesdefinitions. Remove support forautofor both, as well as formodule. - Add
all-filesandheader-pathsto replace functionality previously built-in tomodule.
- Allow headers to be plain strings (to be interpreted as relative paths).
- Toolchains to be used are now parameterized.
- Use
toolchainto create a toolchain from a configuration, and pass it intoget-output. - The previous
targetfunctions are now in the produced toolchain.
- Use
- Add
env-toolchainto get a toolchain based on the environment. - Update to ergo beta.8.
- Use a
Moduletype for c++ modules. - Allow paths in
filesandheadersto be relative. Do not require specifying the relative directory (it will default to the executing script's directory), though it can be set with the non-positional argumentrelative-dirto themodulefunction.
- Fix bug with compiler invocation for header tracking.
- The invocation did not pass the PATH environment variable, which breaks e.g. ccache.
- Improve task behavior (ergo >= beta.6).
- Add a preprocessor value (
ERGO_CPP_HEADER_DEPENDS) when checking header dependencies.- This allows code to avoid problematic preprocessor directives.
- Change functions to take named arguments.
- Support setting cflags directly on modules.
- Fix bug with file names and
target-os.
- Fix export bug for naming functions.
- Update for ergo 1.0.0-beta.4.
- With new features from the latest ergo, add header tracking.
- Support header layout descriptions.
- Support ccache and fix the invocation to detect the target os.
- Improve how runtime file dependencies are linked.
- Expose some of the internally-derived values like target-os and the name conventions.
- Update for ergo 1.0.0-beta.2.
- Change
contextfunction toapply-context.
- Initial release of the module.