Wednesday, June 10, 2026

Re: New port cad/openfpgaloader

Hello! You can find the second attempt of my port attached to this email. I have applied the changes, suggested by Stu (Thank you, btw). In this particular port, I have moved the ill-placed troubleshooting guide from the pkg/DESCR into a new pkg/README file. It still includes a section about patching the kernel, since this is the method which is the most precise. Again: The problem it solves is HIGHLY individual, but anybody who will run into it, will be grateful that there is such a relatively easy workaround. In addition to that: Using ldd(1), I noticed that the resulting binaries had some implicit library dependencies. They are now explicitly stated inside the Makefile. Please have another look, hopefully, this time around, it meets your standards a little bit better. Thomas On 6/9/26 08:00, Thomas Dettbarn wrote: > Hello Stu! > > > Thank you so so much for your feedback! I will update my > ports later. > > > Thomas > > On 6/9/26 01:14, Stuart Henderson wrote: >> On 2026/06/09 00:54, Thomas Dettbarn wrote: >>> + >>> +*** WARNING *** You might need to recompile the kernel. >>> +Some devices have problems when they are accessed through uftdi(4). >>> One >>> +of the ways to disable them for this module is by commenting out their >>> +USB IDs in /usr/src/sys/dev/usb/uftdi.c. Like so: >>> + >> configuring the kernel via the bsd.re-config(5) mechanism would >> usually be the most convenient way to do this and I think I would >> avoid suggesting other methods. basically you would want to add >> the disable line to /etc/bsd.re-config, run /usr/libexec/reorder_kernel, >> and reboot. >> >> > Nice! > I did not know about this method. I will try it, if it works, then I > will update the README. > > UNFORTUNATELY, with my setup, I encountered a problem where > I need this module, albeit not for loading the FPGA board itself: A > second USB device I had (Which I used for UART communication > with my design) did not work with ugen(4). > > So removing uftdi(4) completely was too much, I needed to be > more precise. Hence my suggestion with the kernel patch. > > >

diff --git a/cad/openfpgaloader/Makefile b/cad/openfpgaloader/Makefile
new file mode 100644
index 00000000000..fbb65f85aeb
--- /dev/null
+++ b/cad/openfpgaloader/Makefile
@@ -0,0 +1,26 @@
+COMMENT=	universal utility for programming FPGAs
+CATEGORIES=	cad
+V=		1.1.1pl20260604
+DISTNAME=	openfpgaloader-${V}
+
+GH_ACCOUNT=	trabucayre
+GH_PROJECT=	openFPGALoader
+GH_COMMIT=	bf8106ef5f6e92017c5901737db3c3c9593e8b4d
+
+HOMEPAGE=	https://github.com/trabucayre/openFPGALoader
+MAINTAINER=	Thomas Dettbarn <dettus@dettus.net>
+
+# APACHE-2.0
+PERMIT_PACKAGE=	yes
+
+WANTLIB=	c c++ c++abi m pthread z
+MODULES=	devel/cmake
+
+NO_TEST=	Yes
+
+LIB_DEPENDS=	devel/libftdi1
+LIB_DEPENDS+=	devel/libusb1
+
+
+.include <bsd.port.mk>
+
diff --git a/cad/openfpgaloader/distinfo b/cad/openfpgaloader/distinfo
new file mode 100644
index 00000000000..f7b4fe5df52
--- /dev/null
+++ b/cad/openfpgaloader/distinfo
@@ -0,0 +1,2 @@
+SHA256 (openfpgaloader-1.1.1pl20260604-bf8106ef.tar.gz) = wBNVSeoPICa1PcMDLwmw1CUJUq+u+IQ+NwoIFMOpGlc=
+SIZE (openfpgaloader-1.1.1pl20260604-bf8106ef.tar.gz) = 2931988
diff --git a/cad/openfpgaloader/pkg/DESCR b/cad/openfpgaloader/pkg/DESCR
new file mode 100644
index 00000000000..e738c352fbe
--- /dev/null
+++ b/cad/openfpgaloader/pkg/DESCR
@@ -0,0 +1,6 @@
+Universal utility for programming FPGAs. Compatible with many boards,
+cables and FPGA from major manufacturers (Xilinx, Altera/Intel,
+Lattice, Gowin, Efinix, Anlogic, Cologne Chip). openFPGALoader works on
+Linux, Windows, macOS and OpenBSD.
+
+
diff --git a/cad/openfpgaloader/pkg/PLIST b/cad/openfpgaloader/pkg/PLIST
new file mode 100644
index 00000000000..82f98ecfdef
--- /dev/null
+++ b/cad/openfpgaloader/pkg/PLIST
@@ -0,0 +1,115 @@
+@bin bin/openFPGALoader
+share/doc/pkg-readmes/${PKGSTEM}
+share/openFPGALoader/
+share/openFPGALoader/bpiOverJtag_xc7k480tffg1156.bit.gz
+share/openFPGALoader/spiOverJtag_10cl006144.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl016484.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl025256.rbf.gz
+share/openFPGALoader/spiOverJtag_10cl055484.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce215.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce223.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce423.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce523.rbf.gz
+share/openFPGALoader/spiOverJtag_5ce927.rbf.gz
+share/openFPGALoader/spiOverJtag_5sgsd5.rbf.gz
+share/openFPGALoader/spiOverJtag_efinix_t120f324.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_t13f256.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_t8f81.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_ti180j484.bit.gz
+share/openFPGALoader/spiOverJtag_efinix_ti60f225.bit.gz
+share/openFPGALoader/spiOverJtag_ep4ce1017.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce11523.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce1523.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce2217.rbf.gz
+share/openFPGALoader/spiOverJtag_ep4ce622.rbf.gz
+share/openFPGALoader/spiOverJtag_xc3s500evq100.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx100fgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx150tcsg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx150tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx16csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx16ftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx25csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx25tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx45csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx45tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx9csg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc6slx9tqg144.bit.gz
+share/openFPGALoader/spiOverJtag_xc6vlx130tff784.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tfgg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a100tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12tcpg238.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a12tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a15tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tfbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tfbg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tffg1156.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a200tsbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25tcpg238.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a25tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a35tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcpg236.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg325.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tcsg325_1v35.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a50tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75t.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tcsg324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tfgg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tfgg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7a75tftg256.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k160tffg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tfbg900.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tffg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k325tffg900.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k420tffg901.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k70tfbg484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7k70tfbg676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s100fgga676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15cpga196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s15ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25csga324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s25ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50csga324.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s50ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6cpga196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6csga225.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s6ftgb196.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75fgga484.bit.gz
+share/openFPGALoader/spiOverJtag_xc7s75fgga676.bit.gz
+share/openFPGALoader/spiOverJtag_xc7vx330tffg1157.bit.gz
+share/openFPGALoader/spiOverJtag_xcau10p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcau15p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcku040-ffva1156.bit.gz
+share/openFPGALoader/spiOverJtag_xcku060-ffva1156.bit.gz
+share/openFPGALoader/spiOverJtag_xcku3p-ffva676.bit.gz
+share/openFPGALoader/spiOverJtag_xcku5p-ffvb676.bit.gz
+share/openFPGALoader/spiOverJtag_xcvu37p-fsvh2892.bit.gz
+share/openFPGALoader/spiOverJtag_xcvu9p-flga2104.bit.gz
diff --git a/cad/openfpgaloader/pkg/README b/cad/openfpgaloader/pkg/README
new file mode 100644
index 00000000000..188ef10aec4
--- /dev/null
+++ b/cad/openfpgaloader/pkg/README
@@ -0,0 +1,70 @@
++-------------------------------------------------------------------------------
+| Running ${PKGSTEM} on OpenBSD
++-------------------------------------------------------------------------------
+
+Note about uftdi(4)
+===================
+
+Up until OpenBSD 7.9, using some FPGA devices with openFPGALoader is sligthly
+problematic, resulting in error messages like this:
+
+  fail to read data usb bulk read failed
+  JTAG init failed with: low level FTDI init failed
+
+This happens because of the FPGA devices being incorrectly attached to the
+uftdi(4) module inside the kernel. There are two ways of preventing this:
+
+ 1. By deactivating uftdi(4) completely
+ 2. By patching uftdi(4), so that it does not recognize the USB device.
+
+In both cases, the ugen(4) module will be attached as a fallback.
+
+Deactivating uftdi(4) with bsd.re-config(5)
+-------------------------------------------
+The following commands
+
+  echo "disable uftdi" >>/etc/bsd.re-config
+  /usr/libexec/reorder_kernel
+  reboot
+
+are disabling the utfi(4) module and relinking the kernel. After the reboot,
+the device can be used.
+
+
+
+Deactivating uftdi(4) with config
+---------------------------------
+The following commands
+
+  config -e -f -o /bsd.nouftdi /bsd
+  ukc> disable uftdi*
+  ukc> quit
+  reboot
+
+Are disabling the module inside the kernel binary.
+
+
+Patching the kernel
+-------------------
+The most precise method is to patch the uftdi(4) module inside the kernel.
+The list of devices uftdi(4) attaches itself to is the array uftdi_devs[] in
+the file /usr/src/sys/dev/usb/uftdi.c.
+
+One single device can be deactived by commenting out the corresponding line:
+
+  { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20 },
+  //{ USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C },
+  { USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232L },
+
+To find said line, the output of lsusb
+
+  Bus 001 Device 006: ID 0403:6010 Future Technology Devices International
+
+can be mapped to the constant defines in /usr/src/sys/dev/usb/usbdevs.h
+Afterwards, the kernel can be rebuild, as described in the OpenBSD FAQ5:
+
+  https://www.openbsd.org/faq/faq5.html#Options
+
+This method is recommend for FPGA projects where an additional USB to UART
+adapter is involved.
+

databases/sqlite3-tcl port and tcl9

The present databases/sqlite3-tcl port is built with MODTCL_VERSION = 8.6, producing /usr/local/lib/tcl/sqlite3/libsqlite3513.so I am working on a tcl9 application (given that the 8.6 series has had its final release), so wanted to use the tcl9 version of the sqlite3 library and made a test port to suit. it seems libraries have been renamed in tcl9 to include the string 'tcl9' in the name, and the pkgIndex file handles this in cases that I have seen, but the tcl9 version of libraries is not built by the present ports. The build goes fine, the tcl9 library (libtcl9sqlite3513.so) is built and works in basic testing. However, it conflicts with the sqlite3-tcl port due to having identical pkgIndex.tcl, manpage and example files. My question is how this might be handled in the future, preserving the availability of the tcl8.6 version of the library for legacy applications. - have two ports, sqlite3-tcl and sqlite3-tcl9 with CONFLICTS = sqlite3-tcl-* ? - two mutually-exclusive flavors of a single port ? - or is there a way to have both installed at the same time, and overwrite the conflicting files on installation, which I guess breaks the convention to not touch files in another package? Is there a precedent for this elsewhere? There are probably other ports like tcllib, tclthread that are currently not available for tcl9. All advice, info welcome. Chris