This repository contains package scripts for electronic design automation (EDA) tools/projects to be built as MinGW-w64 targets on MSYS2. The upstream of this repo is msys2/MINGW-packages. Branch upstream is kept in sync with that.
Multiple open source and/or free EDA tools are developed and primarily used on GNU/Linux platforms. Typically, builds are managed with tools such as make or cmake, and GCC or LLVM/clang are used for compiling. Migrating all those build systems to native Windows toolchains can be painful. Using PKGBUILD files for MINGW64 allows reusing the existing plumbing and, at the same time, produced binaries can be used on Windows natively.
Overall, there are a handful of approaches for providing great prepackaged/prebuilt and easy-to-set-up EDA tooling environments:
Each GNU/Linux distribution has a default package manager: apt-get
/apt
on Debian/Ubuntu/LinuxMint, yum/dnf
on RedHat/CentOS/Fedora, pacman
on ArchLinux, etc. Therefore, the most natural procedure is to install tooling through the default package manager, since that ensures the best compatibility and stability.
However, on the one hand, it is a huge effort to develop and maintain multiple recipes for each tool and for each officially supported architecture on each distribution. On the other hand, the release schedule and packaging guidelines of some distributions make it unfeasible to keep bleeding-edge projects up to date. That is the case of e.g. Debian or CentOS, which are known to be stable and slowly updating environments.
Therefore, some projects provide non-official recipes for users to build their own deb
/rpm
/tar.xz
packages. For example: SymbiFlow/symbiflow-arch-pkgs. Fortunately, on Windows it is easier to upstream recipes because pacman
is the only supported Unix alike package manager. That's why this repo was created.
Moreover, several alternatives arised in the open source EDA community for making it easier to get working bleeding-edge toolchains involving several projects. The following solutions trade either features and/or platform/architecture portability for achieving working bleeding-edge environments.
open-tool-forge provides statically pre-built packages for GNU/Linux, Windows and macOS through fpga-toolchain.
This provides the easiest setup approach and it allows having multiple versions of the toolchains, without running into conflicts. However, some features are limited when tools are built statically. See open-tool-forge/fpga-toolchain: DEVELOPMENT.md > General guidelines.
ghdl/docker, eine/symbiflow-containers, dbhi/docker (uses dbhi/qus), alpin3/ulx3s... provide Linux container images, which can be used on any platform with Docker or Podman support.
This provides the less invasive solution, because no tools are installed on the host, besides the container runtime. Moreover, the behaviour of the tools is exactly the same, regardless of the host OS. However, on Windows, accessing USB devices from containers is not straightforward. See ghdl/docker: usbip/README.md > USB/IP protocol support for Docker Desktop.
YoWASP aims to distribute tools form YosysHQ compiled to WebAssembly via language package managers like Python’s PyPI.
SymbiFlow/conda-packages, SymbiFlow/fpga-tool-perf, litex-hub/litex-conda-eda, litex-hub/litex-conda-packages, antmicro/conda-build-prepare-actions... provide and use non-static packages through Conda.
Conda is an open source package management system and environment management system that runs on Windows, macOS and Linux. However, for Conda packages to install/configure tools, those need to be previously compiled or available as pre-built packages. Therefore, Conda packages can indeed be wrappers around any of the previous solutions.
Apart from building and distributing tools using any of the solutions above, those need to be then used somehow. As discussed in eine/vhdl-cfg, there are currently about a dozen projects for managing the execution of EDA tools. Any of those might rely on any of the distribution solutions explained above.
In this regard, SymbiFlow/make-env is an environment provider meant for bootstraping the tools along with tool management projects.
Branch upstream of this repo is kept in sync with msys2/MINGW-packages. Therefore, all the PRs involving modifications which are meant to be upstreamed should be opened against branch upstream
.
Other than that, branch main
and other branches contain sources providing different configuration options and/or features which were not upstreamed yet.
- bitman
- bootlector
- Ref open-tool-forge/fpga-toolchain (static)
- ghdl WIP
- ghdl-yosys-plugin
- Ref open-tool-forge/fpga-toolchain (static)
- graphviz
- gtkwave
- icestorm WIP
- iverilog
- nextpnr
- Ref open-tool-forge/fpga-toolchain (static)
- prjtrellis
- Ref open-tool-forge/fpga-toolchain (static)
- sigrok-cli
- surelog
- symbiyosys
- Ref open-tool-forge/fpga-toolchain (static)
- verible
- verilator
- vpr/vtr
- yices 2
- yosys
- z3
- dfu-util
- ecpprog
- Ref open-tool-forge/fpga-toolchain (static)
- fujprog
- icesprog
- openFPGALoader
- Ref open-tool-forge/fpga-toolchain (static)
- openocd