Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fails to compile with SDK 1.2.0 and 1.3.0 #25

Closed
bablokb opened this issue Jan 30, 2022 · 9 comments
Closed

Fails to compile with SDK 1.2.0 and 1.3.0 #25

bablokb opened this issue Jan 30, 2022 · 9 comments

Comments

@bablokb
Copy link
Contributor

bablokb commented Jan 30, 2022

Just a note to document this problem and a workaround:

The project fails to compile with pico-sdk 1.2.0. "mutex_is_initialized" is mispelled in pico/mutex.h as "mutex_is_initialzed".

The 1.3.0 sdk fixed this error, but there is a bigger regression which prevents compilation. That is fixed in the develop-branch for the next release.

I decided to stick with 1.2.0 and fix the spelling in pico/mutex.h. After that, I could successfully build the examples.

@Python380
Copy link

Python380 commented Jul 28, 2022

SDK 1.4.0 (as far as I can tell) does not work either.
I have tried to find the origin of the linker errors, but as of yet, have not fully solved the problem.

@Python380
Copy link

@Python380
Copy link

Current errors (Using NMake on Windows 11):

C:\Users\henri\pico\pico_sd\build>nmake

Microsoft (R) Program Maintenance Utility Version 14.30.30706.0
Copyright (C) Microsoft Corporation.  All rights reserved.

PICO_SDK_PATH is C:/Users/henri/pico/pico-sdk
PICO platform is rp2040.
Build type is Release
PICO target board is pico.
Using board configuration from C:/Users/henri/pico/pico-sdk/src/boards/include/boards/pico.h
TinyUSB available at C:/Users/henri/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/henri/pico/pico_sd/build
[  1%] Performing build step for 'ELF2UF2Build'

Microsoft (R) Program Maintenance Utility Version 14.30.30706.0
Copyright (C) Microsoft Corporation.  All rights reserved.

[100%] Built target elf2uf2
[  2%] No install step for 'ELF2UF2Build'
[  3%] Completed 'ELF2UF2Build'
[  8%] Built target ELF2UF2Build
Scanning dependencies of target bs2_default
[ 10%] Built target bs2_default
[ 12%] Built target bs2_default_padded_checksummed_asm
Scanning dependencies of target sd_fat_spi
Consolidate compiler generated dependencies of target sd_fat_spi
[ 13%] Building C object CMakeFiles/sd_fat_spi.dir/main.c.obj
[ 14%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[ 15%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
[ 16%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
[ 17%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
[ 18%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
[ 19%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
[ 20%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
[ 21%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_sync/sem.c.obj
[ 22%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_sync/lock_core.c.obj
[ 23%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_time/time.c.obj
[ 24%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_time/timeout_helper.c.obj
[ 25%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
[ 26%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_util/datetime.c.obj
[ 27%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_util/pheap.c.obj
[ 28%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_util/queue.c.obj
[ 29%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_sync/mutex.c.obj
[ 30%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/common/pico_sync/critical_section.c.obj
[ 31%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
[ 32%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
[ 33%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
[ 34%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
[ 35%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
[ 36%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
[ 37%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
[ 38%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
[ 39%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_printf/printf.c.obj
[ 40%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
[ 41%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
[ 42%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_divider/divider.S.obj
[ 43%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
[ 44%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
[ 45%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_double/double_math.c.obj
[ 46%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
[ 47%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
[ 48%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
[ 50%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
[ 51%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_float/float_math.c.obj
[ 52%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
[ 53%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
[ 54%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
[ 55%] Building ASM object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
[ 56%] Building CXX object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
[ 57%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
[ 58%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
[ 59%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_stdio_usb/reset_interface.c.obj
[ 60%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c.obj
[ 61%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c.obj
[ 62%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
[ 63%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
[ 64%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/device/usbd.c.obj
[ 65%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/device/usbd_control.c.obj
[ 66%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
[ 67%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
[ 68%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
[ 69%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
[ 70%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
[ 71%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
[ 72%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
[ 73%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
[ 74%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
[ 75%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
[ 76%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
[ 77%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/class/video/video_device.c.obj
[ 78%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/tusb.c.obj
[ 79%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
[ 80%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
[ 81%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/pico_unique_id/unique_id.c.obj
[ 82%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_flash/flash.c.obj
[ 83%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/ff14a/source/ffsystem.c.obj
[ 84%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/ff14a/source/ffunicode.c.obj
[ 85%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/ff14a/source/ff.c.obj
In function 'gen_numname',
    inlined from 'dir_register' at C:\Users\henri\pico\pico_sd\lib\no-OS-FatFS-SD-SPI-RPi-Pico\FatFs_SPI\ff14a\source\ff.c:2573:4:
C:\Users\henri\pico\pico_sd\lib\no-OS-FatFS-SD-SPI-RPi-Pico\FatFs_SPI\ff14a\source\ff.c:2048:8: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
 2048 |  ns[i] = '~';
      |  ~~~~~~^~~~~
C:\Users\henri\pico\pico_sd\lib\no-OS-FatFS-SD-SPI-RPi-Pico\FatFs_SPI\ff14a\source\ff.c: In function 'dir_register':
C:\Users\henri\pico\pico_sd\lib\no-OS-FatFS-SD-SPI-RPi-Pico\FatFs_SPI\ff14a\source\ff.c:2019:7: note: at offset -1 to object 'ns' with size 8 declared here
 2019 |  BYTE ns[8], c;
      |       ^~
[ 86%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/sd_spi.c.obj
[ 87%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/demo_logging.c.obj
[ 88%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/spi.c.obj
[ 89%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/sd_card.c.obj
[ 90%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/crc.c.obj
[ 91%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj
[ 92%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/f_util.c.obj
[ 93%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/ff_stdio.c.obj
[ 94%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/my_debug.c.obj
[ 95%] Building C object CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/rtc.c.obj
[ 96%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_spi/spi.c.obj
[ 97%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_dma/dma.c.obj
[ 98%] Building C object CMakeFiles/sd_fat_spi.dir/C_/Users/henri/pico/pico-sdk/src/rp2_common/hardware_rtc/rtc.c.obj
[100%] Linking CXX executable sd_fat_spi.elf
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/sd_card.c.obj: in function `sd_init_driver':
sd_card.c:(.text.sd_init_driver+0x42): undefined reference to `sd_get_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: sd_card.c:(.text.sd_init_driver+0x4c): undefined reference to `sd_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: sd_card.c:(.text.sd_init_driver+0x86): undefined reference to `spi_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: sd_card.c:(.text.sd_init_driver+0x94): undefined reference to `spi_get_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj: in function `disk_status':
glue.c:(.text.disk_status+0x2): undefined reference to `sd_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj: in function `disk_initialize':
glue.c:(.text.disk_initialize+0x2): undefined reference to `sd_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj: in function `disk_read':
glue.c:(.text.disk_read+0xa): undefined reference to `sd_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj: in function `disk_write':
glue.c:(.text.disk_write+0xa): undefined reference to `sd_get_by_num'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/lib/no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/src/glue.c.obj: in function `disk_ioctl':
glue.c:(.text.disk_ioctl+0x6): undefined reference to `sd_get_by_num'
collect2.exe: error: ld returned 1 exit status
NMAKE : fatal error U1077: 'C:\PROGRA~2\GNUARM~1\102020~1\bin\AR10B2~1.EXE' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.

@Python380
Copy link

Changing (FatFs_SPI/CMakeLists.txt)

add_library(FatFs_SPI INTERFACE)
target_sources(FatFs_SPI INTERFACE
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffsystem.c
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffunicode.c
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ff.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_spi.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/demo_logging.c
#    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/hw_config.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/spi.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_card.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/crc.c
    ${CMAKE_CURRENT_LIST_DIR}/src/glue.c
    ${CMAKE_CURRENT_LIST_DIR}/src/f_util.c
    ${CMAKE_CURRENT_LIST_DIR}/src/ff_stdio.c
    ${CMAKE_CURRENT_LIST_DIR}/src/my_debug.c
    ${CMAKE_CURRENT_LIST_DIR}/src/rtc.c
)
target_include_directories(FatFs_SPI INTERFACE
    ff14a/source
    sd_driver
    include
)
target_link_libraries(FatFs_SPI INTERFACE
        hardware_spi
        hardware_dma
        hardware_rtc
        pico_stdlib
)

to

add_library(FatFs_SPI INTERFACE
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffsystem.c
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ffunicode.c
    ${CMAKE_CURRENT_LIST_DIR}/ff14a/source/ff.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_spi.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/demo_logging.c
#    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/hw_config.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/spi.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/sd_card.c
    ${CMAKE_CURRENT_LIST_DIR}/sd_driver/crc.c
    ${CMAKE_CURRENT_LIST_DIR}/src/glue.c
    ${CMAKE_CURRENT_LIST_DIR}/src/f_util.c
    ${CMAKE_CURRENT_LIST_DIR}/src/ff_stdio.c
    ${CMAKE_CURRENT_LIST_DIR}/src/my_debug.c
    ${CMAKE_CURRENT_LIST_DIR}/src/rtc.c
)
target_include_directories(FatFs_SPI INTERFACE
    ff14a/source
    sd_driver
    include
)
target_link_libraries(FatFs_SPI INTERFACE
        hardware_spi
        hardware_dma
        hardware_rtc
        pico_stdlib
)

fails with the following:

[ 15%] Linking CXX executable sd_fat_spi.elf
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: CMakeFiles/sd_fat_spi.dir/main.c.obj: in function `main':
main.c:(.text.startup.main+0x36): undefined reference to `sd_init_driver'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x4e): undefined reference to `f_mount'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x64): undefined reference to `f_open'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x70): undefined reference to `f_printf'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x7c): undefined reference to `f_printf'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x86): undefined reference to `f_close'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0xa6): undefined reference to `f_close'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0xb4): undefined reference to `f_close'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0xc0): undefined reference to `f_open'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0xee): undefined reference to `f_gets'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0xfe): undefined reference to `f_close'
c:/progra~2/gnuarm~1/102020~1/bin/../lib/gcc/arm-none-eabi/10.2.1/../../../../arm-none-eabi/bin/ld.exe: main.c:(.text.startup.main+0x116): undefined reference to `f_mount'
collect2.exe: error: ld returned 1 exit status
NMAKE : fatal error U1077: 'C:\PROGRA~2\GNUARM~1\102020~1\bin\AR10B2~1.EXE' : return code '0x1'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.30.30705\bin\HostX64\x64\nmake.exe"' : return code '0x2'
Stop.

@Python380
Copy link

reverting change to makefile & adding a hw_config.c in the sd_driver directory (and uncommenting commented line in makefile) results in the same error.

@Python380
Copy link

This is where I get stumped... certainly seems like sd_init_driver is defined to me...

@Python380
Copy link

Did not update to pico-sdk 1.4.0 properly.
Tried to remove, reclone, and initialize submodules.
Now the only issue was that the way the lib is structured, it requires you to copy the hw_config.c from the example directory in the repo to your project or FatFs_SPI/sd_driver and updating the relevant cmake files...

Have not tested properly, but that gets it to build.

@NBalciunas
Copy link

Did not update to pico-sdk 1.4.0 properly. Tried to remove, reclone, and initialize submodules. Now the only issue was that the way the lib is structured, it requires you to copy the hw_config.c from the example directory in the repo to your project or FatFs_SPI/sd_driver and updating the relevant cmake files...

Have not tested properly, but that gets it to build.

Worked for me, thanks

@carlk3
Copy link
Owner

carlk3 commented Aug 15, 2022

I probably should have documented this somewhere, but Pull Request #12 Dynamic configuration (in response to Issue #11 Configurable GPIO pins) moved the hw_config.c file out of the library itself and into the examples, so if you are migrating an application from a version prior to commit 2260521d602b8427fb779275cf51af6702312ac2 (Sep 5, 2021), you will need to grab a copy from one of the examples (and customize it if necessary), or write some other implementation (e.g., see dynamic_config_example/hw_config.cpp), and put it somewhere persistent. (The file name is arbitrary, and it can be anywhere that it will be picked up by CMake. It just has to provide an implementation of the interface specified by no-OS-FatFS-SD-SPI-RPi-Pico/FatFs_SPI/sd_driver/hw_config.h.)

I have just pulled SDK version 1.4.0 and no-OS-FatFS-SD-SPI-RPi-Pico/example builds cleanly with that.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants