Fresh out of the box errors with pico_sdk_init.cmake

Open
#476 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
cmake

Research direction

Start with external/pico_sdk_import.cmake at the reported get_filename_component call and compare it with the project's CMakeLists.txt, including the PICO_SDK_PATH and cmake_minimum_required settings. Reproduce the Windows configuration using the shown NMake Makefiles command and verify that CMake configures the blink_example_c project without the reported error.

Written by the indexing model from the issue text.

Description

EDIT: This is for a windows 10 build using G++ (without MinGW-w64).
If I can't get G++ to work (without MinGW-w64) then I use MSVC.

Fresh out of the box errors...

I installed VSCode a few days ago.
After having to add the following line ...

# set cmake dir
set (PICO_SDK_PATH "/picosdk/sdk")

... to my CMakeLists.txt

... and ...

#cmake version
cmake_minimum_required(VERSION 4.12 VERSION 3.31.6-msvc6)

... to my CMakeLists.txt.

These are the next errors:

[main] Configuring project: blink_example_c
[proc] Executing command: "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -S "C:/Learning Projects/MS Code/blink_example_c" -B "c:/Learning Projects/MS Code/blink_example_c/build" -G "NMake Makefiles"
[cmake] Not searching for unused variables given on the command line.
[cmake] CMake Error at C:/picosdk/sdk/external/pico_sdk_import.cmake:109 (get_filename_component):
[cmake] get_filename_component unknown component BASE_DIR
[cmake] Call Stack (most recent call first):
[cmake] CMakeLists.txt:8 (include)
[cmake]
[cmake]
[cmake] -- Configuring incomplete, errors occurred!
[proc] The command: "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -S "C:/Learning Projects/MS Code/blink_example_c" -B "c:/Learning Projects/MS Code/blink_example_c/build" -G "NMake Makefiles" exited with code: 1

MSVCode points to a error in line 9:
`add_library(_pico_sdk_pre_init_marker INTERFACE)

I haven't changed anything to pico_sdk_init.cmake
Below is a copy of the file.

# Pre-initialize the Raspberry Pi Pico SDK, setting up the platform and toolchain and some CMake utility functions
# This file must be included prior to the project() call

# Note: this file is perhaps named badly, as it provides a method pico_sdk_init which
# the enclosing project calls LATER to actually "initialize" the SDK (by including the CMakeLists.txt from this
# same directory)

if (NOT TARGET _pico_sdk_pre_init_marker)
    add_library(_pico_sdk_pre_init_marker INTERFACE)  # Exception has occurred <<<----------

    function(pico_is_top_level_project VAR)
        string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir)
        string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir)
        if (__source_dir STREQUAL __list_dir)
            set(${VAR} 1 PARENT_SCOPE)
        else()
            set(${VAR} 0 PARENT_SCOPE)
        endif()
    endfunction()

    function(pico_message_debug MESSAGE)
        # The log-level system was added in CMake 3.15.
        if(${CMAKE_VERSION} VERSION_LESS "3.15.0")
            message(${MESSAGE})
        else()
            message(DEBUG ${MESSAGE})
        endif()
    endfunction()

    if (NOT PICO_SDK_PATH)
        set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR})
    endif ()

    get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")

    set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)

    list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake)

    include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake)
    include(pico_utils)

    message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}")
    macro(pico_sdk_init)
        if (NOT CMAKE_PROJECT_NAME)
            message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)")
        endif()
        add_subdirectory(${PICO_SDK_PATH} pico-sdk)
    endmacro()

    macro(add_sub_list_dirs var)
        foreach(LIST_DIR IN LISTS ${var})
            get_filename_component(SHORT_NAME "${LIST_DIR}" NAME)
            pico_message_debug("Including custom CMakeLists.txt ${SHORT_NAME}")
            add_subdirectory(${LIST_DIR} ${SHORT_NAME})
        endforeach()
    endmacro()

    macro(add_sub_list_files var)
        foreach(LIST_FILE IN LISTS ${var})
            pico_message_debug("Including custom CMake file ${LIST_FILE}")
            include(${LIST_FILE})
        endforeach()
    endmacro()

    macro(pico_register_common_scope_var NAME)
        if (NOT ${NAME} IN_LIST PICO_PROMOTE_COMMON_SCOPE_VARS)
            list(APPEND PICO_PROMOTE_COMMON_SCOPE_VARS ${NAME})
        endif()
    endmacro()

    set(PICO_PROMOTE_COMMON_SCOPE_VARS
            PICO_INCLUDE_DIRS
            PICO_SDK_POST_LIST_DIRS
            PICO_SDK_POST_LIST_FILES
            PICO_CONFIG_HEADER_FILES
            PICO_RP2040_CONFIG_HEADER_FILES
            PICO_BOARD_CMAKE_OVERRIDES
    )

    macro(pico_promote_common_scope_vars)
        set(PICO_PROMOTE_COMMON_SCOPE_VARS ${PICO_PROMOTE_COMMON_SCOPE_VARS} PARENT_SCOPE)
        foreach(VAR IN LISTS PICO_PROMOTE_COMMON_SCOPE_VARS)
            SET(${VAR} ${${VAR}} PARENT_SCOPE)
        endforeach()
    endmacro()

    include(pico_pre_load_platform)

    # We want to configure correct toolchain prior to project load
    # todo perhaps this should be included by the platform instead?
    include(pico_pre_load_toolchain)
endif()
Dominant language
No language data
Stars
35
Forks
4
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from raspberrypi/pico-feedback

All issues in raspberrypi/pico-feedback

Similar issues

More Build System issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.