# Build Instructions

##### Based on [openroad build instructions](https://github.com/The-OpenROAD-Project/alpha-release/tree/master/build) with addition of opendp, opensta and original yosys and some modifications to the dockerfiles and the makefile.

The goal of these instructions is to build a single image that contains all the openroad tools used by openlane.
The is done through three stages.

1. Building
2. Exporting
3. Merging

### Note

The repo already provides a snapshot of the tarballs which are generated by going through steps 1 and 2, so you can jump to 3 if we wish to save time building the tools.

## Building

The following make target iteratively builds each tool in a sperate docker image.

```bash
make build-all
```

## Exporting

Then we export the binaries generated by each image to tarballs in `tar` directory.

```plain
make export-all
```

## Merging

Finally, we merge all the tools in a single docker image.

```bash
make merge
```

## Additional information 

### Building and exporting a specfic tool

You can chose to build a specific tool by running:

```bash
make build-<tool>
```

And exporting it by running:

```bash
make export-<tool>
```

The following are the available tools:

```bash
replace cts ioplacer opendp resizer route fastroute opensta yosys tapcell magic
```

### Rebuilding
If you wish to update the already built docker image, you should first remove the generated tarballs:

```bash
rm tar/*
```

Following that, either go through steps 1-3 to generate and update docker image, or update a single or multiple tools as follows:

```bash
rm tar/<tool1>.tar.gz 
rm tar/<tool2>.tar.gz 
.
.
rm tar/openroad_tools.tar.gz tar/openLANE_flow.tar.gz

make build-<tool1> DOCKER_BUILD_OPTS=--no-cache
make export-<tool1>

make build-<tool2> DOCKER_BUILD_OPTS=--no-cache
make export-<tool2>
.
.

make merge
```

This should you remove the existing tarballs. Then, build and export specific tool(s).
