In this method, Docker will provide the binaries, but you first need to install Docker depending on your OS.
First, clone ORFS to get the designs and scripts:
git clone https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts.git
cd OpenROAD-flow-scripts
I use a bash script that I created to run ORFS:
#!/bin/bash
# Use first argument as tag if provided
if [ -n "$1" ]; then
tag="$1"
echo "Using user-specified tag: $tag"
else
tag=$(git describe --tags 2>/dev/null)
if [ -n "$tag" ]; then
echo "Using Git tag: $tag"
else
echo "Warning: No tag specified and commit is not on a tag. Defaulting to 'latest'."
tag="latest"
fi
fi
echo "Running OpenROAD flow with tag: ${tag}"
docker run --rm -it \
-u $(id -u ${USER}):$(id -g ${USER}) \
-v $(pwd)/flow:/OpenROAD-flow-scripts/flow \
-v $(pwd)/..:/OpenROAD-flow-scripts/UCSC_ML_suite \
-e DISPLAY=${DISPLAY} \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v ${HOME}/.Xauthority:/.Xauthority \
--network host \
--security-opt seccomp=unconfined \
openroad/orfs:${tag}
This will not only export your display so you can run GUI applications in the Docker, but it also mounts the directory “flow” on your local filesystem in the Docker image. This directory contains the designs, scripts, and the results when you run the designs.
Add the runorfs.sh
to your filesystem in the ORFS cloned directory as a
file called runorfs.sh
and make it executable:
chmod +x runorfs.sh
You can run the version corresponding to your version of ORFS by just executing the script, or you can specify a particular tag or github commit ID. For example:
# for the version corresponding to your ORFS repository
./runorfs.sh
# for a specific version, you can specify the tag
git checkout v3.0-3141-gb6d79b23
./runorfs.sh v3.0-3141-gb6d79b23
# or a commit ID
git checkout 7fcc19
./runorfs.sh 7fcc19
Beware, your cloned version of ORFS should match the version of the Docker image that you run. If it doesn’t, you may get differences if the command interfaces change.
You can safely ignore the message “groups: cannot find name for group ID 1000” when you start the Docker image.
To check your installation, run a smoke test:
I have no name!@diode:/OpenROAD-flow-scripts$ cd flow
I have no name!@diode:/OpenROAD-flow-scripts/flow$ make
This will run, by default, the design GCD (Greatest Common Divisor) in the Nangate 45nm technology. It will run the flow from synthesis to routing, and you will get a lot of output, but it should end with something like this:
Log Elapsed seconds Peak Memory/MB
1_1_yosys 0 42
1_1_yosys_canonicalize 0 38
2_1_floorplan 0 97
2_2_floorplan_macro 0 93
2_3_floorplan_tapcell 0 93
2_4_floorplan_pdn 0 95
3_1_place_gp_skip_io 0 94
3_2_place_iop 0 94
3_3_place_gp 1 194
3_4_place_resized 0 113
3_5_place_dp 0 99
4_1_cts 4 120
5_1_grt 10 213
5_2_route 17 1175
5_3_fillcell 0 97
6_1_fill 0 95
6_1_merge 1 390
6_report 0 137
Total 33 1175
Note, there might be a few “WARNING” messages, but that is ok. To view the final result, you can run:
I have no name!@diode:/OpenROAD-flow-scripts/flow$ make gui_final
which should open the GCD design like this:
You may get the following error if you try to run GUI applications from the docker.
Authorization required, but no authorization protocol specified
Could not load the Qt platform plugin "xcb" in "" even though it was found.
You can resolve this by running:
xhost +local:
before you start the Docker image. This will give the docker container permission to access your display server (X11).
Copyright 2025 VLSI-DA (see LICENSE for use)