Package: helix
HELIXA source code mutation/transformation framework.DescriptionHELIX defines three major primitives:BlueprintsCore project layouts including templated boilerplate and methods for generating
and building artifacts from a set of Components and Transforms.ComponentsSmall, configurable pieces of source code that represent a specific
implementation of a specific functionality along with associated metadata.TransformsModifications of either source code or a built artifact along with associated
metadata.Blueprints are configured with a collection of Components to include and
Transforms to apply and then built to generate build artifacts.InstallationInstall HELIX from PyPI with pip, run:pipinstallhelixDependenciesSome Blueprints, Components, and Transforms include additional, non-python
dependencies that must be installed separately. These can be installed
automatically (if supported) with theinstallcommand. For example, to
install dependencies for theupxTransform, run:helixinstalltransformsupxTo install all dependencies for all installed Blueprints, Components, and
Transforms, run:helixinstallNote: some Blueprints, Components, and Transforms include dependencies which
must be manually installed. Using theinstallcommand for these will instead
list the dependencies that must be installed manually.UsageTo list currently installed parts of HELIX:helixlistTo generate a single build, use thebuildcommand. For example, to generate a
build using thecmake-cppblueprint, with theconfiguration-examplecomponent (setting thesecond_wordparameter tofoo), and apply thestriptransform (on supported platforms), writing output files to./example:helixbuildblueprintcmake-cpp./example\-cconfiguration-example:second_word=foo\-tstripThebuildcommand also supports loading a configuration from a JSON file and
HELIX is fairly scriptable. See theexamples/directory or take a look at the
full documentation for more.ContributingHELIX is designed to be easily extensible viaentry
points.
Blueprints, Components, and Transforms simply need to conform to their
respective abstract base classes and be exposed under their respective entry
point (see the Getting Started section of the documentation for more details
and a tutorial). External Blueprints, Components, and Transforms that are
correctly exposed are usable in all normal HELIX commands.DevelopmentTo set up a development environment, first clone this repo. Next, it is useful
to install HELIX in editable mode with extras for development and testing:pipinstall-e.[development,testing]When developing new components it can be helpful to use HELIX'sbuildcommand
in verbose mode so that you can see compiler and linker output and correct any
errors you may encounter:helixbuildblueprintcmake-cppnovel-component-cnovel-component-vDocumentationTo build the full HELIX documentation, after installing HELIX withdevelopmentextras enabled, from thedocs/directory, run:makehtmlOr othersupported Sphinx output
formats.TestingYou can expose tests for your Components and Transforms by adding a subclass ofhelix.tests.UnitTestCaseto the entrypointhelix.tests. Some useful testing
mixins are provided inhelix/tests.pyand for some examples see the tests
referenced insetup.py.To test the HELIX interfaces and utilities, run:helixtestsystemTo test Components, Blueprints, and Transforms, run:helixtestunitDisclaimerDISTRIBUTION STATEMENT A. Approved for public release: distribution unlimited.© 2021 Massachusetts Institute of TechnologySubject to FAR 52.227-11 – Patent Rights – Ownership by the Contractor (May 2014)SPDX-License-Identifier: MITThis material is based upon work supported by the Department of Defense under
Air Force Contract No. FA8721-05-C-0002 and/or FA8702-15-D-0001. Any opinions,
findings, conclusions or recommendations expressed in this material are those
of the author(s) and do not necessarily reflect the views of the Department of
Defense.MIT License