avrdudes / avrdude

AVRDUDE is a utility to program AVR microcontrollers
GNU General Public License v2.0
696 stars 136 forks source link

CMAKE issue: parport, linuxspi and linuxgpio not available when compiled #1107

Closed seandepagnier closed 1 year ago

seandepagnier commented 1 year ago

I have compiled avrdude from source because linuxspi is completely missing now from the prebuild binary in raspbian.

During configuration of the build it shows ENABLED for both linuxgpio and linuxspi

I get the following output from avrdude -c ?type

Valid programmer types are:
  arduino          = Arduino programmer
  avr910           = Serial programmers using protocol described in application note AVR910
  avrftdi          = Interface to the MPSSE Engine of FTDI Chips using libftdi.
  buspirate        = Using the Bus Pirate's SPI interface for programming
  buspirate_bb     = Using the Bus Pirate's bitbang interface for programming
  butterfly        = Atmel Butterfly evaluation board; Atmel AppNotes AVR109, AVR911
  butterfly_mk     = Mikrokopter.de Butterfly
  dragon_dw        = Atmel AVR Dragon in debugWire mode
  dragon_hvsp      = Atmel AVR Dragon in HVSP mode
  dragon_isp       = Atmel AVR Dragon in ISP mode
  dragon_jtag      = Atmel AVR Dragon in JTAG mode
  dragon_pdi       = Atmel AVR Dragon in PDI mode
  dragon_pp        = Atmel AVR Dragon in PP mode
  flip1            = FLIP USB DFU protocol version 1 (doc7618)
  flip2            = FLIP USB DFU protocol version 2 (AVR4023)
  ftdi_syncbb      = FT245R/FT232R Synchronous BitBangMode Programmer
  jtagmki          = Atmel JTAG ICE mkI
  jtagmkii         = Atmel JTAG ICE mkII
  jtagmkii_avr32   = Atmel JTAG ICE mkII in AVR32 mode
  jtagmkii_dw      = Atmel JTAG ICE mkII in debugWire mode
  jtagmkii_isp     = Atmel JTAG ICE mkII in ISP mode
  jtagmkii_pdi     = Atmel JTAG ICE mkII in PDI mode
  jtagmkii_updi    = Atmel JTAG ICE mkII in UPDI mode
  jtagice3         = Atmel JTAGICE3
  jtagice3_pdi     = Atmel JTAGICE3 in PDI mode
  jtagice3_updi    = Atmel JTAGICE3 in UPDI mode
  jtagice3_dw      = Atmel JTAGICE3 in debugWire mode
  jtagice3_isp     = Atmel JTAGICE3 in ISP mode
  linuxgpio        = GPIO bitbanging using the Linux sysfs interface
  linuxspi         = SPI using Linux spidev driver
  micronucleus     = Micronucleus Bootloader
  par              = Parallel port bitbanging
  pickit2          = Microchip's PICkit2 Programmer
  serbb            = Serial port bitbanging
  serialupdi       = Driver for SerialUPDI programmers
  stk500           = Atmel STK500 Version 1.x firmware
  stk500generic    = Atmel STK500, autodetect firmware version
  stk500v2         = Atmel STK500 Version 2.x firmware
  stk500hvsp       = Atmel STK500 V2 in high-voltage serial programming mode
  stk500pp         = Atmel STK500 V2 in parallel programming mode
  stk600           = Atmel STK600
  stk600hvsp       = Atmel STK600 in high-voltage serial programming mode
  stk600pp         = Atmel STK600 in parallel programming mode
  teensy           = Teensy Bootloader
  usbasp           = USBasp programmer, see http://www.fischl.de/usbasp/
  usbtiny          = Driver for "usbtiny"-type programmers
  wiring           = http://wiring.org.co/, Basically STK500v2 protocol, with some glue to trigger the bootloader.
  xbee             = XBee Series 2 Over-The-Air (XBeeBoot)

When I execute avrdude -c linuxspi:

avrdude: cannot find programmer id linuxspi

Valid programmers are:
  2232HIO            = FT2232H based generic programmer
  4232h              = FT4232H based generic programmer
  adafruit_gemma     = Adafruit Trinket Gemma bootloader disguised as USBtiny
  arduino            = Arduino for bootloader using STK500 v1 protocol
  arduino-ft232r     = Arduino: FT232R connected to ISP
  arduino_gemma      = Arduino Gemma bootloader disguised as USBtiny
  arduinoisp         = Arduino ISP Programmer
  arduinoisporg      = Arduino ISP Programmer
  atmelice           = Atmel-ICE (ARM/AVR) in JTAG mode
  atmelice_dw        = Atmel-ICE (ARM/AVR) in debugWIRE mode
  atmelice_isp       = Atmel-ICE (ARM/AVR) in ISP mode
  atmelice_pdi       = Atmel-ICE (ARM/AVR) in PDI mode
  atmelice_updi      = Atmel-ICE (ARM/AVR) in UPDI mode
  avr109             = Atmel for bootloader using AppNote AVR109
  avr910             = Atmel Low Cost Serial Programmer
  avr911             = Atmel for bootloader using AppNote AVR911 AVROSP
  avrftdi            = FT2232D based generic programmer
  avrisp             = Atmel AVR ISP
  avrisp2            = Atmel AVR ISP mkII
  avrispmkII         = Atmel AVR ISP mkII
  avrispv2           = Atmel AVR ISP v2
  buspirate          = The Bus Pirate
  buspirate_bb       = The Bus Pirate (bitbang interface, supports TPI)
  butterfly          = Atmel for bootloader (Butterfly Development Board)
  butterfly_mk       = Mikrokopter.de Butterfly for bootloader
  bwmega             = BitWizard ftdi_atmega builtin programmer
  c232hm             = C232HM cable from FTDI
  c2n232i            = serial port banging, reset=dtr sck=!rts mosi=!txd miso=!cts
  dasa               = serial port banging, reset=rts sck=dtr mosi=txd miso=cts
  dasa3              = serial port banging, reset=!dtr sck=rts mosi=txd miso=cts
  diecimila          = alias for arduino-ft232r
  digilent-hs2       = Digilient JTAG HS2 (MPSSE)
  dragon_dw          = Atmel AVR Dragon in debugWire mode
  dragon_hvsp        = Atmel AVR Dragon in HVSP mode
  dragon_isp         = Atmel AVR Dragon in ISP mode
  dragon_jtag        = Atmel AVR Dragon in JTAG mode
  dragon_pdi         = Atmel AVR Dragon in PDI mode
  dragon_pp          = Atmel AVR Dragon in PP mode
  ehajo-isp          = avr-isp-programmer from eHaJo, http://www.eHaJo.de
  flip1              = FLIP for bootloader using USB DFU protocol version 1 (doc7618)
  flip2              = FLIP for bootloader using USB DFU protocol version 2 (AVR4023)
  ft232h             = FT232H in MPSSE mode
  ft232r             = FT232R Synchronous BitBang
  ft245r             = FT245R Synchronous BitBang
  iseavrprog         = USBtiny-based programmer, https://iascaled.com
  jtag1              = Atmel JTAG ICE (mkI)
  jtag1slow          = Atmel JTAG ICE (mkI)
  jtag2              = Atmel JTAG ICE mkII
  jtag2avr32         = Atmel JTAG ICE mkII in AVR32 mode
  jtag2dw            = Atmel JTAG ICE mkII in debugWire mode
  jtag2fast          = Atmel JTAG ICE mkII
  jtag2isp           = Atmel JTAG ICE mkII in ISP mode
  jtag2pdi           = Atmel JTAG ICE mkII in PDI mode
  jtag2slow          = Atmel JTAG ICE mkII
  jtag2updi          = JTAGv2 to UPDI bridge
  jtag3              = Atmel AVR JTAGICE3 in JTAG mode
  jtag3dw            = Atmel AVR JTAGICE3 in debugWIRE mode
  jtag3isp           = Atmel AVR JTAGICE3 in ISP mode
  jtag3pdi           = Atmel AVR JTAGICE3 in PDI mode
  jtag3updi          = Atmel AVR JTAGICE3 in UPDI mode
  jtagkey            = Amontec JTAGKey, JTAGKey-Tiny and JTAGKey2
  jtagmkI            = Atmel JTAG ICE (mkI)
  jtagmkII           = Atmel JTAG ICE mkII
  jtagmkII_avr32     = Atmel JTAG ICE mkII in AVR32 mode
  ktlink             = KT-LINK FT2232H interface with IO switching and voltage buffers.
  lm3s811            = Luminary Micro LM3S811 Eval Board (Rev. A)
  mib510             = Crossbow MIB510 programming board
  micronucleus       = Micronucleus for bootloader
  mkbutterfly        = Mikrokopter.de Butterfly for bootloader
  nibobee            = NIBObee
  o-link             = O-Link, OpenJTAG from www.100ask.net
  openmoko           = Openmoko debug board (v3)
  pavr               = Jason Kyle's pAVR Serial Programmer
  pickit2            = MicroChip's PICkit2 Programmer
  pickit4_isp        = MPLAB(R) PICkit 4 in ISP mode
  pickit4_pdi        = MPLAB(R) PICkit 4 in PDI mode
  pickit4_updi       = MPLAB(R) PICkit 4 in UPDI mode
  pkobn_updi         = Curiosity nano (nEDBG) in UPDI mode
  ponyser            = design ponyprog serial, reset=!txd sck=rts mosi=dtr miso=cts
  powerdebugger      = Atmel PowerDebugger (ARM/AVR) in JTAG mode
  powerdebugger_dw   = Atmel PowerDebugger (ARM/AVR) in debugWire mode
  powerdebugger_isp  = Atmel PowerDebugger (ARM/AVR) in ISP mode
  powerdebugger_pdi  = Atmel PowerDebugger (ARM/AVR) in PDI mode
  powerdebugger_updi = Atmel PowerDebugger (ARM/AVR) in UPDI mode
  serialupdi         = SerialUPDI
  siprog             = Lancos SI-Prog <http://www.lancos.com/siprogsch.html>
  snap_isp           = MPLAB(R) SNAP in ISP mode
  snap_pdi           = MPLAB(R) SNAP in PDI mode
  snap_updi          = MPLAB(R) SNAP in UPDI mode
  stk500             = Atmel STK500
  stk500hvsp         = Atmel STK500 v2 in high-voltage serial programming mode
  stk500pp           = Atmel STK500 v2 in parallel programming mode
  stk500v1           = Atmel STK500 version 1.x firmware
  stk500v2           = Atmel STK500 version 2.x firmware
  stk600             = Atmel STK600
  stk600hvsp         = Atmel STK600 in high-voltage serial programming mode
  stk600pp           = Atmel STK600 in parallel programming mode
  tc2030             = Tag-Connect TC2030
  teensy             = Teensy for bootloader
  ttl232r            = FTDI TTL232R-5V with ICSP adapter
  tumpa              = TIAO USB Multi-Protocol Adapter
  um232h             = UM232H module from FTDI
  uncompatino        = uncompatino with all pairs of pins shorted
  usbasp             = USBasp, http://www.fischl.de/usbasp/
  usbasp-clone       = Any usbasp clone with correct VID/PID
  usbtiny            = USBtiny simple USB programmer, https://learn.adafruit.com/usbtinyisp
  wiring             = Wiring for bootloader using STK500 v2 protocol
  xbee               = XBee for Series 2 Over-The-Air (XBeeBoot) bootloader using STK500 v1 protocol
  xplainedmini       = Atmel AVR XplainedMini in ISP mode
  xplainedmini_dw    = Atmel AVR XplainedMini in debugWIRE mode
  xplainedmini_updi  = Atmel AVR XplainedMini in UPDI mode
  xplainedpro        = Atmel AVR XplainedPro in JTAG mode
  xplainedpro_updi   = Atmel AVR XplainedPro in UPDI mode

A completely different list with many more entrees but no linuxspi. How can I get linuxspi support?

mcuee commented 1 year ago

Please check the contents of your avrdude.conf to see if linuxspi is included or not. And you need to check the reset pin configuration is correct or not.

Reference: https://github.com/avrdudes/avrdude/blob/main/src/avrdude.conf.in#L706_L725

seandepagnier commented 1 year ago

I confirm that linuxspi is not in the avrdude.conf generated.

I built on a raspberry pi. When running build.sh it reports: ENABLED linuxgpio ENABLED linuxspi

grep linux build_linux/src/avrdude.conf* gives no results

if I do mkdir build; cd build; cmake .. It reports

DISABLED linuxgpio DISABLED linuxspi

mcuee commented 1 year ago

@seandepagnier

It seems to me there is a bug with latest git. Try 7.0 release and it should work. Ref: https://github.com/avrdudes/avrdude/wiki/Building-AVRDUDE-for-Linux

mcuee@rpi400:~/build $ cd avrdude-7.0/

mcuee@rpi400:~/build/avrdude-7.0 $ ls
AUTHORS  CMakeLists.txt  COPYING  INSTALL  NEWS  README.md  atmel-docs  build.sh  src  tools

mcuee@rpi400:~/build/avrdude-7.0 $ cmake -D CMAKE_BUILD_TYPE=RelWithDebInfo -D HAVE_LINUXGPIO=ON -D HAVE_LINUXSPI=ON -B build_linux
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Git: /usr/bin/git (found version "2.30.2")
-- Found FLEX: /usr/bin/flex (found version "2.6.4")
-- Found BISON: /usr/bin/bison (found version "3.7.5")
-- Looking for libelf.h
-- Looking for libelf.h - found
-- Looking for libelf/libelf.h
-- Looking for libelf/libelf.h - not found
-- Looking for usb.h
-- Looking for usb.h - found
-- Looking for lusb0_usb.h
-- Looking for lusb0_usb.h - not found
-- Looking for libusb.h
-- Looking for libusb.h - not found
-- Looking for libusb-1.0/libusb.h
-- Looking for libusb-1.0/libusb.h - found
-- Looking for hidapi/hidapi.h
-- Looking for hidapi/hidapi.h - found
-- Looking for ftdi_tcioflush
-- Looking for ftdi_tcioflush - found
-- Configuration summary:
-- ----------------------
-- DO HAVE    libelf
-- DO HAVE    libusb
-- DO HAVE    libusb_1_0
-- DO HAVE    libhidapi
-- DON'T HAVE libftdi
-- DO HAVE    libftdi1
-- DISABLED   doc
-- DISABLED   parport
-- ENABLED    linuxgpio
-- ENABLED    linuxspi
-- ----------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mcuee/build/avrdude-7.0/build_linux
mcuee@rpi400:~/build/avrdude-7.0 $ cmake --build build_linux/
[  1%] [BISON][Parser] Building parser with bison 3.7.5
[  3%] [FLEX][Parser] Building scanner with flex 2.6.4
Scanning dependencies of target libavrdude
[  4%] Building C object src/CMakeFiles/libavrdude.dir/arduino.c.o
[  6%] Building C object src/CMakeFiles/libavrdude.dir/avr.c.o
[  8%] Building C object src/CMakeFiles/libavrdude.dir/avr910.c.o
[  9%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi.c.o
[ 11%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi_tpi.c.o
[ 13%] Building C object src/CMakeFiles/libavrdude.dir/avrpart.c.o
[ 14%] Building C object src/CMakeFiles/libavrdude.dir/bitbang.c.o
[ 16%] Building C object src/CMakeFiles/libavrdude.dir/buspirate.c.o
[ 18%] Building C object src/CMakeFiles/libavrdude.dir/butterfly.c.o
[ 19%] Building C object src/CMakeFiles/libavrdude.dir/config.c.o
[ 21%] Building C object src/CMakeFiles/libavrdude.dir/confwin.c.o
[ 22%] Building C object src/CMakeFiles/libavrdude.dir/crc16.c.o
[ 24%] Building C object src/CMakeFiles/libavrdude.dir/dfu.c.o
[ 26%] Building C object src/CMakeFiles/libavrdude.dir/fileio.c.o
[ 27%] Building C object src/CMakeFiles/libavrdude.dir/flip1.c.o
[ 29%] Building C object src/CMakeFiles/libavrdude.dir/flip2.c.o
[ 31%] Building C object src/CMakeFiles/libavrdude.dir/ft245r.c.o
[ 32%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkI.c.o
[ 34%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkII.c.o
[ 36%] Building C object src/CMakeFiles/libavrdude.dir/jtag3.c.o
[ 37%] Building C object src/CMakeFiles/libavrdude.dir/linuxgpio.c.o
[ 39%] Building C object src/CMakeFiles/libavrdude.dir/linuxspi.c.o
[ 40%] Building C object src/CMakeFiles/libavrdude.dir/lists.c.o
[ 42%] Building C object src/CMakeFiles/libavrdude.dir/micronucleus.c.o
[ 44%] Building C object src/CMakeFiles/libavrdude.dir/par.c.o
[ 45%] Building C object src/CMakeFiles/libavrdude.dir/pgm.c.o
[ 47%] Building C object src/CMakeFiles/libavrdude.dir/pgm_type.c.o
[ 49%] Building C object src/CMakeFiles/libavrdude.dir/pickit2.c.o
[ 50%] Building C object src/CMakeFiles/libavrdude.dir/pindefs.c.o
[ 52%] Building C object src/CMakeFiles/libavrdude.dir/ppi.c.o
[ 54%] Building C object src/CMakeFiles/libavrdude.dir/ppiwin.c.o
[ 55%] Building C object src/CMakeFiles/libavrdude.dir/serbb_posix.c.o
[ 57%] Building C object src/CMakeFiles/libavrdude.dir/serbb_win32.c.o
[ 59%] Building C object src/CMakeFiles/libavrdude.dir/ser_avrdoper.c.o
[ 60%] Building C object src/CMakeFiles/libavrdude.dir/ser_posix.c.o
[ 62%] Building C object src/CMakeFiles/libavrdude.dir/ser_win32.c.o
[ 63%] Building C object src/CMakeFiles/libavrdude.dir/serialupdi.c.o
[ 65%] Building C object src/CMakeFiles/libavrdude.dir/stk500.c.o
[ 67%] Building C object src/CMakeFiles/libavrdude.dir/stk500v2.c.o
/home/mcuee/build/avrdude-7.0/src/stk500v2.c: In function ‘stk500v2_setparm’:
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3098:6: warning: ‘current_value’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3098 |   if (value == current_value) {
      |      ^
/home/mcuee/build/avrdude-7.0/src/stk500v2.c: In function ‘stk500v2_print_parms1’:
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3295:24: warning: ‘osc_cmatch’ may be used uninitialized in this function
-Wmaybe-uninitialized]
 3295 |       f /= (osc_cmatch + 1);
      |            ~~~~~~~~~~~~^~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3242:35: warning: ‘osc_pscale’ may be used uninitialized in this function
-Wmaybe-uninitialized]
 3242 |   unsigned char vtarget, vadjust, osc_pscale, osc_cmatch, sck_duration =0; //XXX 0 is not correct, check caller
      |                                   ^~~~~~~~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3278:5: warning: ‘vadjust’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3278 |     avrdude_message(MSG_INFO, "%sVaref           : %.1f V\n", p, vadjust / 10.0);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3267:5: warning: ‘vtarget’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3267 |     avrdude_message(MSG_INFO, "%sVtarget         : %.1f V\n", p, vtarget / 10.0);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 68%] Building C object src/CMakeFiles/libavrdude.dir/stk500generic.c.o
[ 70%] Building C object src/CMakeFiles/libavrdude.dir/teensy.c.o
[ 72%] Building C object src/CMakeFiles/libavrdude.dir/updi_link.c.o
[ 73%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm.c.o
[ 75%] Building C object src/CMakeFiles/libavrdude.dir/updi_readwrite.c.o
[ 77%] Building C object src/CMakeFiles/libavrdude.dir/updi_state.c.o
[ 78%] Building C object src/CMakeFiles/libavrdude.dir/usbasp.c.o
[ 80%] Building C object src/CMakeFiles/libavrdude.dir/usb_hidapi.c.o
[ 81%] Building C object src/CMakeFiles/libavrdude.dir/usb_libusb.c.o
[ 83%] Building C object src/CMakeFiles/libavrdude.dir/usbtiny.c.o
[ 85%] Building C object src/CMakeFiles/libavrdude.dir/update.c.o
[ 86%] Building C object src/CMakeFiles/libavrdude.dir/wiring.c.o
[ 88%] Building C object src/CMakeFiles/libavrdude.dir/xbee.c.o
[ 90%] Building C object src/CMakeFiles/libavrdude.dir/__/lexer.c.o
[ 91%] Building C object src/CMakeFiles/libavrdude.dir/__/config_gram.c.o
[ 93%] Linking C static library libavrdude.a
[ 93%] Built target libavrdude
Scanning dependencies of target avrdude
[ 95%] Building C object src/CMakeFiles/avrdude.dir/main.c.o
[ 96%] Building C object src/CMakeFiles/avrdude.dir/term.c.o
[ 98%] Building C object src/CMakeFiles/avrdude.dir/whereami.c.o
[100%] Linking C executable avrdude
[100%] Built target avrdude
mcuee@rpi400:~/build/avrdude-7.0 $ grep linux build_linux/src/avrdude.conf*
#To check if your avrdude build has support for the linuxgpio programmer compiled in,
#use -c?type on the command line and look for linuxgpio in the list. If it's not available
#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude.
#  id    = "linuxgpio";
#  type  = "linuxgpio";
# This programmer uses the built in linux SPI bus devices to program an
   id = "linuxspi";
   type = "linuxspi";
mcuee commented 1 year ago

For 7.0 release, build.sh also works fine.

mcuee@rpi400:~/build/avrdude-7.0 $ ./build.sh
-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Git: /usr/bin/git (found version "2.30.2")
-- Found FLEX: /usr/bin/flex (found version "2.6.4")
-- Found BISON: /usr/bin/bison (found version "3.7.5")
-- Looking for libelf.h
-- Looking for libelf.h - found
-- Looking for libelf/libelf.h
-- Looking for libelf/libelf.h - not found
-- Looking for usb.h
-- Looking for usb.h - found
-- Looking for lusb0_usb.h
-- Looking for lusb0_usb.h - not found
-- Looking for libusb.h
-- Looking for libusb.h - not found
-- Looking for libusb-1.0/libusb.h
-- Looking for libusb-1.0/libusb.h - found
-- Looking for hidapi/hidapi.h
-- Looking for hidapi/hidapi.h - found
-- Looking for ftdi_tcioflush
-- Looking for ftdi_tcioflush - found
-- Configuration summary:
-- ----------------------
-- DO HAVE    libelf
-- DO HAVE    libusb
-- DO HAVE    libusb_1_0
-- DO HAVE    libhidapi
-- DON'T HAVE libftdi
-- DO HAVE    libftdi1
-- DISABLED   doc
-- DISABLED   parport
-- ENABLED    linuxgpio
-- ENABLED    linuxspi
-- ----------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mcuee/build/avrdude-7.0/build_linux
[  1%] [BISON][Parser] Building parser with bison 3.7.5
[  3%] [FLEX][Parser] Building scanner with flex 2.6.4
Scanning dependencies of target libavrdude
[  4%] Building C object src/CMakeFiles/libavrdude.dir/arduino.c.o
[  6%] Building C object src/CMakeFiles/libavrdude.dir/avr.c.o
[  8%] Building C object src/CMakeFiles/libavrdude.dir/avr910.c.o
[  9%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi.c.o
[ 11%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi_tpi.c.o
[ 13%] Building C object src/CMakeFiles/libavrdude.dir/avrpart.c.o
[ 14%] Building C object src/CMakeFiles/libavrdude.dir/bitbang.c.o
[ 16%] Building C object src/CMakeFiles/libavrdude.dir/buspirate.c.o
[ 18%] Building C object src/CMakeFiles/libavrdude.dir/butterfly.c.o
[ 19%] Building C object src/CMakeFiles/libavrdude.dir/config.c.o
[ 21%] Building C object src/CMakeFiles/libavrdude.dir/confwin.c.o
[ 22%] Building C object src/CMakeFiles/libavrdude.dir/crc16.c.o
[ 24%] Building C object src/CMakeFiles/libavrdude.dir/dfu.c.o
[ 26%] Building C object src/CMakeFiles/libavrdude.dir/fileio.c.o
[ 27%] Building C object src/CMakeFiles/libavrdude.dir/flip1.c.o
[ 29%] Building C object src/CMakeFiles/libavrdude.dir/flip2.c.o
[ 31%] Building C object src/CMakeFiles/libavrdude.dir/ft245r.c.o
[ 32%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkI.c.o
[ 34%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkII.c.o
[ 36%] Building C object src/CMakeFiles/libavrdude.dir/jtag3.c.o
[ 37%] Building C object src/CMakeFiles/libavrdude.dir/linuxgpio.c.o
[ 39%] Building C object src/CMakeFiles/libavrdude.dir/linuxspi.c.o
[ 40%] Building C object src/CMakeFiles/libavrdude.dir/lists.c.o
[ 42%] Building C object src/CMakeFiles/libavrdude.dir/micronucleus.c.o
[ 44%] Building C object src/CMakeFiles/libavrdude.dir/par.c.o
[ 45%] Building C object src/CMakeFiles/libavrdude.dir/pgm.c.o
[ 47%] Building C object src/CMakeFiles/libavrdude.dir/pgm_type.c.o
[ 49%] Building C object src/CMakeFiles/libavrdude.dir/pickit2.c.o
[ 50%] Building C object src/CMakeFiles/libavrdude.dir/pindefs.c.o
[ 52%] Building C object src/CMakeFiles/libavrdude.dir/ppi.c.o
[ 54%] Building C object src/CMakeFiles/libavrdude.dir/ppiwin.c.o
[ 55%] Building C object src/CMakeFiles/libavrdude.dir/serbb_posix.c.o
[ 57%] Building C object src/CMakeFiles/libavrdude.dir/serbb_win32.c.o
[ 59%] Building C object src/CMakeFiles/libavrdude.dir/ser_avrdoper.c.o
[ 60%] Building C object src/CMakeFiles/libavrdude.dir/ser_posix.c.o
[ 62%] Building C object src/CMakeFiles/libavrdude.dir/ser_win32.c.o
[ 63%] Building C object src/CMakeFiles/libavrdude.dir/serialupdi.c.o
[ 65%] Building C object src/CMakeFiles/libavrdude.dir/stk500.c.o
[ 67%] Building C object src/CMakeFiles/libavrdude.dir/stk500v2.c.o
/home/mcuee/build/avrdude-7.0/src/stk500v2.c: In function ‘stk500v2_setparm’:
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3098:6: warning: ‘current_value’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3098 |   if (value == current_value) {
      |      ^
/home/mcuee/build/avrdude-7.0/src/stk500v2.c: In function ‘stk500v2_print_parms1’:
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3295:24: warning: ‘osc_cmatch’ may be used uninitialized in this function
-Wmaybe-uninitialized]
 3295 |       f /= (osc_cmatch + 1);
      |            ~~~~~~~~~~~~^~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3242:35: warning: ‘osc_pscale’ may be used uninitialized in this function
-Wmaybe-uninitialized]
 3242 |   unsigned char vtarget, vadjust, osc_pscale, osc_cmatch, sck_duration =0; //XXX 0 is not correct, check caller
      |                                   ^~~~~~~~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3278:5: warning: ‘vadjust’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3278 |     avrdude_message(MSG_INFO, "%sVaref           : %.1f V\n", p, vadjust / 10.0);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mcuee/build/avrdude-7.0/src/stk500v2.c:3267:5: warning: ‘vtarget’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3267 |     avrdude_message(MSG_INFO, "%sVtarget         : %.1f V\n", p, vtarget / 10.0);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 68%] Building C object src/CMakeFiles/libavrdude.dir/stk500generic.c.o
[ 70%] Building C object src/CMakeFiles/libavrdude.dir/teensy.c.o
[ 72%] Building C object src/CMakeFiles/libavrdude.dir/updi_link.c.o
[ 73%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm.c.o
[ 75%] Building C object src/CMakeFiles/libavrdude.dir/updi_readwrite.c.o
[ 77%] Building C object src/CMakeFiles/libavrdude.dir/updi_state.c.o
[ 78%] Building C object src/CMakeFiles/libavrdude.dir/usbasp.c.o
[ 80%] Building C object src/CMakeFiles/libavrdude.dir/usb_hidapi.c.o
[ 81%] Building C object src/CMakeFiles/libavrdude.dir/usb_libusb.c.o
[ 83%] Building C object src/CMakeFiles/libavrdude.dir/usbtiny.c.o
[ 85%] Building C object src/CMakeFiles/libavrdude.dir/update.c.o
[ 86%] Building C object src/CMakeFiles/libavrdude.dir/wiring.c.o
[ 88%] Building C object src/CMakeFiles/libavrdude.dir/xbee.c.o
[ 90%] Building C object src/CMakeFiles/libavrdude.dir/__/lexer.c.o
[ 91%] Building C object src/CMakeFiles/libavrdude.dir/__/config_gram.c.o
[ 93%] Linking C static library libavrdude.a
[ 93%] Built target libavrdude
Scanning dependencies of target avrdude
[ 95%] Building C object src/CMakeFiles/avrdude.dir/main.c.o
[ 96%] Building C object src/CMakeFiles/avrdude.dir/term.c.o
[ 98%] Building C object src/CMakeFiles/avrdude.dir/whereami.c.o
[100%] Linking C executable avrdude
[100%] Built target avrdude

Build succeeded.

Run

sudo cmake --build build_linux --target install

to install.

mcuee@rpi400:~/build/avrdude-7.0 $ grep linux build_linux/src/avrdude.conf*
#To check if your avrdude build has support for the linuxgpio programmer compiled in,
#use -c?type on the command line and look for linuxgpio in the list. If it's not available
#you need pass the --enable-linuxgpio=yes option to configure and recompile avrdude.
#  id    = "linuxgpio";
#  type  = "linuxgpio";
# This programmer uses the built in linux SPI bus devices to program an
   id = "linuxspi";
   type = "linuxspi";
mcuee commented 1 year ago

Now we need to find out which commit is causing the issue. BTW, the issue is there for 32bit build as well, not only for 64bit. I think it may have something to with the changes in dealing with avrdude.conf.in, maybe CMake related.

I can confirm that https://github.com/avrdudes/avrdude/commit/07f1f60020525aa9023cd2c4f17b82f32296dde1 is still okay. https://github.com/avrdudes/avrdude/commit/93df07866a6eb92e126e7bd4e55f10f50e286008 is also okay. https://github.com/avrdudes/avrdude/commit/db8b04f4233ae2d547606703c829ee88acfc9281 is still good. https://github.com/avrdudes/avrdude/commit/94203eb4418105d3d0a7a9c292fe6feaa3aaea68 is bad. https://github.com/avrdudes/avrdude/commit/f172f0537237e666a08c6839ebb428338f7df482 is bad. https://github.com/avrdudes/avrdude/commit/77430519266f7e7a7f9caae9f2c7a3869c17cdba is bad.

So the blame goes to https://github.com/avrdudes/avrdude/commit/77430519266f7e7a7f9caae9f2c7a3869c17cdba.

mcuee commented 1 year ago

@mariusgreuel This points to CMake change problem in https://github.com/avrdudes/avrdude/commit/77430519266f7e7a7f9caae9f2c7a3869c17cdba , please take a look. Thanks.

mcuee@rpi400:~/build/avrdude $ cmake --version
cmake version 3.18.4

CMake suite maintained and supported by Kitware (kitware.com/cmake).

mcuee@rpi400:~/build/avrdude $ git checkout 7743051
Note: switching to '7743051'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 7743051 Merge pull request #1095 from mariusgreuel/pr-fix-multiline-configure

mcuee@rpi400:~/build/avrdude $ rm -rf build_linux/
mcuee@rpi400:~/build/avrdude $ ./build.sh
-- The C compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Found Git: /usr/bin/git (found version "2.30.2")
-- Found FLEX: /usr/bin/flex (found version "2.6.4")
-- Found BISON: /usr/bin/bison (found version "3.7.5")
-- Looking for libelf.h
-- Looking for libelf.h - found
-- Looking for libelf/libelf.h
-- Looking for libelf/libelf.h - not found
-- Looking for usb.h
-- Looking for usb.h - found
-- Looking for lusb0_usb.h
-- Looking for lusb0_usb.h - not found
-- Looking for libusb.h
-- Looking for libusb.h - not found
-- Looking for libusb-1.0/libusb.h
-- Looking for libusb-1.0/libusb.h - found
-- Looking for hidapi/hidapi.h
-- Looking for hidapi/hidapi.h - found
-- Looking for ftdi_tcioflush
-- Looking for ftdi_tcioflush - found
-- Configuration summary:
-- ----------------------
-- DO HAVE    libelf
-- DO HAVE    libusb
-- DO HAVE    libusb_1_0
-- DO HAVE    libhidapi
-- DON'T HAVE libftdi
-- DO HAVE    libftdi1
-- DISABLED   doc
-- DISABLED   parport
-- ENABLED    linuxgpio
-- ENABLED    linuxspi
-- ----------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mcuee/build/avrdude/build_linux
[  1%] [BISON][Parser] Building parser with bison 3.7.5
[  3%] [FLEX][Parser] Building scanner with flex 2.6.4
Scanning dependencies of target libavrdude
[  4%] Building C object src/CMakeFiles/libavrdude.dir/arduino.c.o
[  6%] Building C object src/CMakeFiles/libavrdude.dir/avr.c.o
[  7%] Building C object src/CMakeFiles/libavrdude.dir/avr910.c.o
[  9%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi.c.o
[ 10%] Building C object src/CMakeFiles/libavrdude.dir/avrftdi_tpi.c.o
[ 12%] Building C object src/CMakeFiles/libavrdude.dir/avrpart.c.o
[ 14%] Building C object src/CMakeFiles/libavrdude.dir/bitbang.c.o
[ 15%] Building C object src/CMakeFiles/libavrdude.dir/buspirate.c.o
[ 17%] Building C object src/CMakeFiles/libavrdude.dir/butterfly.c.o
[ 18%] Building C object src/CMakeFiles/libavrdude.dir/config.c.o
[ 20%] Building C object src/CMakeFiles/libavrdude.dir/confwin.c.o
[ 21%] Building C object src/CMakeFiles/libavrdude.dir/crc16.c.o
[ 23%] Building C object src/CMakeFiles/libavrdude.dir/dfu.c.o
[ 25%] Building C object src/CMakeFiles/libavrdude.dir/fileio.c.o
[ 26%] Building C object src/CMakeFiles/libavrdude.dir/flip1.c.o
[ 28%] Building C object src/CMakeFiles/libavrdude.dir/flip2.c.o
[ 29%] Building C object src/CMakeFiles/libavrdude.dir/ft245r.c.o
[ 31%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkI.c.o
[ 32%] Building C object src/CMakeFiles/libavrdude.dir/jtagmkII.c.o
[ 34%] Building C object src/CMakeFiles/libavrdude.dir/jtag3.c.o
[ 35%] Building C object src/CMakeFiles/libavrdude.dir/linuxgpio.c.o
[ 37%] Building C object src/CMakeFiles/libavrdude.dir/linuxspi.c.o
[ 39%] Building C object src/CMakeFiles/libavrdude.dir/lists.c.o
[ 40%] Building C object src/CMakeFiles/libavrdude.dir/micronucleus.c.o
[ 42%] Building C object src/CMakeFiles/libavrdude.dir/par.c.o
[ 43%] Building C object src/CMakeFiles/libavrdude.dir/pgm.c.o
[ 45%] Building C object src/CMakeFiles/libavrdude.dir/pgm_type.c.o
[ 46%] Building C object src/CMakeFiles/libavrdude.dir/pickit2.c.o
[ 48%] Building C object src/CMakeFiles/libavrdude.dir/pindefs.c.o
[ 50%] Building C object src/CMakeFiles/libavrdude.dir/ppi.c.o
[ 51%] Building C object src/CMakeFiles/libavrdude.dir/ppiwin.c.o
[ 53%] Building C object src/CMakeFiles/libavrdude.dir/serbb_posix.c.o
[ 54%] Building C object src/CMakeFiles/libavrdude.dir/serbb_win32.c.o
[ 56%] Building C object src/CMakeFiles/libavrdude.dir/ser_avrdoper.c.o
[ 57%] Building C object src/CMakeFiles/libavrdude.dir/ser_posix.c.o
[ 59%] Building C object src/CMakeFiles/libavrdude.dir/ser_win32.c.o
[ 60%] Building C object src/CMakeFiles/libavrdude.dir/serialupdi.c.o
[ 62%] Building C object src/CMakeFiles/libavrdude.dir/stk500.c.o
[ 64%] Building C object src/CMakeFiles/libavrdude.dir/stk500v2.c.o
[ 65%] Building C object src/CMakeFiles/libavrdude.dir/stk500generic.c.o
[ 67%] Building C object src/CMakeFiles/libavrdude.dir/teensy.c.o
[ 68%] Building C object src/CMakeFiles/libavrdude.dir/updi_link.c.o
[ 70%] Building C object src/CMakeFiles/libavrdude.dir/updi_nvm.c.o
[ 71%] Building C object src/CMakeFiles/libavrdude.dir/updi_readwrite.c.o
[ 73%] Building C object src/CMakeFiles/libavrdude.dir/updi_state.c.o
[ 75%] Building C object src/CMakeFiles/libavrdude.dir/usbasp.c.o
[ 76%] Building C object src/CMakeFiles/libavrdude.dir/usb_hidapi.c.o
[ 78%] Building C object src/CMakeFiles/libavrdude.dir/usb_libusb.c.o
[ 79%] Building C object src/CMakeFiles/libavrdude.dir/usbtiny.c.o
[ 81%] Building C object src/CMakeFiles/libavrdude.dir/update.c.o
[ 82%] Building C object src/CMakeFiles/libavrdude.dir/wiring.c.o
[ 84%] Building C object src/CMakeFiles/libavrdude.dir/xbee.c.o
[ 85%] Building C object src/CMakeFiles/libavrdude.dir/__/lexer.c.o
[ 87%] Building C object src/CMakeFiles/libavrdude.dir/__/config_gram.c.o
[ 89%] Linking C static library libavrdude.a
[ 89%] Built target libavrdude
Scanning dependencies of target avrdude
[ 90%] Building C object src/CMakeFiles/avrdude.dir/main.c.o
[ 92%] Building C object src/CMakeFiles/avrdude.dir/term.c.o
[ 93%] Building C object src/CMakeFiles/avrdude.dir/avrintel.c.o
[ 95%] Building C object src/CMakeFiles/avrdude.dir/developer_opts.c.o
[ 96%] Building C object src/CMakeFiles/avrdude.dir/whereami.c.o
[ 98%] Linking C executable avrdude
[ 98%] Built target avrdude
Scanning dependencies of target conf
[100%] Generating avrdude.conf
CMake Warning (dev) at /home/mcuee/build/avrdude/src/configure.cmake:21 (if):
  if given arguments:

    "ON"

  An argument named "ON" appears in a conditional statement.  Policy CMP0012
  is not set: if() recognizes numbers and boolean constants.  Run "cmake
  --help-policy CMP0012" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.
Call Stack (most recent call first):
  /home/mcuee/build/avrdude/src/configure.cmake:31 (configure_option)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /home/mcuee/build/avrdude/src/configure.cmake:21 (if):
  if given arguments:

    "ON"

  An argument named "ON" appears in a conditional statement.  Policy CMP0012
  is not set: if() recognizes numbers and boolean constants.  Run "cmake
  --help-policy CMP0012" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.
Call Stack (most recent call first):
  /home/mcuee/build/avrdude/src/configure.cmake:32 (configure_option)
This warning is for project developers.  Use -Wno-dev to suppress it.

[100%] Built target conf

Build succeeded.

Run

sudo cmake --build build_linux --target install

to install.

mcuee@rpi400:~/build/avrdude $ grep linux build_linux/src/avrdude.conf*
mcuee@rpi400:~/build/avrdude $
mariusgreuel commented 1 year ago

This points to CMake change problem in https://github.com/avrdudes/avrdude/commit/77430519266f7e7a7f9caae9f2c7a3869c17cdba , please take a look.

You are correct, thank you for figuring that out. Seems like there is a problem with verbal switches like ON and OFF.

@seandepagnier As a temporary workaround, please use the procedure at https://github.com/avrdudes/avrdude/wiki/Building-AVRDUDE-for-Linux and replace ON with 1.

seandepagnier commented 1 year ago

Thank you for taking a look at this! I managed to get a working version.

Since this is understood I trust it will be fixed and can close this.

mcuee commented 1 year ago

I will keep this open until it is fixed.

seandepagnier commented 1 year ago

Sorry about (aarch64) in the title, I thought it was relevant but is not. Not sure how to change the title.

debian packages include avrdude without linuxspi support now.. this should stay open until linuxspi is built without manually specifying flags to cmake

mcuee commented 1 year ago

We can not control how Debian packages avrdude. Usually they Usually they are outdated anyway. I build the packages I am interested in from the source (libusb, hidapi, libftdi, openocd, avrdude, etc).

I think the easiest way to build avrdude is to use build.sh. CMake flags will probably be required.

BTW, I usually use Debian or Ubuntu for my Linux machines (x86_64 or ARM32/64, physical machine or VM or containers, except OpenWRT for router), But then I will build the packages I am interested in from the source (libusb, hidapi, libftdi, openocd, avrdude, etc).

seandepagnier commented 1 year ago

I realize you don't control debian builds, but they simply use the defaults without specifying any special flags which means linuxspi doesn't work anymore.

Of course developers of avrdude will build from source even some dependencies from source, but the majority of users do not.

mcuee commented 1 year ago

Wiki updated to use 1 instead of ON.

mcuee commented 1 year ago

PR #1240 has been merged as a work-around for this issue. I will still keep this issue open.

mcuee commented 1 year ago

But this can be a low priority now since the Wiki and build.sh have been updated.

mcuee commented 1 year ago

1261 may be a similar issue.

mcuee commented 1 year ago

@mariusgreuel

Do you still want to work on this or we can close this issue? Thanks.

seandepagnier commented 1 year ago

I tested with the new build.sh and it works, but invoking make directly does not. Wouldn't it be preferable to work without build.sh?

mcuee commented 1 year ago

I tested with the new build.sh and it works, but invoking make directly does not. Wouldn't it be preferable to work without build.sh?

I am not so sure what you mean by "invoking Make directly"?

You can create your own Makefile to replace build.sh if you like.

Eg: from @stefanrueger for Linux.

all:
    cmake --build build_linux

install:
    cmake --build build_linux; sudo cmake --build build_linux --target install

new:
    sudo rm -rf build_linux
    cmake -D BUILD_DOC=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo -D HAVE_LINUXGPIO=1 -D HAVE_LINUXSPI=1 -D HAVE_PARPORT=1 -B build_linux
    cmake --build build_linux
seandepagnier commented 1 year ago

When I first cloned avrdude I noticed CMakeLists.txt so I run cmake directly subconsciously...

So my invoking directly I mean just running cmake without passing -D HAVE_LINUXSPI=1 instead making it detect I have /dev/spi automatically?

mcuee commented 1 year ago

When I first cloned avrdude I noticed CMakeLists.txt so I run cmake directly subconsciously...

So my invoking directly I mean just running cmake without passing -D HAVE_LINUXSPI=1 instead making it detect I have /dev/spi automatically?

No it will not detect /dev/spi directly and you have to pass -D HAVE_LINUXSPI=1 option to CMake.