<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->

<html>
<body>

This package contains interfaces related to <i>targets</i>.

<p>
A project can create multiple <i>targets</i> to build multiple
SWF and/or SWC files.
Each target drives one or more (but not necessarily all) of the
project's compilation units through their compilation phases,
and assembles the resulting ABC or SWF tags into a SWF or SWC.
See the <code>org.apache.royale.compiler.units</code> package
for more information about compilation units.
</p>

<p>
Some configuration options become project settings, while others
become target settings.
For example, the source path and library path are project settings,
but whether a particular SWC is to be linked internally or externally
(that is, whether is "on the external library path") is a target setting.
</p>

<p>
The base interface for all targets is <code>ITarget</code>.
There are two different kinds of external targets, each with its own subinterface:
</p>

<table border="1" cellspacing="0" cellpadding="3">
	<tr>
		<td><code>ISWFTarget</code></td>
		<td>Builds a SWF file from a set of compilation units.</td>
	</tr>
	<tr>
		<td><code>ISWCTarget</code></td>
		<td>Builds a SWC file from a set of compilation units.</td>
	</tr>
	<tr>
</table>

</body>
</html>
