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_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 $<$:-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 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()