Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

MacBook M2 SequoiaでPicoのbuildがエラーになる

ウキウキしてSequoiaにバージョンアップしたらmakeができなくなっていた。

結論

pico-exampleをpullして最新のCMakeLists.txtを取得する

環境新しくなって動かなくなったら、CMakeListsを疑うのが間違いない。
pico-exampleディレクトリを別名でコピーして、cloneでまるっと入れ替える方が早いかも。

% git clone https://github.com/raspberrypi/pico-examples.git --branch master
コンパイル通らなくなったプロジェクトのCMakeLists.txtを更新する

案の定、バージョンやら設定やらが新しくなっているのでその部分をまんま反映する

Xcodeのバージョンをあわせる

Macコンパイルするのに、Xcodeのツールを利用している。
なので、CMakeLists.txtを編集し、XcodeSDKバージョンとかをあわせる必要がある。
sonoma時は、MacOSX14.5.sdkを利用していた模様(この記事の、かな〜り下に書いている「経緯」に記載しているエラーに含まれている)

cmake_minimum_required(VERSION 3.12)

# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)
include(pico_extras_import_optional.cmake)

project(pico_examples C CXX ASM)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

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

set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})

# If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up
if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)
    set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000)
endif()

# Initialize the SDK
pico_sdk_init()

include(example_auto_set_url.cmake)

function(add_subdirectory_exclude_platforms NAME)
    if (ARGN)
        if (PICO_PLATFORM IN_LIST ARGN)
            message("Skipping ${NAME} example which is unsupported on this platform")
            return()
        endif()
        foreach(PATTERN IN LISTS ARGN)
            string(REGEX MATCH "${PATTERN}" MATCHED "${PICO_PLATFORM}")
            if (MATCHED)
                message("Skipping ${NAME} example which is unsupported on this platform")
                return()
            endif()
        endforeach()
    endif()
    add_subdirectory(${NAME})
endfunction()


## Debug Option ------------------   追加したとこ
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
## -------------------------------------------

## MacOS Option Xcode ------------ 追加したとこ
set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
## -------------------------------------------

add_compile_options(-Wall
        -Wno-format          # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
        -Wno-unused-function # we have some for the docs that aren't called
        )
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
    add_compile_options(-Wno-maybe-uninitialized)
endif()

  ・
  ・
  ・
 以下省略
コンパイル環境構築の補足情報

pico-exampleをコンパイルするために、extrasも必要になる。(CMakeLists.txtに関連している)
面倒なので、最新のクローンを作成するコマンドをメモしておく

% git clone https://github.com/raspberrypi/pico-sdk.git --branch master
% git clone https://github.com/raspberrypi/pico-examples.git --branch master
% git clone https://github.com/raspberrypi/pico-extras.git --branch master

経緯

ここから下は、上記「結論」までの経緯

You have not agreed to the Xcode and Apple SDKs license. You must agree to the license below in order to use Xcode.
Press enter to display the license:

翻訳すると・・・

あなたは、Xcode と Apple SDKs のライセンスに同意していません。Xcodeを使用するには、以下のライセンスに同意する必要があります。
エンターキーを押すとライセンスが表示されます:

となるので、Enterキーを叩くと

Agreeing to the Xcode and Apple SDKs license requires admin privileges, please accept the Xcode license as the root user (e.g. 'sudo xcodebuild -license').

こちらも翻訳すると

Xcode と Apple SDKs のライセンスに同意するには、管理者権限が必要です。root ユーザーとして Xcode のライセンスに同意してください (例 'sudo xcodebuild -license')。

なので、コマンド入れてみた

% sudo xcodebuild -license

するとこうなった

By typing 'agree' you are agreeing to the terms of the software license agreements. Any other response will cancel. [agree, cancel]
同意する」と入力すると、ソフトウェア使用許諾契約の条項に同意したことになります。それ以外の回答はキャンセルされます。[同意する、キャンセルする]

ので、 agree と入力すると

You can review the license in Xcode’s About window, or at: /Applications/Xcode.app/Contents/Resources/en.lproj/License.rtf

となりました。
ここまでできたら

% make -j8

とすると、先に進んだが下記のエラーが。
たぶん、CMakeLists.txtが新しくなっていると予想。

[  1%] Built target bs2_default
[  2%] Performing build step for 'PioasmBuild'
[ 10%] Building CXX object CMakeFiles/pioasm.dir/main.cpp.o
c++: warning: no such sysroot directory: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk' [-Wmissing-sysroot]
/Users/k/pico/pico-sdk/tools/pioasm/main.cpp:7:10: fatal error: 'iostream' file not found
    7 | #include <iostream>
      |          ^~~~~~~~~~
1 error generated.

なので、CMakeLists.txtを新しく更新してみた。

cmake_minimum_required(VERSION 3.12)

# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)
include(pico_extras_import_optional.cmake)

project(pico_examples C CXX ASM)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

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

set(PICO_EXAMPLES_PATH ${PROJECT_SOURCE_DIR})

# If you want debug output from USB (pass -DPICO_STDIO_USB=1) this ensures you don't lose any debug output while USB is set up
if (NOT DEFINED PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS)
    set(PICO_STDIO_USB_CONNECT_WAIT_TIMEOUT_MS 3000)
endif()

# Initialize the SDK
pico_sdk_init()

include(example_auto_set_url.cmake)

function(add_subdirectory_exclude_platforms NAME)
    if (ARGN)
        if (PICO_PLATFORM IN_LIST ARGN)
            message("Skipping ${NAME} example which is unsupported on this platform")
            return()
        endif()
        foreach(PATTERN IN LISTS ARGN)
            string(REGEX MATCH "${PATTERN}" MATCHED "${PICO_PLATFORM}")
            if (MATCHED)
                message("Skipping ${NAME} example which is unsupported on this platform")
                return()
            endif()
        endforeach()
    endif()
    add_subdirectory(${NAME})
endfunction()


## Debug Option ------------------   追加したとこ
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g3")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g3")
## -------------------------------------------

## MacOS Option Xcode ------------ 追加したとこ
set(CMAKE_OSX_SYSROOT /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk)
## -------------------------------------------

add_compile_options(-Wall
        -Wno-format          # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
        -Wno-unused-function # we have some for the docs that aren't called
        )
if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
    add_compile_options(-Wno-maybe-uninitialized)
endif()

  ・
  ・
  ・
 以下省略