| # Minimal makefile for Sphinx documentation |
| # |
| |
| SHELL = /bin/bash |
| |
| MAKEDIR := $(dir $(lastword $(MAKEFILE_LIST))) |
| |
| # You can set these variables from the command line. |
| EXP_OPEN := $$(( |
| EXP_CLOSE := )) |
| CPU_CORES := $(shell nproc) |
| CPU_CORES_2 := $(shell echo $(EXP_OPEN) $(CPU_CORES) * 2 $(EXP_CLOSE)) |
| |
| SPHINXOPTS = -j $(CPU_CORES_2) |
| SPHINXBUILD = [ -e env/bin/activate ] && source env/bin/activate; sphinx-build |
| SPHINXAUTOBUILD = [ -e env/bin/activate ] && source env/bin/activate; sphinx-autobuild |
| SPHINXPROJ = SkywaterPDK |
| SOURCEDIR = . |
| BUILDDIR = _build |
| |
| # Put it first so that "make" without argument is like "make help". |
| help: |
| @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) |
| |
| # Vim makes a '4913' file for file system checking. Seriously. |
| livehtml: |
| @$(SPHINXAUTOBUILD) \ |
| -b html \ |
| --delay 5 \ |
| \ |
| --ignore \*.swp \ |
| --ignore \*~ \ |
| --ignore env \ |
| --ignore _build \ |
| --ignore .git \ |
| --ignore */4913 \ |
| \ |
| $(SPHINXOPTS) \ |
| "$(SOURCEDIR)" \ |
| "$(BUILDDIR)/html" |
| |
| .PHONY: help livehtml Makefile |
| |
| # Conda environment to make it easy to get all the dependencies required (like Yosys and stuff). |
| env/Miniconda3-latest-Linux-x86_64.sh: |
| mkdir env |
| wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O env/Miniconda3-latest-Linux-x86_64.sh |
| chmod a+x env/Miniconda3-latest-Linux-x86_64.sh |
| |
| |
| env: |
| rm -rf env |
| make env/Miniconda3-latest-Linux-x86_64.sh |
| ./env/Miniconda3-latest-Linux-x86_64.sh -p $(PWD)/env -b -f |
| source env/bin/activate; conda config --system --add envs_dirs $(PWD)/env/envs |
| source env/bin/activate; conda config --system --add pkgs_dirs $(PWD)/env/pkgs |
| source env/bin/activate; conda env update --name base --file ./environment.yml |
| make requirements |
| |
| .PHONY: env |
| |
| # PIP requirements in the environment... |
| requirements.txt: |
| @true |
| |
| env/.requirements.txt: requirements.txt |
| source env/bin/activate; pip install -r requirements.txt |
| touch -r requirements.txt env/.requirements.txt |
| |
| requirements: env/.requirements.txt |
| @true |
| |
| .PHONY: requirements |
| |
| # Generate the rules/periphery-rules.rst from CSV files in rules/periphery/ |
| $(wildcard rules/periphery/*): |
| true |
| |
| rules/periphery-rules.rst: $(wildcard rules/periphery/*) |
| source env/bin/activate; cd rules/periphery; ./periphery-split-csv.py > /dev/null |
| |
| # Various automated fixups that can be run |
| fixup: |
| # Make sure it is SkyWater |
| find ../ -type f -name \*.rst -exec sed -i 's/Skywater/SkyWater/gi' \{\} \+ |
| # Strip trailing space |
| find ../ -type f -name \*.rst -exec sed -i 's/ \+$$//' \{\} \+ |
| # Make sure all library names have the :lib: role. |
| find ../ -type f -name \*.rst -exec sed -i -e'/:name:.*/!s/\(:lib:\)\?`\?\(sky130_[a-z0-9]\+_[a-z0-9]\+\(_[a-z0-9]\+\)\?\)`\?\(\s\|$$\)/:lib:`\2`\4/g' \{\} \+ |
| |
| .PHONY: fixup |
| |
| echo: |
| @echo '$(SPHINXBUILD) -M XXXX "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)' |
| |
| # Catch-all target: route all unknown targets to Sphinx using the new |
| # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). |
| %: Makefile |
| @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) |