Cómo compilar Libopencm3 en OpenBSD 7.4

May 10, 2024

Hace poco me pasé a OpenBSD en el portátil y como ando haciendo cosas con microcontroladores stm32, necesitaba una serie de utilidades y bibliotecas para realizar las tareas necesarias

Por desgracia, el gmake que está disponible en OpenBSD, no entiende una directiva concreta del Makefile de libopencm3, que genera una serie de ficheros de cabecera de forma automática, con los vectores de interrupción de los diversos microcontroladores soportados. Después de un rato trasteando, llegué a una pequeña ñapa que me medio soluciona el problema, aunque no es particularmente elegante.

Comenzamos descargando el código fuente desde el respotorio oficial:


  $ doas pkg_add -i gmake arm-none-eabi-gcc \
                    arm-none-eabi-binutils git \
                    arm-none-eabi-gdb arm-none-eabi-newlib
  $ git clone https://github.com/libopencm3/libopencm3.git
  $ cd libopencm3
                

El siguiente paso es modificar ligeramente el Makefile de libopencm3 ya que el problema es que no es capaz de expandir el intérprete para ejecutar dos scripts. Para ello, aplicamos el siguiente parche:

diff --git a/Makefile b/Makefile
index 6de524a6..26a0e57c 100644
--- a/Makefile
+++ b/Makefile
@@ -61,11 +61,11 @@ build: lib

 include/libopencm3/%/nvic.h lib/%/vector_nvic.c include/libopencmsis/%/irqhandlers.h: include/libopencm3/%/irq.json ./scripts/irq2nvic_h
        @printf "  GENHDR  $*\n";
-       $(Q)./scripts/irq2nvic_h ./$<;
+       python3 ./scripts/irq2nvic_h ./$<;

 %.cleanhdr:
        @printf "  CLNHDR  $*\n";
-       $(Q)./scripts/irq2nvic_h --remove ./$*
+       python3 ./scripts/irq2nvic_h --remove ./$*

 LIB_DIRS:=$(wildcard $(addprefix lib/,$(TARGETS)))
 $(LIB_DIRS): $(IRQ_GENERATED_FILES)

                

Y con esto ya estaría. Ya podríamos compilar el libopencm3 en OpenBSD sin demasiados problemas

→ home