bazel
-
Open-source digital signal processing and machine learning accelerators are frequently published as student or research projects. While the RTL architecture is often innovative, the surrounding build and test scaffolding …
-
Converting existing open-source FPGA projects to Bazel and rules_openxc7 transforms fragile, vendor-locked hardware build scripts into reproducible, sandboxed workflows. This case study examines our complete Bazelization …
-
rules_fusesoc integrates FuseSoC, the FPGA core package manager, into hermetic Bazel builds. Users declare desired core libraries and IP dependencies in Bazel build files. The module resolves dependencies and exports …
-
This tutorial teaches you how to build your first FPGA bitstream with Bazel and the open-source rules_openxc7 toolchain. You do not need any prior Bazel experience, and you do not need to install AMD Vivado or compile …
-
Doom now runs on Vreteno, the RISC-V core written in TxHDL, on an Artix-7 FPGA board. The game draws into a framebuffer in DDR3 memory, the board shows it on HDMI, and the keys come over the serial line. This post shows …
-
I built the same three designs with the open toolchain and with Vivado, through the same Bazel rules, and timed every build from cold and warm caches. Small designs build two to three times faster with the open tools. …
-
rules_openxc7 brings open-source FPGA synthesis and place-and-route for AMD 7-series chips into Bazel. It drives Yosys, nextpnr-xilinx, Project X-Ray, and openFPGALoader through the same target interface as rules_vivado. …
-
wdbcvt now publishes two new release archives with every build: a documentation bundle and a waveform corpus. The waveform archive packages the test suite’s .wdb files, ground-truth .fst conversions, and HDL source files …
-
The grlib Bazel module packages GRLIB, Gaisler’s (Frontgrade’s) GPL VHDL IP library, so that the NOEL-V RV64 RISC-V core and the AMBA infrastructure around it can be consumed as ordinary Bazel dependencies. It is the …
-
This article demonstrates converting a VCD dump into an indexed SQLite database using go-vcd-parser, then using a query language to answer questions about the signals. A logic simulator answers questions about a digital …
-
TxHDL is an open-source hardware description language embedded directly in Rust as an async runtime library, developed by Dragiša Janković and Filip Filmar (me). Instead of inventing a custom compiler and type checker, …
-
rules_vivado drives the AMD/Xilinx Vivado FPGA toolchain from Bazel: compile, simulate, synthesize, place-and-route, generate a bitstream, and program the device, all as ordinary build actions instead of clicks in a GUI …
-
In my homelab, no individual server is treated as irreplaceable. Every machine across the laboratory (build nodes, developer workstations, and continuous integration runners) is fully ephemeral: it can be terminated at …
-
This is a description of how I build programmable hardware. Everything that goes into Cocoapuffs (my RISC-V system-on-chip on an Artix-7 FPGA), including the RTL, firmware, simulations, synthesis, bitstream, and board …
-
Fuchsia’s Zircon kernel now boots on Cocoapuffs, my homebrew RISC-V system-on-chip on an AMD Artix-7 FPGA. As far as I know, this is the first Fuchsia boot on programmable hardware. Below you will find the boot video and …
-
I’m excited to announce the release of bazel_local_nix 0.1.0! bazel_local_nix provides Bazel rules that make Nix packages available inside a Bazel workspace without a host-level Nix installation and without nix-portable. …
-
tl;dr: I revived the upspin project source code. See it at https://github.com/filmil/upspin, and https://github.com/filmil/upspin-gdrive. Since April, it has also gained post-quantum encryption, streaming of large …
-
Synod is a distributed Paxos coordination agent implemented in Go. It manages a highly available, synchronized Key-Value store across a network of peers using the Paxos consensus algorithm. It allows multiple dynamically …
-
mkill is a Go program that continuously monitors memory usage of the programs owned by the current user. It kills the program with the sharpest rise in memory utilization when the overall system memory occupancy goes …
-
A link page of interesting libraries and utilities I found. Libraries, utilities, etc. https://registry.bazel.build/modules/rules_verilator https://github.com/lromor/fpga-assembler …
-
fshlib fshlib is a simple shell library for logging. It provides a set of functions to log messages with different severity levels. Github repo: https://github.com/filmil/fshlib Usage To use the library, source the …
-
note to self: do not remove .bazelversion from projects The other day, I was pondering whether to keep setting particular bazel version in projects. I even removed some, to see what would become of it. Since I use the …
-
This repository provides Bazel rules for creating self-extracting archives (“shar"s) out of shell binaries. See section “what is this” below for details. Details at: https://github.com/filmil/rules_shar Usage To use the …
-
Bazel rules to support a debian rootfs The idea of this repository is to provide a hermetic, ephemeral and reproducible repository of prebuilt binaries, which can then be brought into bazel builds to remove the …
-
This is another piece of news in my quest for hermetic, ephemeral, and reproducible builds (“HER”). If you read my articles in the past months or so, you may have noticed that I am looking for good ways of creating …
-
This is a collection of links to interesting articles and knowledge sources about the Bazel build system that I found. I’m motivated to do this after spending considerable time developing a thing that already existed. …
-
This is another piece of news in my quest for hermetic, ephemeral, and reproducible builds (“HER”). If you read my articles in the past months or so, you may have noticed that I am looking for good ways of creating …
-
Update 2025-10-19: I made a searchable index of modules available from my registry at https://www.hdlfactory.com/bazel-registry. As Bazel 9.0 promises to disable the old dependency management approaches based on …
-
lit2md: a literate program converter from code to Markdown lit2md is a simplistic literate programming (LP) converter. See at: https://github.com/filmil/lit2md It takes a source code file annotated with special …
-
Decentralized Downloads for Bazel: Introducing bazel_rules_bt In the world of reproducible builds and efficient dependency management, Bazel stands out as a powerful tool. However, fetching large or uncommon dependencies …
-
rules_nixpkgs use This is a run-down of tips and tricks for the use of rules_nixpkgs, a rule set for bringing in nix packages for use in bazel. I got involved with the use of rules_nixpkgs as a result of my work on …
-
Bid allows you to create a build rule that runs a single bazel build action inside a Docker container. And if you can run a single action, you can run more if you so choose. This helps you if you must use software which …
-
Other formats: Original content is at: https://github.com/filmil/bazel-ebook The rendered HTML edition at: https://hdlfactory.com/bazel_ebook_html/ Introduction This repository is a set of bazel build rules that allow …
-
From zero to RISC-V in hardware, in 6 minutes Program your FPGA with a one-liner command. It’s a kind of magic. This is a project in sustainable FPGA development that I have been working on. It ties together several …
-
Be forewarned: HER builds with nix require a functional ranlib This is something seldom known, and a very sharp corner to cut yourself on. But you really want to know if you are using nix. I lost an entire day trying to …
-
bazel rules for GHDL I present to you https://github.com/filmil/bazel_rules_ghdl: a set of bazel rules for converting VHDL into Verilog. This for example allows running VHDL code in a Verilator simulation. Commercial …
-
bazel rules for a riscv64 bare metal rust compiler This article assumes that you have bazel installed via the bazelisk method. This is the latest example in my repository at: https://github.com/filmil/bazel-experiments …
-
bazel installation via the bazelisk method Here is how I install bazel. I use this installation method on all of my machines. I do not think it is practical to go about this any other way. It is implied in all of my …
-
bazel rules for a riscv64 bare metal GCC compiler The repository https://github.com/filmil/bazel_rules_gcc_riscv64_baremetal contains bazel rules that can be used for a hermetic bare metal GCC cross-compiler for a 64-bit …
-
Summary This short note defines the notions of hermetic, ephemeral and reproducible software build, as used in my writing. I call this “her” for short. Hermetic A build is said to be hermetic, if each build step only has …
-
Summary I bother with bazel. Here is why. Background Bazel is a build system. Originally created at Google for internal purposes, then eventually open sourced. Since then, it has not been universally accepted. You can …
-
You, too, can have a fully hermetic, reproducible, and ephemeral bazel build. If you are in a hurry, fast forward to https://github.com/filmil/bazel_local_nix Intro While looking for non-invasive and reproducible ways to …
-
Bazel does not like FIFOs Perhaps obvious in retrospect, but it is not possible for a bazel build artifact to generate a named pipe in the filesystem. The after-step checks will object if an output directory contains at …
-
TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now Serbia. It is hard to develop for any machine without a way to test quickly whether your work results in something usable. Since …
-
Update 2026-04-17: Bazoekt has been modernized and revived. Sourcegraph has taken over maintenance of zoekt, but what they actually did was disable the old repo and dismantle the zoekt infrastructure, so it couldn’t be …
-
Excavating an unknown file from a foreign_cc rule I discovered this trick recently, while trying (and mostly failing) to build a library. I discovered that it is possible to excavate an arbitrary file from the resulting …
-
TIM-011 gets a C runtime library TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now Serbia. Now that https://github.com/filmil/tim011-tools/issues/3 has been fixed, the TIM-011 …
-
I was a bit hard pressed to find all the proper work attribution. Please let me know if you have data to contribute. TIM-011 TIM-011 was an 8-bit teaching computer that was ostensibly developed by IMP in what is now …
-
Often needed little bits of bazel knowledge that I tend to forget. Module extensions Reminder about module extensions. # Also instead of `http.bzl`, `git.bzl` etc. http_file = …
-
Here is an example python Flask app built with Bazel. See README.md for instructions. Running the app will start a local dev server for Flask and you should be able to direct your browser at it and see the result. Based …
-
Update 2023-08-17: This is now a feature in bazel, see https://github.com/bazelbuild/bazel/issues/18766 for details. It is available starting bazel version 6.3.0. Use additional_compiler_input parameter to cc_library …
-
Summary The bazel build system has rules available to build C or C++ code from external repositories that use other more “conventional” build tools. By this I mean the usual suspects: GNU autotools, GNU make and cmake. …