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

pico-w-blink-sdk | cmake --build build | fail #62

Open
LunaTMT opened this issue Oct 9, 2024 · 4 comments
Open

pico-w-blink-sdk | cmake --build build | fail #62

LunaTMT opened this issue Oct 9, 2024 · 4 comments

Comments

@LunaTMT
Copy link

LunaTMT commented Oct 9, 2024

$ cd pico-w-blink-sdk

echo $TOOLCHAINS
echo $PICO_BOARD
echo $PICO_SDK_PATH
echo $PICO_TOOLCHAIN_PATH

swift-6.0.1
pico_w
/home/taylor/pico-sdk
/usr/bin/
   
which arm-none-eabi-gcc
/usr/bin/arm-none-eabi-gcc

First build with Ninja works fine:

$ cmake -B build -G Ninja .

PICO_SDK_PATH is /home/taylor/pico-sdk
Target board (PICO_BOARD) is 'pico_w'.
Using board configuration from /home/taylor/pico-sdk/src/boards/include/boards/pico_w.h
Pico Platform (PICO_PLATFORM) is 'rp2040'.
Build type is Release
TinyUSB available at /home/taylor/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at /home/taylor/pico-sdk/lib/btstack
cyw43-driver available at /home/taylor/pico-sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/taylor/pico-sdk/lib/lwip
Pico W Wi-Fi build support available.
mbedtls available at /home/taylor/pico-sdk/lib/mbedtls
-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/b

Running cmake build:

$cmake --build build
[1/77] Generating _swiftcode.o
FAILED: _swiftcode.o /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/build/_swiftcode.o 
cd /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/build && /usr/local/swift/usr/bin/swiftc -target armv6m-none-none-eabi -Xcc -mfloat-abi=soft -Xcc -fshort-enums -Xcc -DCYW43_LWIP -Xcc -DPICO_CYW43_ARCH_THREADSAFE_BACKGROUND -Xcc -I~/pico-sdk/lib/lwip/src/include -Xcc -I/home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/include -Xcc -I~/pico-sdk/src/common/pico_stdlib_headers/include -Xcc -I~/pico-sdk/src/rp2040/hardware_structs/include -Xcc -I~/pico-sdk/src/rp2_common/hardware_base/include -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library $( echo '/home/taylor/pico-sdk/src/common/pico_stdlib_headers/include;/home/taylor/pico-sdk/src/rp2_common/hardware_gpio/include;/home/taylor/pico-sdk/src/common/pico_base_headers/include;/home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/build/generated/pico_base;/home/taylor/pico-sdk/src/boards/include;/home/taylor/pico-sdk/src/rp2040/pico_platform/include;/home/taylor/pico-sdk/src/rp2040/hardware_regs/include;/home/taylor/pico-sdk/src/rp2_common/hardware_base/include;/home/taylor/pico-sdk/src/rp2_common/pico_platform_compiler/include;/home/taylor/pico-sdk/src/rp2_common/pico_platform_panic/include;/home/taylor/pico-sdk/src/rp2_common/pico_platform_sections/include;/home/taylor/pico-sdk/src/rp2040/hardware_structs/include;/home/taylor/pico-sdk/src/common/hardware_claim/include;/home/taylor/pico-sdk/src/rp2_common/hardware_sync/include;/home/taylor/pico-sdk/src/rp2_common/hardware_sync_spin_lock/include;/home/taylor/pico-sdk/src/rp2_common/hardware_irq/include;/home/taylor/pico-sdk/src/rp2_common/hardware_uart/include;/home/taylor/pico-sdk/src/rp2_common/hardware_resets/include;/home/taylor/pico-sdk/src/rp2_common/hardware_clocks/include;/home/taylor/pico-sdk/src/rp2_common/hardware_pll/include;/home/taylor/pico-sdk/src/rp2_common/hardware_vreg/include;/home/taylor/pico-sdk/src/rp2_common/hardware_watchdog/include;/home/taylor/pico-sdk/src/rp2_common/hardware_ticks/include;/home/taylor/pico-sdk/src/rp2_common/hardware_xosc/include;/home/taylor/pico-sdk/src/rp2_common/hardware_divider/include;/home/taylor/pico-sdk/src/common/pico_time/include;/home/taylor/pico-sdk/src/rp2_common/hardware_timer/include;/home/taylor/pico-sdk/src/common/pico_sync/include;/home/taylor/pico-sdk/src/common/pico_util/include;/home/taylor/pico-sdk/src/rp2_common/pico_time_adapter/include;/home/taylor/pico-sdk/src/rp2_common/pico_runtime/include;/home/taylor/pico-sdk/src/rp2_common/pico_runtime_init/include;/home/taylor/pico-sdk/src/common/pico_bit_ops_headers/include;/home/taylor/pico-sdk/src/common/pico_divider_headers/include;/home/taylor/pico-sdk/src/rp2_common/pico_double/include;/home/taylor/pico-sdk/src/rp2_common/pico_float/include;/home/taylor/pico-sdk/src/rp2_common/pico_malloc/include;/home/taylor/pico-sdk/src/rp2_common/pico_atomic/include;/home/taylor/pico-sdk/src/common/pico_binary_info/include;/home/taylor/pico-sdk/src/rp2_common/pico_printf/include;/home/taylor/pico-sdk/src/rp2_common/pico_stdio/include;/home/taylor/pico-sdk/src/rp2_common/pico_stdio_uart/include;/home/taylor/pico-sdk/src/rp2_common/pico_bootrom/include;/home/taylor/pico-sdk/src/common/boot_picoboot_headers/include;/home/taylor/pico-sdk/src/rp2_common/hardware_boot_lock/include;/home/taylor/pico-sdk/src/rp2_common/pico_int64_ops/include;/home/taylor/pico-sdk/src/rp2_common/pico_mem_ops/include;/home/taylor/pico-sdk/src/rp2040/boot_stage2/include;/home/taylor/pico-sdk/src/common/boot_picobin_headers/include;/home/taylor/pico-sdk/src/rp2_common/pico_lwip/include;/home/taylor/pico-sdk/src/rp2_common/pico_rand/include;/home/taylor/pico-sdk/src/rp2_common/pico_unique_id/include;/home/taylor/pico-sdk/src/rp2_common/hardware_flash/include;/home/taylor/pico-sdk/src/rp2_common/pico_cyw43_arch/include;/home/taylor/pico-sdk/lib/cyw43-driver/src;/home/taylor/pico-sdk/lib/cyw43-driver/firmware;/home/taylor/pico-sdk/src/rp2_common/pico_cyw43_driver/cybt_shared_bus;/home/taylor/pico-sdk/src/rp2_common/hardware_pio/include;/home/taylor/pico-sdk/src/rp2_common/hardware_dma/include;/home/taylor/pico-sdk/src/rp2_common/hardware_exception/include;/home/taylor/pico-sdk/src/rp2_common/pico_cyw43_driver/include;/home/taylor/pico-sdk/src/rp2_common/pico_async_context/include;/home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/build/pico-sdk/src/rp2_common/pico_cyw43_driver' | tr ';' '\n' | sed -e 's/\(.*\)/-Xcc -I\1/g' ) $( echo '/usr/lib/gcc/arm-none-eabi/13.2.1/include /usr/lib/gcc/arm-none-eabi/13.2.1/include-fixed /usr/lib/arm-none-eabi/include' | tr ' ' '\n' | sed -e 's/\(.*\)/-Xcc -I\1/g' ) -import-bridging-header /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/BridgingHeader.h /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/Main.swift -c -o /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/build/_swiftcode.o
error: generate-pch command failed with exit code 1 (use -v to see invocation)
/home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/BridgingHeader.h:14:10: note: in file included from /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/BridgingHeader.h:14:
12 | #pragma once
13 | 
14 | #include "pico/stdlib.h"
   |          `- note: in file included from /home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/BridgingHeader.h:14:
15 | #include "pico/cyw43_arch.h"
16 | 

/home/taylor/pico-sdk/src/common/pico_stdlib_headers/include/pico/stdlib.h:12:10: note: in file included from /home/taylor/pico-sdk/src/common/pico_stdlib_headers/include/pico/stdlib.h:12:
10 | #include "pico.h"
11 | #include "pico/stdio.h"
12 | #include "pico/time.h"
   |          `- note: in file included from /home/taylor/pico-sdk/src/common/pico_stdlib_headers/include/pico/stdlib.h:12:
13 | #include "hardware/gpio.h"
14 | #include "hardware/uart.h"

/home/taylor/pico-sdk/src/common/pico_time/include/pico/time.h:11:10: note: in file included from /home/taylor/pico-sdk/src/common/pico_time/include/pico/time.h:11:
  9 | 
 10 | #include "pico.h"
 11 | #include "hardware/timer.h"
    |          `- note: in file included from /home/taylor/pico-sdk/src/common/pico_time/include/pico/time.h:11:
 12 | 
 13 | #ifdef __cplusplus

/home/taylor/pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h:11:10: note: in file included from /home/taylor/pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h:11:
  9 | 
 10 | #include "pico.h"
 11 | #include "hardware/structs/timer.h"
    |          `- note: in file included from /home/taylor/pico-sdk/src/rp2_common/hardware_timer/include/hardware/timer.h:11:
 12 | #include "hardware/regs/intctrl.h"
 13 | 

/home/taylor/pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h:15:10: note: in file included from /home/taylor/pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h:15:
 13 |  */
 14 | 
 15 | #include "hardware/address_mapped.h"
    |          `- note: in file included from /home/taylor/pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/timer.h:15:
 16 | #include "hardware/regs/timer.h"
 17 | 

1 error generated.
<unknown>:0: error: failed to emit precompiled header '/tmp/TemporaryDirectory.zMnFpP/BridgingHeader.pch' for bridging header '/home/taylor/Desktop/swift-embedded-examples/pico-w-blink-sdk/BridgingHeader.h'
/home/taylor/pico-sdk/src/rp2_common/hardware_base/include/hardware/address_mapped.h:177:10: error: 'hardware/structs/accessctrl.h' file not found
175 | #if !PICO_RP2040
176 | // include this here to avoid the check in every other hardware/structs header that needs it
177 | #include "hardware/structs/accessctrl.h"
    |          `- error: 'hardware/structs/accessctrl.h' file not found
178 | #endif
179 | 
ninja: build stopped: subcommand failed.

On checking the existence of "accessctrl.h" it cannot be found

~/pico-sdk/src/rp2040/hardware_structs/include/hardware/structs/accessctrl.h
bash: /home/taylor/pico-
```sdk/src/rp2040/hardware_structs/include/hardware/structs/accessctrl.h: No such file or directory

But the pico-sdk is already up to date on master branch

$ cd ~/pico-sdk
git pull
Already up to date.

~/pico-sdk$ git branch

  • master

@iCMDdev
Copy link
Contributor

iCMDdev commented Oct 10, 2024

Hi! This is actually described in #59. It's a pretty long thread but it has a (temporary) solution I found. I'll make sure to create a PR in the near future (edit: PR is #63).

Long story short, why this happens: the Pico SDK compiler definitions are not passed to swiftc, so the compiler somehow thinks you're building for RP2350.

@rdlaner
Copy link

rdlaner commented Oct 20, 2024

@iCMDdev , I'm just getting started with embedded Swift and thanks to your info here was able to get the blinky example working on the pico-w. However, even after applying your changes I was still getting errors regarding missing cyw header files. As a bit of a hack, I got it working by adding these libraries, pico_lwip_arch pico_cyw43_arch_none, back to the target_link_libraries call as well as some of the CYW43 definitions. Looks like this:

target_link_libraries(swift-blinky
    pico_stdlib hardware_uart hardware_gpio pico_lwip_arch pico_cyw43_arch_none
)
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o
    COMMAND
        ${SWIFTC}
        -target ${SWIFT_TARGET} -Xcc -fshort-enums
        @${CMAKE_BINARY_DIR}/swiftc_flags.txt
        ${CLANG_ARCH_ABI_FLAGS}
        -Xcc -DCYW43_LWIP
        -Xcc -DPICO_CYW43_ARCH_THREADSAFE_BACKGROUND
        -Xcc -I$ENV{PICO_SDK_PATH}/lib/lwip/src/include
        -Xcc -I${CMAKE_CURRENT_LIST_DIR}/include
        -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library
        $$\( echo '$<TARGET_PROPERTY:swift-blinky,INCLUDE_DIRECTORIES>' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \)
        $$\( echo '${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}'             | tr ' '  '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \)
        -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h
        ${CMAKE_CURRENT_LIST_DIR}/Main.swift
        -c -o ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o
    DEPENDS
        ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h
        ${CMAKE_CURRENT_LIST_DIR}/Main.swift
)

I can't give much of an explanation yet, but I wondered if you encountered anything like this if you were building for the pico-w?

@iCMDdev
Copy link
Contributor

iCMDdev commented Oct 20, 2024

@rdlaner Pretty fun coincidence that I checked my email right when you replied 😆

However, even after applying your changes I was still getting errors regarding missing cyw header files. As a bit of a hack, I got it working by adding these libraries, pico_lwip_arch pico_cyw43_arch_none, back to the target_link_libraries call as well as some of the CYW43 definitions.

Right, yes, you need to include those libraries as well for the Pico W. I wouldn't say this is a hacky way to do it, I think it's normal / expected. My CMakeLists.txt example was pretty general one and I didn't include the W-specific libraries.

but I wondered if you encountered anything like this if you were building for the pico-w?

Yeah, I also had to include those libraries when I tested on the Pico W, and I'd say this is normal / expected. Check out the Pico W example in the PR I recently made (and maybe watch for future updates, I'll try to make this more cmake-friendly if possible. If you have any ideas / suggestions for that, they're very welcome!).

One thing I haven't tested yet is if the swiftc CYW43-specific definitions are still required, since now the compiler definitions are recursively gathered from the SDK (and they might already appear in @${CMAKE_BINARY_DIR}/swiftc_flags.txt in your example).

@iCMDdev
Copy link
Contributor

iCMDdev commented Nov 13, 2024

Hey @LunaTMT, is it working for you now? The PR I mentioned was merged. I think this can be closed.

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

3 participants