Commit Graph

1784 Commits

Author SHA1 Message Date
Connor Wakamo
f892b1a544 [driver] Implemented support for adding an additional output for a swiftmodule to the CommandOutput of frontend Commands.
Adjusted Driver::buildJobs() and Driver::buildJobsForAction() to include a const OutputMode& parameter.
Updated Driver::buildJobsForAction() to set an additional swiftmodule output on Jobs generated from a CompileJobAction if the OutputMode says the driver should generate a module.
This change now causes frontend invocations to pass “-emit-module -module-output-path <path>” when a module is requested, though the partial modules are not yet properly merged.

Swift SVN r12495
2014-01-17 19:39:22 +00:00
Connor Wakamo
b94e9e3f76 [driver] Slightly refactored Driver’s handling of OutputMode.
Instead of having buildActions() call the private Driver::getOutputMode() function, establish an OutputMode using a new Driver::buildOutputMode() function.
This change will allow the OutputMode to be more easily shared across functions without needing to generate it each time (though, at the moment, only buildActions() uses the OutputMode).

Swift SVN r12494
2014-01-17 19:39:22 +00:00
Connor Wakamo
10810970b7 [driver] Added support for passing -emit-module to the frontend.
If the Swift tool is told to generate a command which produces a swiftmodule
additional output, pass -emit-module and -module-output-path. (Note that nothing
sets up this additional output yet; support for that is forthcoming.)

Swift SVN r12493
2014-01-17 19:39:21 +00:00
Connor Wakamo
e9599f249d [driver] Added support for adding a MergeModuleJobAction to the Action graph.
Updated Driver::OutputMode to also contain a ShouldGenerateModule field.
Updated Driver::getOutputMode() to set OutputMode::ShouldGenerateModule appropriately.
Updated Driver::buildActions() to insert a MergeModuleJobAction into the Action graph if the Driver’s OutputMode indicates that a module should be generated.

Swift SVN r12492
2014-01-17 19:39:21 +00:00
Connor Wakamo
c4a4ab3596 [driver] Added initial infrastructure for generating a Command which merges swiftmodule files.
Added a MergeModuleJobAction, which will be translated into a Command which merges swiftmodule files.
Added a MergeModule subclass of Tool, which will generate a Command which merges swiftmodule files. (Currently, it generates a Command which invokes “swift_driver -frontend -help”.)
Added ToolChain-level support for getting the MergeModule Tool.

Nothing produces MergeModuleJobActions yet; adding that to the Action dependency graph should be enough to get this going.

Swift SVN r12491
2014-01-17 19:39:20 +00:00
Connor Wakamo
824c0cb126 [driver] Reworked the CommandOutput class to add support for specifying additional outputs.
This will allow the driver to specify the location for, among other things, the partial swiftmodule generated by a single frontend invocation.

Swift SVN r12449
2014-01-17 01:11:55 +00:00
Connor Wakamo
097f0e6a65 [driver] Updated Compilation::performJobsInList() to properly handle Commands which depend on peers.
Across recursive calls to performJobsInList(), keep track of ScheduledCommands
and FinishedCommands, so we can do the following:

  - Don’t schedule a Command which is already scheduled (since it may be
    scheduled as a peer before we try to schedule it as an input).
  - Don’t schedule a Command whose inputs have not all finished.

Swift SVN r12444
2014-01-17 00:47:21 +00:00
Connor Wakamo
40b38c40b2 [driver] Reworked Driver::buildJobsForAction() so that it doesn’t create the same Job multiple times.
Since a Job may be reached through multiple paths in the dependency graph, we
need to include support for caching Jobs. (Currently, the cache maps
Action/ToolChain pairs to Jobs.)

As a result of these changes, Tool::constructJob() and
Driver::buildJobsForAction() return a plain Job *, instead of a
std::unique_ptr<Job>, since the Jobs returned by buildJobsForAction() no longer
need to be unique.

Swift SVN r12443
2014-01-17 00:47:21 +00:00
Connor Wakamo
31df3cb241 [driver] Updated Driver::printJobs() to only print each Job once, even though it may be in the graph multiple times (as input to multiple Jobs).
Swift SVN r12442
2014-01-17 00:47:20 +00:00
Connor Wakamo
3df87a6c8c Revert "[driver] Added an assertion to Driver::buildJobsForAction() to ensure that it only builds Jobs for JobActions."
This reverts r12433.

Swift SVN r12436
2014-01-17 00:01:05 +00:00
Connor Wakamo
3bcad8fef0 [driver] Added an assertion to Driver::buildJobsForAction() to ensure that it only builds Jobs for JobActions.
Swift SVN r12433
2014-01-16 23:42:54 +00:00
Connor Wakamo
d5f95cd574 [driver] Add a new -driver-skip-execution flag.
This instructs the driver to skip task execution by using a DummyTaskQueue in Compilation::performJobsInList().
This option should generally only be used for testing, as DummyTaskQueue may provide fake buffered output.

Swift SVN r12350
2014-01-15 21:27:56 +00:00
Connor Wakamo
3f4a6efd44 [driver] Pass -serialize-diagnostics to the frontend, if requested.
Swift SVN r12252
2014-01-13 21:38:04 +00:00
Connor Wakamo
f0555a73a8 [driver] Add support for the -parse-sil option, including passing it through to the frontend.
Swift SVN r12175
2014-01-11 00:33:31 +00:00
Connor Wakamo
86fe23de29 [driver] Add support for passing -parse-as-library and -parse-stdlib to the frontend.
Swift SVN r12172
2014-01-11 00:33:29 +00:00
Connor Wakamo
ee7c66258a [driver] Add support for passing all inputs to the Swift frontend, selecting one per invocation with -primary-file.
Swift SVN r12151
2014-01-10 22:39:06 +00:00
Connor Wakamo
24fad265a2 [driver] Removed Job::run() and Job::needsToRun().
Both of these functions are now handled by Compilation.

Swift SVN r12061
2014-01-08 19:10:43 +00:00
Connor Wakamo
163c0651f2 [driver] Added support for parallel execution.
In Compilation, perform Jobs by scheduling Commands which need to be run (currently
all Commands, but this can be refined later) on TaskQueues by doing the following:

1. Perform all inputs to all Jobs in the current JobList. (Treat a JobList as its
   own inputs for scheduling purposes.)
2. After each Command's inputs run, check to see if that Command needs to run.
   If so, schedule it for execution. (Currently, all Commands always need to run.)
3. Set up a TaskFinishedCallback which will check to see if any other Commands need
   to run as a result of executing a particular Command. (Currently, all Commands
   depend on all other Commands.) If a Command needs to run and it is not already
   scheduled for execution, schedule it for execution.
4. Ask the TaskQueue to execute. (This will call the TaskFinishedCallback as
   necessary).

Swift SVN r12060
2014-01-08 19:10:43 +00:00
Connor Wakamo
5303544046 [driver] Add support for passing -O to the integrated frontend.
Swift SVN r11451
2013-12-18 23:42:51 +00:00
Connor Wakamo
5a603a3cd1 [driver] Add support for -emit-ir and -emit-bc.
Added driver-level support for generating commands with -emit-ir and -emit-bc as well integrated frontend support for handling -emit-ir and -emit-bc.

Swift SVN r11375
2013-12-17 02:43:40 +00:00
Connor Wakamo
3b80655e62 [driver] Switched from --help-hidden to -help-hidden.
Left --help-hidden in as an alias for consistency with clang, but -help-hidden is now the primary spelling of this option.

Swift SVN r11350
2013-12-16 19:23:16 +00:00
Connor Wakamo
04b98c7d67 [driver] Move execution of Jobs from main() to Compilation.
Actual execution of Jobs is still performed under-the-covers by JobList::run(), but this abstraction will allow the Compilation to execute Jobs in parallel.

Swift SVN r11334
2013-12-15 21:47:36 +00:00
Connor Wakamo
44971d2e5a [driver] Added support for specifying the number of commands to execute in parallel.
The driver does not yet support parallel execution, but this sets the Compilation up with the necessary information to execute commands in parallel.

Swift SVN r11333
2013-12-15 21:47:35 +00:00
Connor Wakamo
6127955b05 [driver] Add support for passing arguments after -- down to the frontend as-is if the driver is in immediate mode.
In Driver::translateInputArgs(), don’t break apart the OPT__DASH_DASH argument if we’re in immediate mode.
Mark OPT__DASH_DASH as being a FrontendOption.
In Swift::constructJob(), add support for types::TY_Nothing, and pass the argument for OPT__DASH_DASH as-is if the driver is invoking the frontend in immediate mode.

Swift SVN r11325
2013-12-15 00:58:27 +00:00
Connor Wakamo
58ec588819 [driver] Adjusted the implementation of Driver::getOutputMode() so that it uses Option::matches() instead of a series of ArgList::getLastArg() calls.
Also added support for indicating that -i and -repl produce no output.

Swift SVN r11323
2013-12-15 00:58:25 +00:00
Connor Wakamo
85c2afcd90 [driver] Added support for -Xfrontend, which passes arguments through to the frontend.
Swift SVN r11166
2013-12-12 01:14:06 +00:00
Connor Wakamo
fb38d09bb1 [driver] Switch from passing “-triple” to “-target” to the integrated frontend.
Swift SVN r11097
2013-12-10 23:17:00 +00:00
Connor Wakamo
02c1532d27 Initial support for an integrated frontend in swift_driver.
- Added support for invoking the Swift frontend via "swift_driver -frontend".
- Added frontend_main.cpp, which implements the main entry point for the
  integrated frontend. (Currently, this supports compiling an input Swift file
  into an object file.)
- Removed lib/Frontend/FrontendOptions.td, and replaced its functionality with
  options in include/Swift/Driver/Options.td and a new
  include/Swift/Driver/FrontendOptions.td. Options supported by the frontend
  are denoted by the FrontendOption flag; options which are not supported by
  the driver are denoted by the NoDriverOption flag.
- Updated CompilerInvocation::parseArgs() to use the option table returned from
  createDriverOptTable(), including renaming a handful of options. (-triple is
  now -target, and -Xclang is now -Xcc.)

Swift SVN r11082
2013-12-10 18:06:54 +00:00
Connor Wakamo
725eda93a7 [driver] Reimplemented Swift::constructJob() so that it actually produces compile commands.
Instead of producing "swift_driver --version" commands, implemented support for producing
"swift" commands which actually compile code. (The support at this point is rudimentary,
but serves as a good starting point.)

Swift SVN r10949
2013-12-06 23:11:31 +00:00
Connor Wakamo
e93274315e [driver] Assert that the linker is only asked to produce outputs of type TY_Image.
Swift SVN r10948
2013-12-06 23:11:30 +00:00
Connor Wakamo
d456848811 [driver] Added support for differentiating SIL emitted by -emit-sil and -emit-silgen.
SIL emitted by -emit-silgen is treated internally as “raw-sil”, while SIL emitted by -emit-silgen is treated internally as “sil".
Externally, there are no changes; both kinds of SIL still have a “.sil” file extension.
Updated test/Driver/Actions.swift to account for the change in behavior with -emit-silgen.

Swift SVN r10947
2013-12-06 23:11:30 +00:00
Connor Wakamo
a56ba25a69 [driver] Added temporary output in Command::execute() to print out commands as they are executed.
Swift SVN r10945
2013-12-06 23:11:29 +00:00
Connor Wakamo
3d9f94e715 Properly implemented "swift_driver -driver-print-bindings".
This produces output similar to "clang -ccc-print-bindings".
Also added several tests to ensure that "swift_driver -driver-print-bindings"
behaves as expected.

Swift SVN r10935
2013-12-06 21:23:03 +00:00
Connor Wakamo
ed2038585f Initial set of changes to add a new 'swift_driver' executable.
- Added a couple of new targets:
  - libswiftDriver, which contains most of the driver implementation
  - swift_driver, which produces the actual executable

- Added centralized version information into libswiftBasic.

- Added a new "Driver Design & Internals" document, which currently describes
  the high-level design of the Swift driver.

- Implemented an early version of the functionality of the driver, including
  versions of the Parse, Pipeline, Bind, Translate, and Execute driver stages.
  Parse, Pipeline, and Bind are largely implemented; Translate and Execute are
  early placeholders. (Translate produces "swift_driver --version" and "ld -v"
  commands, while Execute performs all subtasks sequentially, rather than in
  parallel.)

This is just the starting point for the Swift driver. Tests for the existing
behavior are forthcoming.

Swift SVN r10933
2013-12-06 21:23:01 +00:00