1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
|
add_library(kitchen_sink_libs INTERFACE)
set(KITCHEN_SINK_LIBS
hardware_adc
hardware_clocks
hardware_divider
hardware_dma
hardware_exception
hardware_flash
hardware_gpio
hardware_i2c
hardware_interp
hardware_irq
hardware_pio
hardware_powman
hardware_pll
hardware_pwm
hardware_resets
hardware_rtc
hardware_spi
hardware_sync
hardware_ticks
hardware_timer
hardware_uart
hardware_vreg
hardware_watchdog
hardware_xip_cache
hardware_xosc
pico_aon_timer
pico_bit_ops
pico_bootrom
pico_bootsel_via_double_reset
pico_divider
pico_double
pico_fix_rp2040_usb_device_enumeration
pico_flash
pico_float
pico_i2c_slave
pico_int64_ops
pico_malloc
pico_mem_ops
pico_multicore
pico_platform
pico_rand
pico_sha256
pico_stdlib
pico_sync
pico_time
pico_unique_id
pico_util
)
foreach(LIB IN LISTS KITCHEN_SINK_LIBS)
if (TARGET ${LIB})
target_link_libraries(kitchen_sink_libs INTERFACE ${LIB})
endif()
endforeach ()
add_library(kitchen_sink_options INTERFACE)
target_compile_options(kitchen_sink_options INTERFACE
-Werror
-Wall
-Wextra
# -pedantic
-Wnull-dereference
-Wuninitialized
-Wunused
-Wcast-align
-Wcast-qual
-Wfloat-equal
-Wmissing-format-attribute
#-Wconversion
-Wsign-compare
$<$<COMPILE_LANGUAGE:C>:-Wstrict-prototypes>
# todo we have some of these in usb_device_tiny to try to make it more readable.. perhaps doxygen would help here instead
-Wredundant-decls
-Wno-inline
# todo not sure these are true, but investigate
#-Wpacked
# todo useful but fix later
#-Wundef
)
if (PICO_C_COMPILER_IS_CLANG)
# todo fix up clang warnings
target_compile_options(kitchen_sink_options INTERFACE
-Wno-cast-qual
-Wno-unused-function
-Wno-format)
endif()
target_compile_definitions(kitchen_sink_libs INTERFACE
PICO_FORBID_ARM_HEADERS_ON_RISCV=1
PARAM_ASSERTIONS_ENABLE_ALL=1 # want to check all the assertions for compilation warnings
PICO_AUDIO_DMA_IRQ=1
)
add_executable(kitchen_sink ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink kitchen_sink_libs kitchen_sink_options)
pico_set_program_name(kitchen_sink "Wombat tentacles")
pico_add_extra_outputs(kitchen_sink)
target_compile_definitions(kitchen_sink PRIVATE KITCHEN_SINK_ID="regular binary")
add_executable(kitchen_sink_extra_stdio ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
if (COMMAND suppress_tinyusb_warnings)
# Explicitly suppress warnings in TinyUSB files which have them (this has to be done
# from the project that uses them per CMake "feature"). Note the function comes from
# TinyUSB itself, so we have to guard against TinyUSB not being present with the above if
suppress_tinyusb_warnings()
endif()
target_compile_definitions(kitchen_sink_extra_stdio PRIVATE
TUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1)
if (TARGET pico_lwip)
set_source_files_properties(
${PICO_LWIP_PATH}/src/core/ipv4/ip4_frag.c
PROPERTIES
COMPILE_FLAGS "-Wno-null-dereference")
endif()
target_link_libraries(kitchen_sink_extra_stdio kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_extra_stdio)
pico_enable_stdio_usb(kitchen_sink_extra_stdio 1)
pico_enable_stdio_semihosting(kitchen_sink_extra_stdio 1)
add_executable(kitchen_sink_printf_compiler ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink_printf_compiler kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_printf_compiler)
pico_set_printf_implementation(kitchen_sink_printf_compiler compiler)
add_executable(kitchen_sink_printf_compiler_no_shortcircuit ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink_printf_compiler_no_shortcircuit kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_printf_compiler_no_shortcircuit)
pico_set_printf_implementation(kitchen_sink_printf_compiler_no_shortcircuit compiler)
target_compile_definitions(kitchen_sink_printf_compiler_no_shortcircuit PRIVATE PICO_STDIO_SHORT_CIRCUIT_CLIB_FUNCS=0)
add_executable(kitchen_sink_printf_none ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink_printf_none kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_printf_none)
pico_set_printf_implementation(kitchen_sink_printf_none none)
add_executable(kitchen_sink_copy_to_ram ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
pico_set_binary_type(kitchen_sink_copy_to_ram copy_to_ram)
target_link_libraries(kitchen_sink_copy_to_ram kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_copy_to_ram)
target_compile_definitions(kitchen_sink_copy_to_ram PRIVATE KITCHEN_SINK_ID="copy-to-ram binary")
add_executable(kitchen_sink_no_flash ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
pico_set_binary_type(kitchen_sink_no_flash no_flash)
target_link_libraries(kitchen_sink_no_flash kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_no_flash)
target_compile_definitions(kitchen_sink_no_flash PRIVATE KITCHEN_SINK_ID="no-flash binary")
if (NOT PICO_RP2350)
# RP2350 does not have blocked ram
add_executable(kitchen_sink_blocked_ram ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
pico_set_binary_type(kitchen_sink_blocked_ram blocked_ram)
target_link_libraries(kitchen_sink_blocked_ram kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_blocked_ram)
target_compile_definitions(kitchen_sink_blocked_ram PRIVATE KITCHEN_SINK_ID="blocked-ram binary")
endif()
add_executable(kitchen_sink_cpp ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink_cpp.cpp)
target_link_libraries(kitchen_sink_cpp kitchen_sink_libs kitchen_sink_options)
pico_set_program_name(kitchen_sink_cpp "Wombat tentacles CPP")
pico_add_extra_outputs(kitchen_sink_cpp)
if (TARGET pico_cyw43_arch)
# for lwipopts.h
add_executable(kitchen_sink_lwip_poll ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink_lwip_poll kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_lwip_poll)
target_link_libraries(kitchen_sink_lwip_poll
pico_cyw43_arch_lwip_poll)
if (TARGET pico_btstack)
target_link_libraries(kitchen_sink_lwip_poll
pico_btstack_ble pico_btstack_classic pico_btstack_cyw43)
endif()
# for lwipopts.h and btstack_config.h.
target_include_directories(kitchen_sink_lwip_poll PRIVATE
${CMAKE_CURRENT_LIST_DIR})
add_executable(kitchen_sink_lwip_background ${CMAKE_CURRENT_LIST_DIR}/kitchen_sink.c)
target_link_libraries(kitchen_sink_lwip_background kitchen_sink_libs kitchen_sink_options)
pico_add_extra_outputs(kitchen_sink_lwip_background)
target_link_libraries(kitchen_sink_lwip_background
pico_cyw43_arch_lwip_threadsafe_background)
# for lwipopts.h
target_include_directories(kitchen_sink_lwip_background PRIVATE
${CMAKE_CURRENT_LIST_DIR})
if (TARGET pico_lwip_mbedtls)
target_link_libraries(kitchen_sink_lwip_poll pico_lwip_mbedtls)
target_link_libraries(kitchen_sink_lwip_background pico_lwip_mbedtls)
endif()
if (TARGET pico_mbedtls)
target_link_libraries(kitchen_sink_lwip_poll pico_mbedtls)
target_link_libraries(kitchen_sink_lwip_background pico_mbedtls)
suppress_mbedtls_warnings()
endif()
endif()
if (TARGET pico_btstack_base AND COMMAND suppress_btstack_warnings)
suppress_btstack_warnings()
endif()
|