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

[question] how to configure Pico SDK to work Conan and CMake projects #16193

Open
1 task
jcar87 opened this issue May 2, 2024 · 8 comments
Open
1 task

[question] how to configure Pico SDK to work Conan and CMake projects #16193

jcar87 opened this issue May 2, 2024 · 8 comments
Assignees

Comments

@jcar87
Copy link
Contributor

jcar87 commented May 2, 2024

What is your question?

From: https://cpplang.slack.com/archives/C41CWV9HA/p1714639717500339

Profile:

[settings]
arch=armv8
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal

[conf]
tools.build:cflags=["-mcpu=cortex-m0plus -mthumb"]
tools.build:cxxflags=["-mcpu=cortex-m0plus -mthumb"]

[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip

Results in error:

$ conan build . --profile=rp2040-debug
======== Input profiles ========
Profile host:
[settings]
arch=armv6
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal
[conf]
tools.build:cflags=['-mcpu=cortex-m0plus -mthumb -nostartfiles']
tools.build:cxxflags=['-mcpu=cortex-m0plus -mthumb -nostartfiles']
[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip
Profile build:
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux
======== Computing dependency graph ========
Graph root
    conanfile.py (cbus-driver/0.0.1): /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/conanfile.py
Requirements
    lex-common/0.0.1#c5211493ddee8a419f3977d985465afa - Cache
======== Computing necessary packages ========
Requirements
    lex-common/0.0.1#c5211493ddee8a419f3977d985465afa:d8dc8394b999a822397a546e971d8b2f790ecc97#24517e713605e7bea750052318b834c5 - Cache
======== Installing packages ========
======== Installing packages ========
lex-common/0.0.1: Already installed! (1 of 1)
======== Finalizing install (deploy, generators) ========
conanfile.py (cbus-driver/0.0.1): Calling generate()
conanfile.py (cbus-driver/0.0.1): Generators folder: /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/generators
conanfile.py (cbus-driver/0.0.1): CMakeDeps necessary find_package() and targets for your CMakeLists.txt
    find_package(lex-common)
    target_link_libraries(... lex-common::lex-common)
conanfile.py (cbus-driver/0.0.1): CMakeToolchain generated: conan_toolchain.cmake
conanfile.py (cbus-driver/0.0.1): Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py (cbus-driver/0.0.1): If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py (cbus-driver/0.0.1): CMakeToolchain generated: CMakePresets.json
conanfile.py (cbus-driver/0.0.1): CMakeToolchain generated: ../../../CMakeUserPresets.json
conanfile.py (cbus-driver/0.0.1): Generating aggregated env files
conanfile.py (cbus-driver/0.0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']
======== Calling build() ========
conanfile.py (cbus-driver/0.0.1): Calling build()
conanfile.py (cbus-driver/0.0.1): Running CMake.configure()
conanfile.py (cbus-driver/0.0.1): RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="Debug" "/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver"
-- PICO_SDK_PATH not defined.
-- Using path: /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/deps/pico-sdk
PICO_SDK_PATH is /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/deps/pico-sdk
PICO platform is rp2040.
-- Using Conan toolchain: /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/generators/conan_toolchain.cmake
-- Conan toolchain: C++ Standard 17 with extensions ON
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc - broken
CMake Error at /usr/share/cmake-3.25/Modules/CMakeTestCCompiler.cmake:70 (message):
  The C compiler
    "/usr/bin/arm-none-eabi-gcc"
  is not able to compile a simple test program.
  It fails with the following output:
    Change Dir: /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeScratch/TryCompile-MQ3qZg
    
    Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_e659b/fast && /usr/bin/gmake  -f CMakeFiles/cmTC_e659b.dir/build.make CMakeFiles/cmTC_e659b.dir/build
    gmake[1]: Entering directory '/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeScratch/TryCompile-MQ3qZg'
    Building C object CMakeFiles/cmTC_e659b.dir/testCCompiler.c.obj
    /usr/bin/arm-none-eabi-gcc   -mcpu=cortex-m0plus -mthumb  -o CMakeFiles/cmTC_e659b.dir/testCCompiler.c.obj -c /home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeScratch/TryCompile-MQ3qZg/testCCompiler.c
    Linking C executable cmTC_e659b
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e659b.dir/link.txt --verbose=1
    /usr/bin/arm-none-eabi-gcc -mcpu=cortex-m0plus -mthumb  CMakeFiles/cmTC_e659b.dir/testCCompiler.c.obj -o cmTC_e659b 
    /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a(lib_a-exit.o): in function `exit':
    /build/newlib-afIbHz/newlib-3.3.0/build/arm-none-eabi/thumb/v6-m/nofp/newlib/libc/stdlib/../../../../../../../../newlib/libc/stdlib/exit.c:64: undefined reference to `_exit'
    collect2: error: ld returned 1 exit status
    gmake[1]: *** [CMakeFiles/cmTC_e659b.dir/build.make:99: cmTC_e659b] Error 1
    gmake[1]: Leaving directory '/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeScratch/TryCompile-MQ3qZg'
    gmake: *** [Makefile:127: cmTC_e659b/fast] Error 2
    
    
  
  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:27 (project)
-- Configuring incomplete, errors occurred!
See also "/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeOutput.log".
See also "/home/rini/git-stash/Testcenter.TestAutomation.Lex.Solution/Testcenter.TestAutomation.CBus.Driver/build/Debug/CMakeFiles/CMakeError.log".
ERROR: conanfile.py (cbus-driver/0.0.1): Error in build() method, line 65
        cmake.configure(cli_args=common_cmake_args)
        ConanException: Error 1 while executing

Have you read the CONTRIBUTING guide?

  • I've read the CONTRIBUTING guide
@jcar87 jcar87 self-assigned this May 2, 2024
@jcar87
Copy link
Contributor Author

jcar87 commented May 2, 2024

Assuming that the CMakeLists is configured like documented here: https://github.com/raspberrypi/pico-sdk/tree/master, with a pico_sdk_import.cmake included as part of the consumer project:

cmake_minimum_required(VERSION 3.13)

# initialize the SDK based on PICO_SDK_PATH
# note: this must happen before project()
include(pico_sdk_import.cmake)

project(my_project)

# initialize the Raspberry Pi Pico SDK
pico_sdk_init()

# rest of your project

Once the path to the SDK is located, I suspect it eventually set this as the CMAKE_TOOLCHAIN_FILE:
https://github.com/raspberrypi/pico-sdk/blob/6a7db34ff63345a7badec79ebea3aaef1712f374/cmake/preload/toolchains/pico_arm_gcc.cmake

but since it's already set by Conan upon invoking CMake, then it is skipped - and some mismatched configuration happens.

@HackXIt
Copy link

HackXIt commented May 2, 2024

Once the path to the SDK is located, I suspect it eventually set this as the CMAKE_TOOLCHAIN_FILE: https://github.com/raspberrypi/pico-sdk/blob/6a7db34ff63345a7badec79ebea3aaef1712f374/cmake/preload/toolchains/pico_arm_gcc.cmake

but since it's already set by Conan upon invoking CMake, then it is skipped - and some mismatched configuration happens.

Yes, that is the problem I think.

My initial thoughts were that I might need to create a custom Toolchain for this, but I have no idea on how to do this for the SDK.

@HackXIt
Copy link

HackXIt commented May 2, 2024

Here is a somewhat minimal example on what our CMakeLists look like in our RP2040 projects:

CMakeLists.txt
cmake_minimum_required(VERSION 3.13...3.27)
include(FetchContent)
# PICO_SDK ------------------------------------------------------------------------------
# Initialise pico_sdk from installed location
# (note this can come from environment, CMake cache etc)
if(NOT DEFINED $ENV{PICO_SDK_PATH}) # Pull in Raspberry Pi Pico SDK (must be before project)
    message(STATUS "PICO_SDK_PATH not defined.")
    if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/deps/pico-sdk)
        message(STATUS "Using path: ${CMAKE_CURRENT_BINARY_DIR}/deps/pico-sdk")
        include(${CMAKE_CURRENT_BINARY_DIR}/deps/pico-sdk/pico_sdk_init.cmake)
    elseif(EXISTS ${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake)
        message(STATUS "Using path: ${CMAKE_CURRENT_LIST_DIR}")
        include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_import.cmake)
    else()
        message(FATAL_ERROR "PICO_SDK_PATH not defined and pico_sdk_import.cmake not found.")
    endif()
else()
    message(STATUS "PICO_SDK_PATH defined. Using path: $ENV{PICO_SDK_PATH}")
    include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake)
endif()
set(PICO_BOARD pico CACHE STRING "Board type")

if (PICO_SDK_VERSION_STRING VERSION_LESS "1.5.0")
    message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.5.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()

project(pico-conan-blink LANGUAGES C CXX ASM VERSION 0.0.1)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

# create disassembly with source
function(pico_add_dis_output2 TARGET)
    add_custom_command(TARGET ${TARGET} POST_BUILD
        COMMAND ${CMAKE_OBJDUMP} -S $<TARGET_FILE:${TARGET}> >$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.dis2)
    add_custom_command(TARGET ${TARGET} POST_BUILD
        COMMAND arm-none-eabi-size ${CMAKE_CURRENT_BINARY_DIR}/$<IF:$<BOOL:$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>>,$<TARGET_PROPERTY:${TARGET},OUTPUT_NAME>,$<TARGET_PROPERTY:${TARGET},NAME>>.elf
        VERBATIM
    )
endfunction()

# LIBRARIES ------------------------------------------------------------------------------

# https://stackoverflow.com/questions/7787823/cmake-how-to-get-the-name-of-all-subdirectories-of-a-directory
macro(SUBDIRLIST result curdir)
  file(GLOB children RELATIVE ${curdir} ${curdir}/*)
  set(dirlist "")
  foreach(child ${children})
    if(IS_DIRECTORY ${curdir}/${child} AND EXISTS ${curdir}/${child}/CMakeLists.txt)
      list(APPEND dirlist ${child})
    endif()
  endforeach()
  set(${result} ${dirlist})
endmacro()

# Add each library in the lib directory
SUBDIRLIST(LIBDIRS ${CMAKE_CURRENT_LIST_DIR}/lib)
foreach(libdir ${LIBDIRS})
    add_subdirectory(${CMAKE_CURRENT_LIST_DIR}/lib/${libdir})
endforeach()

# GITVERSION ------------------------------------------------------------------------------
FetchContent_Declare(cmake_git_version_tracking                   
  GIT_REPOSITORY https://github.com/andrew-hardin/cmake-git-version-tracking.git
  GIT_TAG 904dbda1336ba4b9a1415a68d5f203f576b696bb
)
FetchContent_MakeAvailable(cmake_git_version_tracking)
# BUILD ------------------------------------------------------------------------------
# Device type configuration
# Check if the build type is Debug
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    # Add compile options for Debug build
    add_compile_options(-g) # include debug info
    add_compile_options(-O0) # no optimization
    add_compile_options(-fno-inline) # no inlining
    add_compile_definitions(DEBUG) # define DEBUG
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release")
    # Add compile options for Release build
    add_compile_options(-O3) # optimize for speed
    add_definitions(-DFW_VERSION_MAJOR=${PROJECT_VERSION_MAJOR})
    add_definitions(-DFW_VERSION_MINOR=${PROJECT_VERSION_MINOR})
    add_definitions(-DFW_VERSION_PATCH=${PROJECT_VERSION_PATCH})
endif()

# Custom Conan package dependencies
# E.g.: find_package(lex-common REQUIRED)

# Add executable. Default name is the project name, version 0.1
add_executable(${PROJECT_NAME} src/main.cpp)

set_target_properties(${PROJECT_NAME} PROPERTIES 
    CMAKE_C_STANDARD 11
    CMAKE_CXX_STANDARD 17
)

# Add the standard include files to the build
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/inc
${CMAKE_CURRENT_LIST_DIR}/.. # for our common lwipopts or any other standard includes, if required
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)

# compiler flags
target_compile_options(${PROJECT_NAME} PRIVATE 
    $<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>
    -fno-exceptions 
    -fno-check-new 
    $<$<COMPILE_LANGUAGE:CXX>:-fno-enforce-eh-specs>
    -g 
    -ffunction-sections 
    -fdata-sections 
    -O3
    -funroll-loops 
    $<$<COMPILE_LANGUAGE:CXX>:-Wno-psabi> # NOTE Compiling with GCC 7.1 or later, so can ignore ABI compatibility warnings when they come up (-Wpsabi)
    -Wno-unknown-pragmas
    -Werror 
    -Wall
)

target_compile_definitions(${PROJECT_NAME} PRIVATE 
    ${DEVICE_TYPE} 
    PICO_HEAP_SIZE=4096
    PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
)

# select linker script
# pico_set_binary_type(${PROJECT_NAME} copy_to_ram)

# Generate PIO headerss here if necessary
# pico_generate_pio_header(... ${CMAKE_CURRENT_LIST_DIR}/pio/...)

pico_set_program_name(${PROJECT_NAME} "${PROJECT_NAME}")
pico_set_program_version(${PROJECT_NAME} "0.1")

pico_enable_stdio_uart(${PROJECT_NAME} 0)
pico_enable_stdio_usb(${PROJECT_NAME} 1)

#pico_add_extra_outputs(${PROJECT_NAME})
#pico_add_dis_output2(${PROJECT_NAME})

file(GLOB SOURCES_CPP "src/*.cpp")
file(GLOB SOURCES_C "src/*.c")
target_sources(${PROJECT_NAME} PRIVATE
        ${SOURCES_C}
        ${SOURCES_CPP}
)

# Add the standard library to the build
target_link_libraries(${PROJECT_NAME} PRIVATE
        pico_stdlib
)


# linker options
target_link_options(${PROJECT_NAME} 
    PRIVATE "LINKER:--print-memory-usage"
)

And here is a somewhat minimal conanfile.py that goes along with that:

conanfile.py
from conan import ConanFile
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps
from conan.tools.scm import Git
from conan.tools.files import get

class BlinkRecipe(ConanFile):
    name = "pico-conan-blink"
    version = "0.0.1"
    package_type = "application"
    arch = "armv6"

    # Optional metadata
    license = ""
    author = ""
    description = "Conan + Pico SDK Toolchain example with blink code"

    # Binary configuration
    settings = "os", "compiler", "build_type", "arch"
    options = {"shared": [True, False],
                "parallel": [True, False]}
    default_options = {"shared": False,
                        "parallel": True}
    
    # Sources are located in the same place as this recipe, copy them to the recipe
    exports_sources = "src/*", "CMakeLists.txt"

    def layout(self):
        cmake_layout(self, src_folder=".", build_folder="build")

    def source(self):
        # get(self, "https://github.com/raspberrypi/pico-sdk/archive/refs/tags/1.5.1.tar.gz", destination="deps/pico-sdk", strip_root=True)
        pass

    def requirements(self):
        # Any custom static library packages go here
        pass

    def build_requirements(self):
        pass

    # def layout(self):
    #     self.folders.source = "src"
    #     self.folders.build = "build"
    #     self.cpp.source.includedirs = ["inc"]
    
    def generate(self):
        deps = CMakeDeps(self)
        deps.generate()
        tc = CMakeToolchain(self)
        tc.extra_cflags = ["--mcpu=cortex-m0plus", "-mthumb"]
        tc.extra_cxxflags = ["--mcpu=cortex-m0plus", "-mthumb"]
        tc.preprocessor_definitions["PICO_SDK_PATH"] = "deps/pico-sdk"
        tc.generate()

    def build(self):
        get(self, "https://github.com/raspberrypi/pico-sdk/archive/refs/tags/1.5.1.tar.gz", destination="deps/pico-sdk", strip_root=True)
        common_cmake_args = []
        cmake = CMake(self)
        cmake.configure(cli_args=common_cmake_args)
        if self.options.parallel:
            common_cmake_args += ["--parallel"]
        cmake.build(cli_args=common_cmake_args)

@jcar87
Copy link
Contributor Author

jcar87 commented May 2, 2024

There are two Conan features where you can override the behaviour of the Conan-generated toolchain:

  • tools.cmake.cmaketoolchain:toolchain_file: this will instruct Conan to skip the generation of its default CMake toolchain, and just pass whichever file you tell it to instead.
  • tools.cmake.cmaketoolchain:user_toolchain: this will still load the Conan-generated CMake toolchain, but it will "chain load" the contents of this file

You can pass this either:

  • via the command line, e.g -c tools.cmake.cmaketoolchain:toolchain_file=/path/to/toolchain.cmake
  • in the [conf] section of your profile file
  • in the package_info() of a recipe that contains the SDK (in case that applies here)

@HackXIt
Copy link

HackXIt commented May 2, 2024

I've added tools.cmake.cmaketoolchain:user_toolchain to the profile, but the behavior shows additional failures due to apparanent misconfigurations:

Build log
$ conan build . --profile=rp2040-debug

======== Input profiles ========
Profile host:
[settings]
arch=armv6
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal
[conf]
tools.cmake.cmaketoolchain:user_toolchain=['$ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake']
[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip

Profile build:
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.py (pico-conan-blink/0.0.1): /home/rini/git-stash/pico-conan-blink/conanfile.py

======== Computing necessary packages ========

======== Installing packages ========

======== Installing packages ========

======== Finalizing install (deploy, generators) ========
conanfile.py (pico-conan-blink/0.0.1): Calling generate()
conanfile.py (pico-conan-blink/0.0.1): Generators folder: /home/rini/git-stash/pico-conan-blink/build/Debug/generators
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: conan_toolchain.cmake
conanfile.py (pico-conan-blink/0.0.1): Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py (pico-conan-blink/0.0.1): If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: CMakePresets.json
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: ../../../CMakeUserPresets.json
conanfile.py (pico-conan-blink/0.0.1): Generating aggregated env files
conanfile.py (pico-conan-blink/0.0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']

======== Calling build() ========
conanfile.py (pico-conan-blink/0.0.1): Calling build()
conanfile.py (pico-conan-blink/0.0.1): Running CMake.configure()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/home/rini/git-stash/pico-conan-blink" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="Debug" "/home/rini/git-stash/pico-conan-blink"
-- PICO_SDK_PATH not defined.
-- Using path: /home/rini/git-stash/pico-conan-blink
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
-- Using Conan toolchain: /home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake
-- Conan toolchain: C++ Standard 17 with extensions ON
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting C compiler ABI info - failed
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting CXX compiler ABI info - failed
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Debug
Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
PICO target board is pico.
Using board configuration from /home/rini/pico/sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter 
TinyUSB available at /home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
Compiling TinyUSB with CFG_TUSB_DEBUG=1
BTstack available at /home/rini/pico/sdk/lib/btstack
cyw43-driver available at /home/rini/pico/sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/rini/pico/sdk/lib/lwip
mbedtls available at /home/rini/pico/sdk/lib/mbedtls
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rini/git-stash/pico-conan-blink/build/Debug

conanfile.py (pico-conan-blink/0.0.1): Running CMake.build()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake --build "/home/rini/git-stash/pico-conan-blink/build/Debug" --parallel -- -j4
[  1%] Checking the git repository for changes...
[  2%] Creating directories for 'PioasmBuild'
[  3%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.o
[  4%] Linking ASM executable bs2_default.elf
[  5%] No download step for 'PioasmBuild'
[  5%] Built target check_git
[  5%] Built target bs2_default
[  7%] No update step for 'PioasmBuild'
[  8%] Building C object _deps/cmake_git_version_tracking-build/CMakeFiles/cmake_git_version_tracking.dir/git.c.o
[  9%] Generating bs2_default.bin
[ 10%] Generating bs2_default_padded_checksummed.S
[ 11%] No patch step for 'PioasmBuild'
[ 12%] Linking C static library libcmake_git_version_tracking.a
[ 14%] Performing configure step for 'PioasmBuild'
loading initial cache file /home/rini/git-stash/pico-conan-blink/build/Debug/pico-sdk/src/rp2_common/pico_cyw43_driver/pioasm/tmp/PioasmBuild-cache-Debug.cmake
[ 14%] Built target bs2_default_padded_checksummed_asm
[ 14%] Built target cmake_git_version_tracking
[ 15%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_gpio/gpio.c.o
[ 16%] Building CXX object CMakeFiles/pico-conan-blink.dir/src/main.cpp.o
[ 17%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdlib/stdlib.c.o
-- The CXX compiler identification is GNU 12.2.1
-- Detecting CXX compiler ABI info
[ 18%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_platform/platform.c.o
-- Detecting CXX compiler ABI info - failed
-- Check for working CXX compiler: /usr/bin/arm-none-eabi-g++
[ 20%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.o
[ 21%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.o
-- Check for working CXX compiler: /usr/bin/arm-none-eabi-g++ - broken
CMake Error at /usr/share/cmake-3.25/Modules/CMakeTestCXXCompiler.cmake:63 (message):
  The C++ compiler

    "/usr/bin/arm-none-eabi-g++"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu
    
    Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_0bf72/fast && gmake[3]: Entering directory '/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu'
    /usr/bin/gmake  -f CMakeFiles/cmTC_0bf72.dir/build.make CMakeFiles/cmTC_0bf72.dir/build
    gmake[4]: Entering directory '/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu'
    Building CXX object CMakeFiles/cmTC_0bf72.dir/testCXXCompiler.cxx.o
    /usr/bin/arm-none-eabi-g++    -o CMakeFiles/cmTC_0bf72.dir/testCXXCompiler.cxx.o -c /home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu/testCXXCompiler.cxx
    Linking CXX executable cmTC_0bf72
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0bf72.dir/link.txt --verbose=1
    /usr/bin/arm-none-eabi-g++ CMakeFiles/cmTC_0bf72.dir/testCXXCompiler.cxx.o -o cmTC_0bf72 
    /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): in function `exit':
    /build/newlib-afIbHz/newlib-3.3.0/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/exit.c:64: undefined reference to `_exit'
    collect2: error: ld returned 1 exit status
    gmake[4]: *** [CMakeFiles/cmTC_0bf72.dir/build.make:99: cmTC_0bf72] Error 1
    gmake[4]: Leaving directory '/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu'
    gmake[3]: *** [Makefile:127: cmTC_0bf72/fast] Error 2
    gmake[3]: Leaving directory '/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeScratch/TryCompile-0E3eWu'
    
    

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:2 (project)


-- Configuring incomplete, errors occurred!
See also "/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeOutput.log".
See also "/home/rini/git-stash/pico-conan-blink/build/Debug/pioasm/CMakeFiles/CMakeError.log".
gmake[2]: *** [pico-sdk/src/rp2_common/pico_cyw43_driver/CMakeFiles/PioasmBuild.dir/build.make:92: pico-sdk/src/rp2_common/pico_cyw43_driver/pioasm/src/PioasmBuild-stamp/PioasmBuild-configure] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1630: pico-sdk/src/rp2_common/pico_cyw43_driver/CMakeFiles/PioasmBuild.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
[ 22%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq.c.o
/tmp/ccbAlx9Y.s: Assembler messages:
/tmp/ccbAlx9Y.s:49: Error: selected processor does not support requested special purpose register -- `mrs r0,PRIMASK'
/tmp/ccbAlx9Y.s:50: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/ccbAlx9Y.s:86: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbAlx9Y.s:143: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbAlx9Y.s:168: Error: selected processor does not support requested special purpose register -- `msr PRIMASK,r0'
gmake[2]: *** [CMakeFiles/pico-conan-blink.dir/build.make:132: CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
/tmp/ccbZm4ZB.s: Assembler messages:
/tmp/ccbZm4ZB.s:79: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:119: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:158: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:197: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:236: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:275: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:314: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:353: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:443: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccbZm4ZB.s:716: Error: selected processor does not support `dmb' in ARM mode
gmake[2]: *** [CMakeFiles/pico-conan-blink.dir/build.make:146: CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.o] Error 1
/tmp/cc3bJ0FZ.s: Assembler messages:
/tmp/cc3bJ0FZ.s:152: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:181: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:208: Error: selected processor does not support requested special purpose register -- `msr PRIMASK,r2'
/tmp/cc3bJ0FZ.s:852: Error: selected processor does not support requested special purpose register -- `mrs r6,PRIMASK'
/tmp/cc3bJ0FZ.s:853: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cc3bJ0FZ.s:890: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1002: Error: selected processor does not support requested special purpose register -- `mrs r5,PRIMASK'
/tmp/cc3bJ0FZ.s:1003: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cc3bJ0FZ.s:1039: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1083: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1107: Error: selected processor does not support requested special purpose register -- `msr PRIMASK,r5'
/tmp/cc3bJ0FZ.s:1225: Error: selected processor does not support requested special purpose register -- `mrs r3,PRIMASK'
/tmp/cc3bJ0FZ.s:1226: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cc3bJ0FZ.s:1274: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1703: Error: selected processor does not support requested special purpose register -- `mrs r8,PRIMASK'
/tmp/cc3bJ0FZ.s:1704: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cc3bJ0FZ.s:1740: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1837: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:1854: Error: selected processor does not support requested special purpose register -- `mrs r2,ipsr'
/tmp/cc3bJ0FZ.s:2259: Error: selected processor does not support requested special purpose register -- `mrs r5,ipsr'
/tmp/cc3bJ0FZ.s:2288: Error: selected processor does not support requested special purpose register -- `mrs r6,PRIMASK'
/tmp/cc3bJ0FZ.s:2289: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cc3bJ0FZ.s:2325: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:2455: Error: selected processor does not support `dmb' in ARM mode
/tmp/cc3bJ0FZ.s:2484: Error: selected processor does not support requested special purpose register -- `msr PRIMASK,r6'
gmake[2]: *** [CMakeFiles/pico-conan-blink.dir/build.make:160: CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq.c.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1526: CMakeFiles/pico-conan-blink.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2

ERROR: conanfile.py (pico-conan-blink/0.0.1): Error in build() method, line 68
        cmake.build(cli_args=common_cmake_args)
        ConanException: Error 2 while executing

I have these lines in the CMakeLists in an attempt to circumvent compiler-check errors

set(CMAKE_C_COMPILER_WORKS 1)
set(CMAKE_CXX_COMPILER_WORKS 1)

But it doesn't work that way, as seen in the above build error.

@HackXIt
Copy link

HackXIt commented May 2, 2024

Without the COMPILER_WORKS circumvention, I get the following:

Build log
$ conan build . --profile=rp2040-debug

======== Input profiles ========
Profile host:
[settings]
arch=armv6
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal
[conf]
tools.cmake.cmaketoolchain:user_toolchain=['$ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake']
[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip

Profile build:
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.py (pico-conan-blink/0.0.1): /home/rini/git-stash/pico-conan-blink/conanfile.py

======== Computing necessary packages ========

======== Installing packages ========

======== Installing packages ========

======== Finalizing install (deploy, generators) ========
conanfile.py (pico-conan-blink/0.0.1): Calling generate()
conanfile.py (pico-conan-blink/0.0.1): Generators folder: /home/rini/git-stash/pico-conan-blink/build/Debug/generators
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: conan_toolchain.cmake
conanfile.py (pico-conan-blink/0.0.1): Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py (pico-conan-blink/0.0.1): If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: CMakePresets.json
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: ../../../CMakeUserPresets.json
conanfile.py (pico-conan-blink/0.0.1): Generating aggregated env files
conanfile.py (pico-conan-blink/0.0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']

======== Calling build() ========
conanfile.py (pico-conan-blink/0.0.1): Calling build()
conanfile.py (pico-conan-blink/0.0.1): Running CMake.configure()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/home/rini/git-stash/pico-conan-blink" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="Debug" "/home/rini/git-stash/pico-conan-blink"
-- Using Conan toolchain: /home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
-- Conan toolchain: C++ Standard 17 with extensions ON
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting C compiler ABI info - failed
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc - broken
CMake Error at /usr/share/cmake-3.25/Modules/CMakeTestCCompiler.cmake:70 (message):
  The C compiler

    "/usr/bin/arm-none-eabi-gcc"

  is not able to compile a simple test program.

  It fails with the following output:

    Change Dir: /home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeScratch/TryCompile-j07YgO
    
    Run Build Command(s):/usr/bin/gmake -f Makefile cmTC_0f430/fast && /usr/bin/gmake  -f CMakeFiles/cmTC_0f430.dir/build.make CMakeFiles/cmTC_0f430.dir/build
    gmake[1]: Entering directory '/home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeScratch/TryCompile-j07YgO'
    Building C object CMakeFiles/cmTC_0f430.dir/testCCompiler.c.o
    /usr/bin/arm-none-eabi-gcc   -O3 -DNDEBUG -o CMakeFiles/cmTC_0f430.dir/testCCompiler.c.o -c /home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeScratch/TryCompile-j07YgO/testCCompiler.c
    Linking C executable cmTC_0f430
    /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0f430.dir/link.txt --verbose=1
    /usr/bin/arm-none-eabi-gcc -O3 -DNDEBUG CMakeFiles/cmTC_0f430.dir/testCCompiler.c.o -o cmTC_0f430 
    /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/bin/ld: /usr/lib/gcc/arm-none-eabi/12.2.1/../../../arm-none-eabi/lib/libc.a(lib_a-exit.o): in function `exit':
    /build/newlib-afIbHz/newlib-3.3.0/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/exit.c:64: undefined reference to `_exit'
    collect2: error: ld returned 1 exit status
    gmake[1]: *** [CMakeFiles/cmTC_0f430.dir/build.make:99: cmTC_0f430] Error 1
    gmake[1]: Leaving directory '/home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeScratch/TryCompile-j07YgO'
    gmake: *** [Makefile:127: cmTC_0f430/fast] Error 2
    
    

  

  CMake will not be able to correctly generate this project.
Call Stack (most recent call first):
  CMakeLists.txt:30 (project)


-- Configuring incomplete, errors occurred!
See also "/home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeOutput.log".
See also "/home/rini/git-stash/pico-conan-blink/build/Debug/CMakeFiles/CMakeError.log".

ERROR: conanfile.py (pico-conan-blink/0.0.1): Error in build() method, line 65
        cmake.configure(cli_args=common_cmake_args)
        ConanException: Error 1 while executing

@HackXIt
Copy link

HackXIt commented May 2, 2024

I suspect I have a similar error as described here:
raspberrypi/pico-sdk#1597 (comment)

Apparently, some parts (like ELF2UF2) require a native compiler and not the arm-none-eabi cross-compiler.

Allthough I have commented out the usage of the additional outputs, I believe that the error is related to the pico_sdk only getting the compiler configuration defined in conan and this might not work for all cases.

I believe somehow this behaviour of using a different compiler for a necessary tool used in the Pico SDK is broken when using Conan, but when building normally it gets resolved fine.

TBH, I very much hate this about the SDK structure, I believe there shouldn't be any hidden/embedded tools like this in the build-process.
I've read a little bit through an issue and neither elf2uf2 nor pioasm should be needed as long as I don't use the corresponding function. Which brings me back to zero, since I don't use both in my minimal example, yet they are used?

I should mention, I do not mind having to compile the SDK with the project, my problem solely lies in the face that it does not compile when run through conan due to misconfigurations occuring with conan_toolchain.cmake.

As a note, the build does work without conan:
(This regular build requires the native compiler for pioasm which links to an elf file)

Build log

Configure:

$ cmake ..
-- PICO_SDK_PATH not defined.
-- Using path: /home/rini/git-stash/pico-conan-blink
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/arm-none-eabi-gcc - 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/arm-none-eabi-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
PICO target board is pico.
Using board configuration from /home/rini/pico/sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter 
TinyUSB available at /home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at /home/rini/pico/sdk/lib/btstack
cyw43-driver available at /home/rini/pico/sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/rini/pico/sdk/lib/lwip
mbedtls available at /home/rini/pico/sdk/lib/mbedtls
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rini/git-stash/pico-conan-blink/build

Build:

$ cmake --build . --parallel
[  1%] Checking the git repository for changes...
[  2%] Creating directories for 'PioasmBuild'
[  3%] No download step for 'PioasmBuild'
[  3%] Built target check_git
[  4%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[  5%] Building C object _deps/cmake_git_version_tracking-build/CMakeFiles/cmake_git_version_tracking.dir/git.c.obj
[  7%] No update step for 'PioasmBuild'
[  8%] Linking ASM executable bs2_default.elf
[  9%] No patch step for 'PioasmBuild'
[  9%] Built target bs2_default
[ 10%] Linking C static library libcmake_git_version_tracking.a
[ 11%] Generating bs2_default.bin
[ 12%] Performing configure step for 'PioasmBuild'
[ 14%] Generating bs2_default_padded_checksummed.S
[ 14%] Built target cmake_git_version_tracking
loading initial cache file /home/rini/git-stash/pico-conan-blink/build/pico-sdk/src/rp2_common/pico_cyw43_driver/pioasm/tmp/PioasmBuild-cache-Release.cmake
[ 14%] Built target bs2_default_padded_checksummed_asm
[ 15%] Building CXX object CMakeFiles/pico-conan-blink.dir/src/main.cpp.obj
[ 16%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[ 17%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_platform/platform.c.obj
[ 18%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/sem.c.obj
[ 20%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_gpio/gpio.c.obj
[ 21%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_timer/timer.c.obj
[ 22%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.obj
[ 23%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/lock_core.c.obj
[ 24%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.obj
[ 25%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_clocks/clocks.c.obj
[ 27%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/pheap.c.obj
[ 28%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_time/time.c.obj
[ 30%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/datetime.c.obj
-- The CXX compiler identification is GNU 12.2.0
[ 29%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq.c.obj
[ 31%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_pll/pll.c.obj
[ 32%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_time/timeout_helper.c.obj
[ 34%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/critical_section.c.obj
[ 35%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_runtime/runtime.c.obj
[ 36%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
[ 37%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_xosc/xosc.c.obj
[ 38%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_printf/printf.c.obj
[ 41%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
[ 40%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_uart/uart.c.obj
[ 42%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_vreg/vreg.c.obj
[ 47%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_init_rom.c.obj
[ 43%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_divider/divider.S.obj
[ 48%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
[ 44%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/queue.c.obj
[ 49%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_math.c.obj
[ 45%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/mutex.c.obj
[ 50%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_aeabi.S.obj
[ 51%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_divider/divider.S.obj
[ 52%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
[ 54%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
-- Detecting CXX compiler ABI info
[ 55%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_aeabi.S.obj
[ 56%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_math.c.obj
[ 57%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
[ 58%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_init_rom.c.obj
[ 60%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/crt0.S.obj
[ 61%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
[ 62%] Building CXX object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
[ 63%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
[ 64%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
[ 65%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/reset_interface.c.obj
[ 67%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
[ 68%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c.obj
[ 69%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio/stdio.c.obj
[ 70%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_flash/flash.c.obj
[ 72%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_unique_id/unique_id.c.obj
[ 71%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.obj
[ 74%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c.obj
[ 75%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.obj
[ 76%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.obj
[ 77%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/device/usbd.c.obj
[ 78%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/device/usbd_control.c.obj
[ 80%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/cdc/cdc_device.c.obj
[ 81%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/midi/midi_device.c.obj
[ 82%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/msc/msc_device.c.obj
[ 83%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/audio/audio_device.c.obj
[ 84%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/hid/hid_device.c.obj
[ 87%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/tusb.c.obj
[ 85%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/dfu/dfu_device.c.obj
[ 88%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.obj
[ 89%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/vendor/vendor_device.c.obj
[ 90%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/video/video_device.c.obj
[ 91%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.obj
[ 92%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/common/tusb_fifo.c.obj
[ 94%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/net/ncm_device.c.obj
[ 95%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.obj
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rini/git-stash/pico-conan-blink/build/pioasm
[ 96%] Performing build step for 'PioasmBuild'
[ 10%] Building CXX object CMakeFiles/pioasm.dir/pio_assembler.cpp.o
[ 20%] Building CXX object CMakeFiles/pioasm.dir/pio_disassembler.cpp.o
[ 30%] Building CXX object CMakeFiles/pioasm.dir/gen/lexer.cpp.o
[ 40%] Building CXX object CMakeFiles/pioasm.dir/main.cpp.o
[ 50%] Building CXX object CMakeFiles/pioasm.dir/gen/parser.cpp.o
[ 60%] Building CXX object CMakeFiles/pioasm.dir/python_output.cpp.o
[ 70%] Building CXX object CMakeFiles/pioasm.dir/c_sdk_output.cpp.o
[ 80%] Building CXX object CMakeFiles/pioasm.dir/hex_output.cpp.o
[ 90%] Building CXX object CMakeFiles/pioasm.dir/ada_output.cpp.o
[ 97%] Linking CXX executable pico-conan-blink.elf
Memory region         Used Size  Region Size  %age Used
           FLASH:       24232 B         2 MB      1.16%
             RAM:        7400 B       256 KB      2.82%
       SCRATCH_X:          0 GB         4 KB      0.00%
       SCRATCH_Y:          0 GB         4 KB      0.00%
[ 97%] Built target pico-conan-blink
[100%] Linking CXX executable pioasm
[100%] Built target pioasm
[ 98%] No install step for 'PioasmBuild'
[100%] Completed 'PioasmBuild'
[100%] Built target PioasmBuild

@HackXIt
Copy link

HackXIt commented May 3, 2024

According to raspberrypi/pico-sdk#1693 (comment) I can get rid of the errors caused by pioasm and elf2uf2 forcing pre-compiled binaries with the described CMake snippet.

I then skip the simple test program error again using set(CMAKE_C_COMPILER_WORKS 1) and set(CMAKE_CXX_COMPILER_WORKS 1).

The end result is further build errors, and I'm at a loss at this point why the compilation with Conan produces all of these errors, which do not occur without it.

From my perspective, I've checked these boxes:

  • I have setup the toolchain using a profile with arm-none-eabi
  • I have added the custom user-toolchain required: pico_sdk_import.cmake
  • I skip the test program errors, which I still cannot find a reason for
  • I finally arrive at compilation of the library source files, but there seems to be incorrect architecture information to the build:
Build log
$ conan build . --profile=rp2040-debug

======== Input profiles ========
Profile host:
[settings]
arch=armv6
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal
[conf]
tools.cmake.cmaketoolchain:user_toolchain=['$ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake']
[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip

Profile build:
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.py (pico-conan-blink/0.0.1): /home/rini/git-stash/pico-conan-blink/conanfile.py

======== Computing necessary packages ========

======== Installing packages ========

======== Installing packages ========

======== Finalizing install (deploy, generators) ========
conanfile.py (pico-conan-blink/0.0.1): Calling generate()
conanfile.py (pico-conan-blink/0.0.1): Generators folder: /home/rini/git-stash/pico-conan-blink/build/Debug/generators
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: conan_toolchain.cmake
conanfile.py (pico-conan-blink/0.0.1): Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py (pico-conan-blink/0.0.1): If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: CMakePresets.json
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: ../../../CMakeUserPresets.json
conanfile.py (pico-conan-blink/0.0.1): Generating aggregated env files
conanfile.py (pico-conan-blink/0.0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']

======== Calling build() ========
conanfile.py (pico-conan-blink/0.0.1): Calling build()
conanfile.py (pico-conan-blink/0.0.1): Running CMake.configure()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/home/rini/git-stash/pico-conan-blink" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="Debug" "/home/rini/git-stash/pico-conan-blink"
-- PICO_SDK_PATH not defined.
-- Using path: /home/rini/git-stash/pico-conan-blink
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
-- Using Conan toolchain: /home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake
-- Conan toolchain: C++ Standard 17 with extensions ON
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting C compiler ABI info - failed
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting CXX compiler ABI info - failed
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Debug
Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
PICO target board is pico.
Using board configuration from /home/rini/pico/sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter 
TinyUSB available at /home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
Compiling TinyUSB with CFG_TUSB_DEBUG=1
BTstack available at /home/rini/pico/sdk/lib/btstack
cyw43-driver available at /home/rini/pico/sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/rini/pico/sdk/lib/lwip
mbedtls available at /home/rini/pico/sdk/lib/mbedtls
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rini/git-stash/pico-conan-blink/build/Debug

conanfile.py (pico-conan-blink/0.0.1): Running CMake.build()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake --build "/home/rini/git-stash/pico-conan-blink/build/Debug" --parallel -- -j4
[  1%] Checking the git repository for changes...
[  2%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.o
[  3%] Linking ASM executable bs2_default.elf
[  3%] Built target check_git
[  3%] Built target bs2_default
[  5%] Building C object _deps/cmake_git_version_tracking-build/CMakeFiles/cmake_git_version_tracking.dir/git.c.o
[  6%] Generating bs2_default.bin
[  7%] Generating bs2_default_padded_checksummed.S
[  9%] Linking C static library libcmake_git_version_tracking.a
[  9%] Built target bs2_default_padded_checksummed_asm
[  9%] Built target cmake_git_version_tracking
[ 10%] Building CXX object CMakeFiles/pico-conan-blink.dir/src/main.cpp.o
[ 11%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdlib/stdlib.c.o
[ 12%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_gpio/gpio.c.o
[ 14%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_platform/platform.c.o
[ 15%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.o
[ 16%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.o
/tmp/cciwm6MN.s: Assembler messages:
/tmp/cciwm6MN.s:49: Error: selected processor does not support requested special purpose register -- `mrs r0,PRIMASK'
/tmp/cciwm6MN.s:50: Error: selected processor does not support `cpsid i' in ARM mode
/tmp/cciwm6MN.s:86: Error: selected processor does not support `dmb' in ARM mode
/tmp/cciwm6MN.s:143: Error: selected processor does not support `dmb' in ARM mode
/tmp/cciwm6MN.s:168: Error: selected processor does not support requested special purpose register -- `msr PRIMASK,r0'
gmake[2]: *** [CMakeFiles/pico-conan-blink.dir/build.make:132: CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.o] Error 1
gmake[2]: *** Waiting for unfinished jobs....
/tmp/ccoBBkCO.s: Assembler messages:
/tmp/ccoBBkCO.s:79: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:119: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:158: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:197: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:236: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:275: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:314: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:353: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:443: Error: selected processor does not support `dmb' in ARM mode
/tmp/ccoBBkCO.s:716: Error: selected processor does not support `dmb' in ARM mode
gmake[2]: *** [CMakeFiles/pico-conan-blink.dir/build.make:146: CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1524: CMakeFiles/pico-conan-blink.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2

ERROR: conanfile.py (pico-conan-blink/0.0.1): Error in build() method, line 68
        cmake.build(cli_args=common_cmake_args)
        ConanException: Error 2 while executing

I then suspected there's further misconfiguration regarding the architecture, since these errors are weird and the architecture "normally" is configured when using pico_sdk_import.cmake and then calling pico_sdk_init() in the CMakeLists.

However that doesn't seem to be the case when using conan, so I've manually configured some flags in the profile:

[conf]
tools.cmake.cmaketoolchain:user_toolchain=["$ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake"]
tools.build:cflags=["-mcpu=cortex-m0plus", "-mthumb", "-march=armv6-m"]
tools.build:cxxflags=["-mcpu=cortex-m0plus -mthumb", "-march=armv6-m"]

And all of a sudden, we see this:

Build log
$ conan build . --profile=rp2040-debug

======== Input profiles ========
Profile host:
[settings]
arch=armv6
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=baremetal
[conf]
tools.build:cflags=['-mcpu=cortex-m0plus', '-mthumb', '-march=armv6-m']
tools.build:cxxflags=['-mcpu=cortex-m0plus -mthumb', '-march=armv6-m']
tools.cmake.cmaketoolchain:user_toolchain=['$ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake']
[buildenv]
CC=/usr/bin/arm-none-eabi-gcc
CXX=/usr/bin/arm-none-eabi-g++
AR=/usr/bin/arm-none-eabi-ar
AS=/usr/bin/arm-none-eabi-as
RANLIB=/usr/bin/arm-none-eabi-ranlib
LD=/usr/bin/arm-none-eabi-ld
STRIP=/usr/bin/arm-none-eabi-strip

Profile build:
[settings]
arch=armv8
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=12
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.py (pico-conan-blink/0.0.1): /home/rini/git-stash/pico-conan-blink/conanfile.py

======== Computing necessary packages ========

======== Installing packages ========

======== Installing packages ========

======== Finalizing install (deploy, generators) ========
conanfile.py (pico-conan-blink/0.0.1): Calling generate()
conanfile.py (pico-conan-blink/0.0.1): Generators folder: /home/rini/git-stash/pico-conan-blink/build/Debug/generators
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: conan_toolchain.cmake
conanfile.py (pico-conan-blink/0.0.1): Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py (pico-conan-blink/0.0.1): If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: CMakePresets.json
conanfile.py (pico-conan-blink/0.0.1): CMakeToolchain generated: ../../../CMakeUserPresets.json
conanfile.py (pico-conan-blink/0.0.1): Generating aggregated env files
conanfile.py (pico-conan-blink/0.0.1): Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']

======== Calling build() ========
conanfile.py (pico-conan-blink/0.0.1): Calling build()
conanfile.py (pico-conan-blink/0.0.1): Running CMake.configure()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="/home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake" -DCMAKE_INSTALL_PREFIX="/home/rini/git-stash/pico-conan-blink" -DCMAKE_POLICY_DEFAULT_CMP0091="NEW" -DCMAKE_BUILD_TYPE="Debug" "/home/rini/git-stash/pico-conan-blink"
-- PICO_SDK_PATH not defined.
-- Using path: /home/rini/git-stash/pico-conan-blink
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
-- Using Conan toolchain: /home/rini/git-stash/pico-conan-blink/build/Debug/generators/conan_toolchain.cmake
-- Conan toolchain: C++ Standard 17 with extensions ON
-- Conan toolchain: Setting BUILD_SHARED_LIBS = OFF
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
-- Detecting C compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting C compiler ABI info - failed
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
Using PICO_SDK_PATH from environment ('/home/rini/pico/sdk')
PICO_SDK_PATH is /home/rini/pico/sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
-- Detecting CXX compiler ABI info - failed
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Debug
Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
PICO target board is pico.
Using board configuration from /home/rini/pico/sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3 (found version "3.11.2") found components: Interpreter 
TinyUSB available at /home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
Compiling TinyUSB with CFG_TUSB_DEBUG=1
BTstack available at /home/rini/pico/sdk/lib/btstack
cyw43-driver available at /home/rini/pico/sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/rini/pico/sdk/lib/lwip
mbedtls available at /home/rini/pico/sdk/lib/mbedtls
-- Configuring done
-- Generating done
-- Build files have been written to: /home/rini/git-stash/pico-conan-blink/build/Debug

conanfile.py (pico-conan-blink/0.0.1): Running CMake.build()
conanfile.py (pico-conan-blink/0.0.1): RUN: cmake --build "/home/rini/git-stash/pico-conan-blink/build/Debug" --parallel -- -j4
[  1%] Checking the git repository for changes...
[  2%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.o
[  3%] Linking ASM executable bs2_default.elf
[  3%] Built target check_git
[  3%] Built target bs2_default
[  5%] Building C object _deps/cmake_git_version_tracking-build/CMakeFiles/cmake_git_version_tracking.dir/git.c.o
[  6%] Generating bs2_default.bin
[  7%] Generating bs2_default_padded_checksummed.S
[  9%] Linking C static library libcmake_git_version_tracking.a
[  9%] Built target cmake_git_version_tracking
[  9%] Built target bs2_default_padded_checksummed_asm
[ 10%] Building CXX object CMakeFiles/pico-conan-blink.dir/src/main.cpp.o
[ 11%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_platform/platform.c.o
[ 12%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdlib/stdlib.c.o
[ 14%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_gpio/gpio.c.o
[ 15%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_claim/claim.c.o
[ 16%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_sync/sync.c.o
[ 18%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq.c.o
[ 19%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.o
[ 20%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/sem.c.o
[ 22%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/lock_core.c.o
[ 23%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/mutex.c.o
[ 24%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_sync/critical_section.c.o
[ 25%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_time/time.c.o
[ 27%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_time/timeout_helper.c.o
[ 28%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_timer/timer.c.o
[ 29%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/datetime.c.o
[ 31%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/pheap.c.o
[ 32%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/common/pico_util/queue.c.o
[ 33%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_uart/uart.c.o
[ 35%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_clocks/clocks.c.o
[ 36%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_pll/pll.c.o
[ 37%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_vreg/vreg.c.o
[ 38%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_watchdog/watchdog.c.o
[ 40%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_xosc/xosc.c.o
[ 41%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_divider/divider.S.o
[ 42%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_runtime/runtime.c.o
[ 44%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_printf/printf.c.o
[ 45%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.o
[ 46%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_bootrom/bootrom.c.o
[ 48%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_divider/divider.S.o
[ 49%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_init_rom.c.o
[ 50%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_aeabi.S.o
[ 51%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_math.c.o
[ 53%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.o
[ 54%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.o
[ 55%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_aeabi.S.o
[ 57%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_init_rom.c.o
[ 58%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_math.c.o
[ 59%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.o
[ 61%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_malloc/pico_malloc.c.o
[ 62%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.o
[ 63%] Building ASM object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/crt0.S.o
[ 64%] Building CXX object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/new_delete.cpp.o
[ 66%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_standard_link/binary_info.c.o
[ 67%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio/stdio.c.o
[ 68%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/reset_interface.c.o
[ 70%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/stdio_usb.c.o
[ 71%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_stdio_usb/stdio_usb_descriptors.c.o
[ 72%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_unique_id/unique_id.c.o
[ 74%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/hardware_flash/flash.c.o
[ 75%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c.o
[ 76%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c.o
[ 77%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/device/usbd.c.o
[ 79%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/device/usbd_control.c.o
[ 80%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/audio/audio_device.c.o
[ 81%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/cdc/cdc_device.c.o
[ 83%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/dfu/dfu_device.c.o
[ 84%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/dfu/dfu_rt_device.c.o
[ 85%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/hid/hid_device.c.o
[ 87%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/midi/midi_device.c.o
[ 88%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/msc/msc_device.c.o
[ 89%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/net/ecm_rndis_device.c.o
[ 90%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/net/ncm_device.c.o
[ 92%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/usbtmc/usbtmc_device.c.o
[ 93%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/vendor/vendor_device.c.o
[ 94%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/class/video/video_device.c.o
[ 96%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/tusb.c.o
[ 97%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/lib/tinyusb/src/common/tusb_fifo.c.o
[ 98%] Building C object CMakeFiles/pico-conan-blink.dir/home/rini/pico/sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c.o
[100%] Linking CXX executable pico-conan-blink
Memory region         Used Size  Region Size  %age Used
           FLASH:       60620 B         2 MB      2.89%
             RAM:        9920 B       256 KB      3.78%
       SCRATCH_X:          0 GB         4 KB      0.00%
       SCRATCH_Y:          0 GB         4 KB      0.00%
[100%] Built target pico-conan-blink

Main issue is solved, but my question remains:

What the hell does conan do differently that these things are not configured, EVEN THOUGH they should be when pico_sdk_init() is used in my CMakeLists.txt and the toolchain is imported using the suggested user_toolchain?

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

2 participants