blob: 5153e2b01c619422ceedc37097b7819b01b563f0 [file] [log] [blame]
Austin Schuh208337d2022-01-01 14:29:11 -08001# Pre-initialize the Raspberry Pi Pico SDK, setting up the platform and toolchain and some CMake utility functions
2# This file must be included prior to the project() call
3
4# Note: this file is perhaps named badly, as it provides a method pico_sdk_init which
5# the enclosing project calls LATER to actually "initialize" the SDK (by including the CMakeLists.txt from this
6# same directory)
7
8if (NOT TARGET _pico_sdk_pre_init_marker)
9 add_library(_pico_sdk_pre_init_marker INTERFACE)
10
11 function(pico_is_top_level_project VAR)
12 string(TOLOWER ${CMAKE_CURRENT_LIST_DIR} __list_dir)
13 string(TOLOWER ${CMAKE_SOURCE_DIR} __source_dir)
14 if (__source_dir STREQUAL __list_dir)
15 set(${VAR} 1 PARENT_SCOPE)
16 else()
17 set(${VAR} 0 PARENT_SCOPE)
18 endif()
19 endfunction()
20
21 function(pico_message_debug MESSAGE)
22 # The log-level system was added in CMake 3.15.
23 if(${CMAKE_VERSION} VERSION_LESS "3.15.0")
24 message(${MESSAGE})
25 else()
26 message(DEBUG ${MESSAGE})
27 endif()
28 endfunction()
29
30 if (NOT PICO_SDK_PATH)
31 set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR})
32 endif ()
33
34 get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
35
36 set(PICO_SDK_PATH ${CMAKE_CURRENT_LIST_DIR} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
37
38 list(APPEND CMAKE_MODULE_PATH ${PICO_SDK_PATH}/cmake)
39
40 include(${CMAKE_CURRENT_LIST_DIR}/pico_sdk_version.cmake)
41 include(pico_utils)
42
43 message("PICO_SDK_PATH is ${CMAKE_CURRENT_LIST_DIR}")
44
45 include(pico_pre_load_platform)
46
47 # We want to configure correct toolchain prior to project load
48 # todo perhaps this should be included by the platform instead?
49 include(pico_pre_load_toolchain)
50
51 macro(pico_sdk_init)
52 if (NOT CMAKE_PROJECT_NAME)
53 message(WARNING "pico_sdk_init() should be called after the project is created (and languages added)")
54 endif()
55 add_subdirectory(${PICO_SDK_PATH} pico-sdk)
Austin Schuh208337d2022-01-01 14:29:11 -080056 endmacro()
57
58 macro(add_sub_list_dirs var)
59 foreach(LIST_DIR IN LISTS ${var})
60 get_filename_component(SHORT_NAME "${LIST_DIR}" NAME)
61 pico_message_debug("Including custom CMakeLists.txt ${SHORT_NAME}")
62 add_subdirectory(${LIST_DIR} ${SHORT_NAME})
63 endforeach()
64 endmacro()
65
66 macro(add_sub_list_files var)
67 foreach(LIST_FILE IN LISTS ${var})
68 pico_message_debug("Including custom CMake file ${LIST_FILE}")
69 include(${LIST_FILE})
70 endforeach()
71 endmacro()
72
73 macro(pico_register_common_scope_var NAME)
74 if (NOT ${NAME} IN_LIST PICO_PROMOTE_COMMON_SCOPE_VARS)
75 list(APPEND PICO_PROMOTE_COMMON_SCOPE_VARS ${NAME})
76 endif()
77 endmacro()
78
79 set(PICO_PROMOTE_COMMON_SCOPE_VARS
80 PICO_INCLUDE_DIRS
81 PICO_SDK_POST_LIST_DIRS
82 PICO_SDK_POST_LIST_FILES
83 PICO_CONFIG_HEADER_FILES
84 PICO_RP2040_CONFIG_HEADER_FILES
85 )
86
87 macro(pico_promote_common_scope_vars)
88 set(PICO_PROMOTE_COMMON_SCOPE_VARS ${PICO_PROMOTE_COMMON_SCOPE_VARS} PARENT_SCOPE)
89 foreach(VAR IN LISTS PICO_PROMOTE_COMMON_SCOPE_VARS)
90 SET(${VAR} ${${VAR}} PARENT_SCOPE)
91 endforeach()
92 endmacro()
93endif()