| /* --COPYRIGHT--,EPL |
| * Copyright (c) 2008 Texas Instruments and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Texas Instruments - initial implementation |
| * |
| * --/COPYRIGHT--*/ |
| /*! |
| * ======== ITargetFilter ======== |
| * User-supplied filter of a target's command set |
| * |
| * This interface defines a set of user-supplied methods that are invoked |
| * during the Build Model's makefile generation process. These methods |
| * can augment or modify the commands that are placed in the generated |
| * makefiles. For example, an `ITargetFilter` module can add pre or post |
| * build steps for virtually any generated file. |
| * |
| * Filters can: |
| * @p(nlist) |
| * - modify or augment the commands returned by a target's compile, |
| * link and archive methods via `{@link #compile}`, `{@link #link}`, |
| * and `{@link #archive}`; |
| * - add new definitions to the generated makefiles usable by the |
| * command added above via `{@link #getDefs}`; and |
| * - specify new files to be generated during the configuration process |
| * that may be used during or after the link process via |
| * `{@link #getGenTab}`. |
| * @p |
| * Filters are created implicitly when a target's profile |
| * (`{@link xdc.bld.ITarget#profiles}`) that references the filter is used. |
| * To use a filter, one must configure a profile's option set |
| * (`{@link xdc.bld.ITarget#OptionSet}`) in the build configuration script |
| * `config.bld`. It is possible to add filters to existing profiles (such |
| * as `"debug"` and `"release"`) or to create entirely new profiles that |
| * utilize the filters. |
| * |
| * When modifying existing profiles, no changes to individual packages using |
| * these profiles is required; one simply has to clean and rebuild these |
| * packages for the filters to have an effect. |
| * |
| * By adding new profiles, one can ensure that existing build artifacts are |
| * unchanged and only those packages that want to take advantage of a filter |
| * can do so easily by adding a new build artifact that uses the new |
| * profile; for example, see `{@link xdc.bld.Library#Attrs}`. |
| */ |
| metaonly interface ITargetFilter |
| { |
| /*! |
| * ======== InstDesc ======== |
| * `ITargetFilter` Instance descriptor |
| * |
| * This structure provides the information necessary to create an |
| * instance of an `ITargetFilter`. |
| * |
| * @see xdc.bld.ITarget#OptionSet |
| */ |
| struct InstDesc { |
| String moduleName; /*! name of a module implementing `ITargetFilter`*/ |
| Any params; /*! params passed to ITargetFilter.create() */ |
| }; |
| |
| /*! |
| * ======== GenDesc ======== |
| * Configuration file generation descriptor |
| * |
| * This structure is used to specify a new file to be generated during |
| * the configuration process. |
| * |
| * Templates are expanded in the context of the Configuration domain; |
| * as a result, the contents of the generated file can be a function |
| * of an executable's `{@link xdc.cfg.Program}` object. Template names |
| * are interpreted using the `xdc.findFile()` method to |
| * locate the template file name. Templates can, therefore, be |
| * contained in any package located along the package path. |
| * |
| * Names of files to be generated are always interpreted relative to |
| * the base directory of the package for which makefiles are being |
| * generated. |
| * |
| * @see #getGenTab |
| */ |
| struct GenDesc { |
| String template; /*! name of the template to expand */ |
| String file; /*! the name of the file to generate */ |
| }; |
| |
| /*! |
| * ======== MacroDesc ======== |
| * Macro definition descriptor |
| * |
| * This structure is used to specify macro name-value pairs that are |
| * added to the generated makefiles. These names can be used |
| * by commands added via the filter's `{@link #archive()}`, |
| * `{@link #compile()}`, or `{@link #link()}` methods. |
| * |
| * Using symbolic values in lieu of embeddeding explicit paths or values |
| * enables the end-user to re-define these values without requiring |
| * regeneration of makefiles. |
| * |
| * @see #getDefs |
| */ |
| struct MacroDesc { |
| String name; /*! name of the macro */ |
| String value; /*! the name value of the macro name */ |
| }; |
| |
| instance: |
| |
| /*! |
| * ======== archive ======== |
| * Archive command filter |
| * |
| * This method is called for every archive created by the package's |
| * build script (via `{@link xdc.bld.PackageContents#addLibrary()}`). |
| * |
| * @param(container) String |
| * @param(lib) `{@link xdc.bld.Library}` |
| * @param(objList) String |
| * @param(archArgs) `{@link xdc.bld.ITarget#ArchiveGoal}` |
| * @param(result) `{@link xdc.bld.ITarget#CommandSet}` |
| */ |
| function archive(container, lib, objList, archArgs, result); |
| |
| /*! |
| * ======== compile ======== |
| * Compile command filter |
| * |
| * This method is called for every object created by the package's |
| * build script (via `{@link xdc.bld.Executable#addObjects()}`, |
| * `{@link xdc.bld.Library#addObjects()}`, ...). |
| * |
| * @param(container) String |
| * @param(target) `{@link xdc.bld.ITarget}.Module` |
| * @param(goal) String goal file |
| * @param(compArgs) `{@link xdc.bld.ITarget#CompileGoal}` the file to |
| * compile |
| * @param(result) `{@link xdc.bld.ITarget#CommandSet}` |
| */ |
| function compile(container, target, goal, compArgs, result); |
| |
| /*! |
| * ======== getGenTab ======== |
| * Get table of files to be generated during configuration |
| * |
| * This method is called during makefile generation to obtain |
| * a list of additional files to be generated during configuration. |
| * |
| * @param(acfg) `{@link xdc.bld.Configuration}` or Assembly |
| * @param(cfgDir) String directory name where generated config files |
| * are placed |
| * @param(configName) String base name of the configuration |
| * @a(RETURNS) array of `{@link #GenDesc}` |
| */ |
| function getGenTab(acfg, cfgDir, configName); |
| |
| /*! |
| * ======== getDefs ======== |
| * Get table of macro definitions |
| * |
| * This method is called during makefile generation to obtain |
| * a list of macro definitions that are to be added to the |
| * generated makefile. These macros can then be referenced by |
| * commands added via a filter function (`{@link #archive()}`, |
| * `{@link #compile()}` or `{@link #link()}`). |
| * |
| * @a(RETURNS) array of `{@link #MacroDesc}` |
| */ |
| function getDefs(); |
| |
| /*! |
| * ======== link ======== |
| * Link command filter |
| * |
| * This method is called for every executable created by the package's |
| * build script (via `{@link xdc.bld.PackageContents#addExecutable()}`, |
| * ...). |
| * |
| * @param(container) String |
| * @param(cfgbase) String |
| * @param(prog) Executable or Assembly |
| * @param(objList) String |
| * @param(linkArgs) `{@link xdc.bld.ITarget#LinkGoal}` |
| * @param(result) `{@link xdc.bld.ITarget#CommandSet}` |
| */ |
| function link(container, cfgBase, prog, objList, linkArgs, result); |
| } |