Internals of build process
=========================================

The purpose of this document is to explain build process **internals** with subtle nuances. 
This document is not by any means complete.
The ultimate source of truth is the code in `.\build.psm1` that's getting executed on the corresponding CI system.

This document assumes, that you can successfully build PowerShell from sources for your platform.


Top directory
-----------

We are calling `dotnet` tool build for `$Top` directory

- `src\powershell` for CoreCLR builds (all platforms)
- `src\Microsoft.PowerShell.ConsoleHost` for FullCLR builds (Windows only)

Modules
----------

There are 3 modules directories with the same purpose: they have **content** files (i.e. `*.psm1`, `*.psd1`)
which would be binplaced by `dotnet`

- `src\Modules` shared between all flavours
- `src\Microsoft.PowerShell.ConsoleHost\Modules` FullCLR (Windows)
- `src\powershell\Modules` CoreCLR (all platforms)

Internals of build process
=========================================

The purpose of this document is to explain build process **internals** with subtle nuances. 
This document is not by any means complete.
The ultimate source of truth is the code in `.\build.psm1` that's getting executed on the corresponding CI system.

This document assumes, that you can successfully build PowerShell from sources for your platform.


Top directory
-----------

We are calling `dotnet` tool build for `$Top` directory

- `src\powershell` for CoreCLR builds (all platforms)
- `src\Microsoft.PowerShell.ConsoleHost` for FullCLR builds (Windows only)


### Dummy dependencies

We use dummy dependencies between project.json files to leverage `dotnet` build functionality.
For example, `src\Microsoft.PowerShell.ConsoleHost\project.json` has dependency on `Microsoft.PowerShell.PSReadLine`,
but in reality, there is no build dependency.

Dummy dependencies allows us to build just `$Top` folder, instead of building several folders.

### Dummy dependencies rules

* If assembly is part of FullCLR build,
it should be listed as a dependency for FullCLR $Top folder (src\Microsoft.PowerShell.ConsoleHost)

* If assembly is part of CoreCLR build,
it should be listed as a dependency for CoreCLR $Top folder (src\powershell)


Modules
----------

There are 3 modules directories with the same purpose: they have **content** files (i.e. `*.psm1`, `*.psd1`)
which would be binplaced by `dotnet`

- `src\Modules` shared between all flavours
- `src\Microsoft.PowerShell.ConsoleHost\Modules` FullCLR (Windows)
- `src\powershell\Modules` CoreCLR (all platforms)

Add info about dummy dependencies
Add info about dummy dependencies
