1# Used for RP2040 and RP2350
2
3include(cmake/on_device.cmake)
4
5# PICO_CMAKE_CONFIG: PICO_NO_FLASH, Option to default all binaries to not use flash i.e. run from SRAM, type=bool, default=0, group=build, docref=cmake-binary-type-config
6option(PICO_NO_FLASH "Default binaries to not not use flash")
7# PICO_CMAKE_CONFIG: PICO_COPY_TO_RAM, Option to default all binaries to copy code from flash to SRAM before running, type=bool, default=0, group=build, docref=cmake-binary-type-config
8option(PICO_COPY_TO_RAM "Default binaries to copy code to RAM when booting from flash")
9
10# COMMON
11pico_add_subdirectory(common/boot_picobin_headers)
12pico_add_subdirectory(common/boot_picoboot_headers)
13pico_add_subdirectory(common/boot_uf2_headers)
14pico_add_subdirectory(common/pico_base_headers)
15pico_add_subdirectory(common/pico_usb_reset_interface_headers)
16
17# PICO_CMAKE_CONFIG: PICO_BARE_METAL, Flag to exclude anything except base headers from the build, type=bool, default=0, group=build
18if (NOT PICO_BARE_METAL)
19    pico_add_subdirectory(common/pico_bit_ops_headers)
20    pico_add_subdirectory(common/pico_binary_info)
21    pico_add_subdirectory(common/pico_divider_headers)
22    pico_add_subdirectory(common/pico_sync)
23    pico_add_subdirectory(common/pico_time)
24    pico_add_subdirectory(common/pico_util)
25    pico_add_subdirectory(common/pico_stdlib_headers)
26endif()
27pico_add_subdirectory(common/hardware_claim)
28#
29# RP2040/RP2350 specific From standard build variants
30pico_add_subdirectory(${RP2_VARIANT_DIR}/pico_platform)
31pico_add_subdirectory(${RP2_VARIANT_DIR}/hardware_regs)
32pico_add_subdirectory(${RP2_VARIANT_DIR}/hardware_structs)
33pico_add_subdirectory(${RP2_VARIANT_DIR}/boot_stage2)
34
35pico_add_subdirectory(rp2_common/hardware_base)
36# HAL items which expose a public (inline rp2_common) functions/macro API above the raw hardware
37pico_add_subdirectory(rp2_common/hardware_adc)
38pico_add_subdirectory(rp2_common/hardware_boot_lock)
39pico_add_subdirectory(rp2_common/hardware_clocks)
40pico_add_subdirectory(rp2_common/hardware_divider)
41pico_add_subdirectory(rp2_common/hardware_dma)
42pico_add_subdirectory(rp2_common/hardware_exception)
43pico_add_subdirectory(rp2_common/hardware_flash)
44pico_add_subdirectory(rp2_common/hardware_gpio)
45pico_add_subdirectory(rp2_common/hardware_i2c)
46pico_add_subdirectory(rp2_common/hardware_interp)
47pico_add_subdirectory(rp2_common/hardware_irq)
48pico_add_subdirectory(rp2_common/hardware_pio)
49pico_add_subdirectory(rp2_common/hardware_pll)
50pico_add_subdirectory(rp2_common/hardware_pwm)
51pico_add_subdirectory(rp2_common/hardware_resets)
52if (PICO_RP2040 OR PICO_COMBINED_DOCS)
53    pico_add_subdirectory(rp2_common/hardware_rtc)
54endif()
55pico_add_subdirectory(rp2_common/hardware_spi)
56pico_add_subdirectory(rp2_common/hardware_sync)
57pico_add_subdirectory(rp2_common/hardware_sync_spin_lock)
58pico_add_subdirectory(rp2_common/hardware_ticks)
59pico_add_subdirectory(rp2_common/hardware_timer)
60pico_add_subdirectory(rp2_common/hardware_uart)
61pico_add_subdirectory(rp2_common/hardware_vreg)
62pico_add_subdirectory(rp2_common/hardware_watchdog)
63pico_add_subdirectory(rp2_common/hardware_xip_cache)
64pico_add_subdirectory(rp2_common/hardware_xosc)
65
66if (PICO_RP2350 OR PICO_COMBINED_DOCS)
67    pico_add_subdirectory(rp2_common/hardware_powman)
68    # Note in spite of the name this is usable on Arm as well as RISC-V:
69    pico_add_subdirectory(rp2_common/hardware_riscv_platform_timer)
70    pico_add_subdirectory(rp2_common/hardware_sha256)
71endif()
72
73if (PICO_RP2350 OR PICO_COMBINED_DOCS)
74    pico_add_subdirectory(rp2_common/hardware_dcp)
75    pico_add_subdirectory(rp2_common/hardware_rcp)
76endif()
77
78if (PICO_RISCV OR PICO_COMBINED_DOCS)
79    pico_add_subdirectory(rp2_common/hardware_riscv)
80    pico_add_subdirectory(rp2_common/hardware_hazard3)
81endif()
82
83# Basic bootrom headers
84pico_add_subdirectory(rp2_common/boot_bootrom_headers)
85pico_add_subdirectory(rp2_common/pico_platform_compiler)
86pico_add_subdirectory(rp2_common/pico_platform_sections)
87pico_add_subdirectory(rp2_common/pico_platform_panic)
88
89if (NOT PICO_BARE_METAL)
90    # NOTE THE ORDERING HERE IS IMPORTANT AS SOME TARGETS CHECK ON EXISTENCE OF OTHER TARGETS
91    pico_add_subdirectory(rp2_common/pico_aon_timer)
92    # Helper functions to connect to data/functions in the bootrom
93    pico_add_subdirectory(rp2_common/pico_bootrom)
94    pico_add_subdirectory(rp2_common/pico_bootsel_via_double_reset)
95    pico_add_subdirectory(rp2_common/pico_multicore)
96    pico_add_subdirectory(rp2_common/pico_unique_id)
97
98    pico_add_subdirectory(rp2_common/pico_atomic)
99    pico_add_subdirectory(rp2_common/pico_bit_ops)
100    pico_add_subdirectory(rp2_common/pico_divider)
101    pico_add_subdirectory(rp2_common/pico_double)
102    pico_add_subdirectory(rp2_common/pico_int64_ops)
103    pico_add_subdirectory(rp2_common/pico_flash)
104    pico_add_subdirectory(rp2_common/pico_float)
105    pico_add_subdirectory(rp2_common/pico_mem_ops)
106    pico_add_subdirectory(rp2_common/pico_malloc)
107    pico_add_subdirectory(rp2_common/pico_printf)
108    pico_add_subdirectory(rp2_common/pico_rand)
109
110    if (PICO_RP2350 OR PICO_COMBINED_DOCS)
111        pico_add_subdirectory(rp2_common/pico_sha256)
112    endif()
113
114    pico_add_subdirectory(rp2_common/pico_stdio_semihosting)
115    pico_add_subdirectory(rp2_common/pico_stdio_uart)
116    pico_add_subdirectory(rp2_common/pico_stdio_rtt)
117
118    if (NOT PICO_RISCV)
119         pico_add_subdirectory(rp2_common/cmsis)
120    endif()
121    pico_add_subdirectory(rp2_common/tinyusb)
122    pico_add_subdirectory(rp2_common/pico_stdio_usb)
123    pico_add_subdirectory(rp2_common/pico_i2c_slave)
124
125    # networking libraries - note dependency order is important
126    pico_add_subdirectory(rp2_common/pico_async_context)
127    pico_add_subdirectory(rp2_common/pico_btstack)
128    pico_add_subdirectory(rp2_common/pico_cyw43_driver)
129    pico_add_subdirectory(rp2_common/pico_lwip)
130    pico_add_subdirectory(rp2_common/pico_cyw43_arch)
131    pico_add_subdirectory(rp2_common/pico_mbedtls)
132
133    pico_add_subdirectory(rp2_common/pico_time_adapter)
134
135    pico_add_subdirectory(rp2_common/pico_crt0)
136    pico_add_subdirectory(rp2_common/pico_clib_interface)
137    pico_add_subdirectory(rp2_common/pico_cxx_options)
138    pico_add_subdirectory(rp2_common/pico_standard_binary_info)
139    pico_add_subdirectory(rp2_common/pico_standard_link)
140
141    pico_add_subdirectory(rp2_common/pico_fix)
142
143    # at the end as it includes a lot of other stuff
144    pico_add_subdirectory(rp2_common/pico_runtime_init)
145    pico_add_subdirectory(rp2_common/pico_runtime)
146
147    # this requires all the pico_stdio_ libraries
148    pico_add_subdirectory(rp2_common/pico_stdio)
149    # this requires runtime
150    pico_add_subdirectory(rp2_common/pico_stdlib)
151endif()
152
153# configure doxygen directories
154#pico_add_doxygen(${COMMON_DIR})
155#pico_add_doxygen(${RP2_VARIANT_DIR})
156pico_add_doxygen_exclude(${RP2_VARIANT_DIR}/hardware_regs) # very very big
157# but we DO want dreq.h; it doesn't change much, so lets just use configure_file
158configure_file(${RP2_VARIANT_DIR}/hardware_regs/include/hardware/regs/dreq.h ${CMAKE_CURRENT_BINARY_DIR}/extra_doxygen/dreq.h COPYONLY)
159# also intctrl.h
160configure_file(${RP2_VARIANT_DIR}/hardware_regs/include/hardware/regs/intctrl.h ${CMAKE_CURRENT_BINARY_DIR}/extra_doxygen/intctrl.h COPYONLY)
161pico_add_doxygen(${CMAKE_CURRENT_BINARY_DIR}/extra_doxygen)
162
163#pico_add_doxygen(rp2_common)
164pico_add_doxygen_exclude(rp2_common/cmsis) # very big
165