blob: 5395129d6f8b075c3a001f9e3a44c55ae053bcc6 [file] [log] [blame]
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
$<$<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
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()