Age | Commit message (Collapse) | Author |
|
|
|
|
|
The "library" and "binary" rules are modified to generate, if
needed, the appropriate DWARF package from the DWARF objects of
their compilation units and the DWARF package files of their link
dependencies, if any. The resulting artifact is made available to
consumers in the provides map.
|
|
|
|
Allow the expressions running the actions producing the library and
binary artifacts to pass along more information to consumers if
needed by extending their return values to maps. Ensure the changes
do not affect other consumers of the current expressions, such as
the test rules, which do not expect extra information besides the
single action artifact.
|
|
As the command passed to the linter can produce additional outputs
if debug fission is enabled, pass those artifact paths in a new
variable "extra outs", which the ["lint", "targets"] rule can then
make it available in the meta.json file expected by the linter.
|
|
For this purpose, the DEBUG configuration variable is updated to
expect a map with at least the USE_DEBUG_FISSION flag field. If
set, compilation of source files is expected to produce besides the
regular object file also a DWARF file.
|
|
It expects now the key 'USE_DEBUG_FISSION', which enables debug
fission, but does not add any flags on its own. For this, the
'FISSION_CONFIG' key is expected with certain entries that provide
the compile and/or link flags that configure debug fission.
The flags are added only where needed, i.e., before running or
storing the respective compile or link actions.
|
|
...if no flags are otherwise configured (by toolchain or
rule-specific configuration variables).
|
|
|
|
|
|
...and unset TOOLCHAIN and TOOLCHAIN_DIR.
|
|
... which is configured using a new defaults field
"include_scanner", a tool (script/binary) that generates
a new include tree without unused headers. Example
implementations are provided.
|
|
|
|
... instead of composing a shell command doing a cd first.
|
|
... by honoring "modified-transitions" when determining the headers
of the direct dependencies.
|
|
|
|
|
|
dependencies
|
|
|
|
dependencies
|
|
When a shared library is built that depends on other shared libraries, it
instructs its consumers via the "run-link-args" to link only against this
library and not also against its dependencies.
|
|
When a shared library has static-library dependencies, it is linked against
these static libraries including all their link arguments. Thus, the
"link-deps" as well as the "link-args" provider of the shared library should be
empty.
|
|
... provided the configuration variable "LINT" is set.
|
|
|
|
While there, also properly transition "srcs" and "private-hdrs"
to the host version.
|
|
|
|
If the configuration variable "LINT" is set, also provide information
on compile actions and header files (with preprocessing as described
command, in particular also providing the correct flags) in correct
dependency context. In this way, lint rules can request the needed
information for performing their checks.
|
|
... for certain fields, in particular, the "components".
|
|
... however not their runfiles, as those become the runfiles
of the resulting library.
|
|
|
|
... instead of hard-coding ["cqs"].
|
|
|
|
... to avoid staging conflicts with the toolchain
|
|
In this action we support a user provided toolchain, hence all the
components of the library need to go into a subdirectory to avoid
staiging conflicts.
|
|
... i.e., dependencies that are to be included into the library
itself. In this way, a large library (convenient for a user to have
single library to care about) can be defined as a collection of
smaller libraries.
Technically, components are like public dependencies on libraries
transitioned to object libraries with the following differences
- the header files (i.e., runfiles) of the components become header
files of the resulting libary, and
- the objects (i.e., artifacts) of the components become objects
of the library rather than link dependencies.
To achive the transfer of the object to the requesting library,
an object library can be instructed to drop the objects from the
link arguments; in order to continue to support tranditional object
libraries in the style of, e.g., cmake, this is done by a different
configuration variable that is transitioned as well. In particular,
the object-library test case (using a configure target) can be
left unchanged.
|
|
... instead of a property of the library itself. An object library is
not a meaningful concept in itself; it only exists, because a consumer
wants to link the library in its entirety. But consumer-specified
properties should be propagated through configuration transitions
and the definition of the library should not care about how it is
consumed; this is also the approach we follow with respect to building
a library position independent. As oposed to position-independent
building, however, the property of being included unconditionally
is not propagated transitively.
|
|
|
|
|
|
For libraries the headers of private dependencies were wrongly
skipped from staging. For binaries, no headers were passed at all
in the provides map. To fix these issues, an additional field is
added in the provides map to ensure we collect, and then properly
stage, all needed headers for both libraries and binaries.
|
|
This is useful when we want to install targets built in debug mode,
but do not want to stage all the additional source and header files
if no debugging is being performed, e.g., in tests.
|
|
For libraries the headers of private dependencies were wrongly
skipped from staging. For binaries, no headers were passed at all
in the provides map. To fix these issues, an additional field is
added in the provides map to ensure we collect, and then properly
stage, all needed headers for both libraries and binaries.
|
|
This is useful when we want to install targets built in debug mode,
but do not want to stage all the additional source and header files
if no debugging is being performed, e.g., in tests.
|
|
|
|
... instead of defaulting to "". In this way, an empty default target can
be used as toolchain defaults for systems with default names.
|
|
|
|
|
|
The existing rule is extended to also stage source files if in
debug mode, in order for a debugger to be able to find all needed
symbols. Conflicting paths are allowed; in case of conflicts, the
file from the closest target in the dependency chain wins.
|
|
|
|
|