diff --git a/src/cmake/rp2_common.cmake b/src/cmake/rp2_common.cmake index 273839f70..f97775d8a 100644 --- a/src/cmake/rp2_common.cmake +++ b/src/cmake/rp2_common.cmake @@ -16,6 +16,7 @@ pico_add_subdirectory(common/pico_usb_reset_interface_headers) # PICO_CMAKE_CONFIG: PICO_BARE_METAL, Flag to exclude anything except base headers from the build, type=bool, default=0, group=build if (NOT PICO_BARE_METAL) + pico_add_subdirectory(common/pico_async_context) pico_add_subdirectory(common/pico_bit_ops_headers) pico_add_subdirectory(common/pico_binary_info) pico_add_subdirectory(common/pico_divider_headers) @@ -124,7 +125,6 @@ if (NOT PICO_BARE_METAL) pico_add_subdirectory(rp2_common/pico_i2c_slave) # networking libraries - note dependency order is important - pico_add_subdirectory(rp2_common/pico_async_context) pico_add_subdirectory(rp2_common/pico_btstack) pico_add_subdirectory(rp2_common/pico_cyw43_driver) pico_add_subdirectory(rp2_common/pico_mbedtls) diff --git a/src/rp2_common/pico_async_context/BUILD.bazel b/src/common/pico_async_context/BUILD.bazel similarity index 62% rename from src/rp2_common/pico_async_context/BUILD.bazel rename to src/common/pico_async_context/BUILD.bazel index a2de0acd2..e886858ae 100644 --- a/src/rp2_common/pico_async_context/BUILD.bazel +++ b/src/common/pico_async_context/BUILD.bazel @@ -20,11 +20,16 @@ cc_library( "include/pico/async_context_base.h", ], includes = ["include"], - target_compatible_with = compatible_with_rp2(), deps = [ "//src/common/pico_time", - "//src/rp2_common:pico_platform", - ], + ] + select({ + "//bazel/constraint:host": [ + "//src/host/pico_platform", + ], + "//conditions:default": [ + "//src/rp2_common:pico_platform", + ], + }), ) cc_library( @@ -32,7 +37,7 @@ cc_library( srcs = ["async_context_freertos.c"], hdrs = ["include/pico/async_context_freertos.h"], includes = ["include"], - target_compatible_with = compatible_with_rp2() + incompatible_with_config( + target_compatible_with = incompatible_with_config( "//bazel/constraint:pico_freertos_unset", ), deps = [ @@ -40,9 +45,16 @@ cc_library( "//bazel/config:PICO_FREERTOS_LIB", "//src/common/pico_sync", "//src/common/pico_time", - "//src/rp2_common:pico_platform", - "//src/rp2_common/hardware_irq", - ], + ] + select({ + "//bazel/constraint:host": [ + "//src/host/pico_platform", + "//src/host/hardware_irq", + ], + "//conditions:default": [ + "//src/rp2_common:pico_platform", + "//src/rp2_common/hardware_irq", + ], + }), ) cc_library( @@ -50,13 +62,18 @@ cc_library( srcs = ["async_context_poll.c"], hdrs = ["include/pico/async_context_poll.h"], includes = ["include"], - target_compatible_with = compatible_with_rp2(), deps = [ ":pico_async_context_base", "//src/common/pico_sync", "//src/common/pico_time", - "//src/rp2_common:pico_platform", - ], + ] + select({ + "//bazel/constraint:host": [ + "//src/host/pico_platform", + ], + "//conditions:default": [ + "//src/rp2_common:pico_platform", + ], + }), ) cc_library( @@ -64,13 +81,20 @@ cc_library( srcs = ["async_context_threadsafe_background.c"], hdrs = ["include/pico/async_context_threadsafe_background.h"], includes = ["include"], - target_compatible_with = compatible_with_rp2(), deps = [ ":pico_async_context_base", "//src/common/pico_sync", "//src/common/pico_time", - "//src/rp2_common:pico_platform", - "//src/rp2_common/hardware_irq", - "//src/rp2_common/pico_multicore", - ], + ] + select({ + "//bazel/constraint:host": [ + "//src/host/pico_platform", + "//src/host/hardware_irq", + "//src/host/pico_multicore", + ], + "//conditions:default": [ + "//src/rp2_common:pico_platform", + "//src/rp2_common/hardware_irq", + "//src/rp2_common/pico_multicore", + ], + }), ) diff --git a/src/rp2_common/pico_async_context/CMakeLists.txt b/src/common/pico_async_context/CMakeLists.txt similarity index 87% rename from src/rp2_common/pico_async_context/CMakeLists.txt rename to src/common/pico_async_context/CMakeLists.txt index cb136aa2e..a2eb85a5a 100644 --- a/src/rp2_common/pico_async_context/CMakeLists.txt +++ b/src/common/pico_async_context/CMakeLists.txt @@ -15,10 +15,10 @@ pico_add_library(pico_async_context_threadsafe_background) target_sources(pico_async_context_threadsafe_background INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_threadsafe_background.c ) -pico_mirrored_target_link_libraries(pico_async_context_threadsafe_background INTERFACE pico_async_context_base) +pico_mirrored_target_link_libraries(pico_async_context_threadsafe_background INTERFACE pico_async_context_base hardware_claim hardware_irq pico_multicore) pico_add_library(pico_async_context_freertos) target_sources(pico_async_context_freertos INTERFACE ${CMAKE_CURRENT_LIST_DIR}/async_context_freertos.c ) -pico_mirrored_target_link_libraries(pico_async_context_freertos INTERFACE pico_async_context_base) +pico_mirrored_target_link_libraries(pico_async_context_freertos INTERFACE pico_async_context_base hardware_claim hardware_irq) diff --git a/src/rp2_common/pico_async_context/async_context_base.c b/src/common/pico_async_context/async_context_base.c similarity index 100% rename from src/rp2_common/pico_async_context/async_context_base.c rename to src/common/pico_async_context/async_context_base.c diff --git a/src/rp2_common/pico_async_context/async_context_freertos.c b/src/common/pico_async_context/async_context_freertos.c similarity index 100% rename from src/rp2_common/pico_async_context/async_context_freertos.c rename to src/common/pico_async_context/async_context_freertos.c diff --git a/src/rp2_common/pico_async_context/async_context_poll.c b/src/common/pico_async_context/async_context_poll.c similarity index 100% rename from src/rp2_common/pico_async_context/async_context_poll.c rename to src/common/pico_async_context/async_context_poll.c diff --git a/src/rp2_common/pico_async_context/async_context_threadsafe_background.c b/src/common/pico_async_context/async_context_threadsafe_background.c similarity index 100% rename from src/rp2_common/pico_async_context/async_context_threadsafe_background.c rename to src/common/pico_async_context/async_context_threadsafe_background.c diff --git a/src/rp2_common/pico_async_context/include/pico/async_context.h b/src/common/pico_async_context/include/pico/async_context.h similarity index 100% rename from src/rp2_common/pico_async_context/include/pico/async_context.h rename to src/common/pico_async_context/include/pico/async_context.h diff --git a/src/rp2_common/pico_async_context/include/pico/async_context_base.h b/src/common/pico_async_context/include/pico/async_context_base.h similarity index 100% rename from src/rp2_common/pico_async_context/include/pico/async_context_base.h rename to src/common/pico_async_context/include/pico/async_context_base.h diff --git a/src/rp2_common/pico_async_context/include/pico/async_context_freertos.h b/src/common/pico_async_context/include/pico/async_context_freertos.h similarity index 97% rename from src/rp2_common/pico_async_context/include/pico/async_context_freertos.h rename to src/common/pico_async_context/include/pico/async_context_freertos.h index 0120410f7..26e19bc29 100644 --- a/src/rp2_common/pico_async_context/include/pico/async_context_freertos.h +++ b/src/common/pico_async_context/include/pico/async_context_freertos.h @@ -44,6 +44,13 @@ typedef struct async_context_freertos async_context_freertos_t; #endif #endif +// On PICO_PLATFORM=host don't have ISR. +#if !PICO_ON_DEVICE +#ifndef portCHECK_IF_IN_ISR +#define portCHECK_IF_IN_ISR() (0) +#endif +#endif + /** * \brief Configuration object for async_context_freertos instances. */ diff --git a/src/rp2_common/pico_async_context/include/pico/async_context_poll.h b/src/common/pico_async_context/include/pico/async_context_poll.h similarity index 100% rename from src/rp2_common/pico_async_context/include/pico/async_context_poll.h rename to src/common/pico_async_context/include/pico/async_context_poll.h diff --git a/src/rp2_common/pico_async_context/include/pico/async_context_threadsafe_background.h b/src/common/pico_async_context/include/pico/async_context_threadsafe_background.h similarity index 100% rename from src/rp2_common/pico_async_context/include/pico/async_context_threadsafe_background.h rename to src/common/pico_async_context/include/pico/async_context_threadsafe_background.h diff --git a/src/host.cmake b/src/host.cmake index 10cafc7f9..ecea8a6cf 100644 --- a/src/host.cmake +++ b/src/host.cmake @@ -9,7 +9,8 @@ include (${CMAKE_DIR}/no_hardware.cmake) pico_add_subdirectory(${COMMON_DIR}/boot_picobin_headers) pico_add_subdirectory(${COMMON_DIR}/boot_picoboot_headers) pico_add_subdirectory(${COMMON_DIR}/boot_uf2_headers) - pico_add_subdirectory(${COMMON_DIR}/hardware_claim) + pico_add_subdirectory(${COMMON_DIR}/hardware_claim) + pico_add_subdirectory(${COMMON_DIR}/pico_async_context) pico_add_subdirectory(${COMMON_DIR}/pico_base_headers) pico_add_subdirectory(${COMMON_DIR}/pico_usb_reset_interface_headers) pico_add_subdirectory(${COMMON_DIR}/pico_bit_ops_headers) diff --git a/src/host/hardware_irq/BUILD.bazel b/src/host/hardware_irq/BUILD.bazel index af055a468..6a53f8ded 100644 --- a/src/host/hardware_irq/BUILD.bazel +++ b/src/host/hardware_irq/BUILD.bazel @@ -8,7 +8,7 @@ cc_library( tags = ["manual"], # TODO: No hardware/regs/intctrl.h for host yet. target_compatible_with = ["//bazel/constraint:host"], deps = [ - "//src/host/hardware_claim", + "//src/common/hardware_claim", "//src/host/pico_platform", ], ) diff --git a/src/host/pico_multicore/BUILD.bazel b/src/host/pico_multicore/BUILD.bazel index b837fb5de..1e76e2ae6 100644 --- a/src/host/pico_multicore/BUILD.bazel +++ b/src/host/pico_multicore/BUILD.bazel @@ -3,6 +3,7 @@ package(default_visibility = ["//visibility:public"]) cc_library( name = "pico_multicore", hdrs = ["include/pico/multicore.h"], + defines = ["LIB_PICO_MULTICORE=1"], includes = ["include"], target_compatible_with = ["//bazel/constraint:host"], deps = ["//src/host/pico_platform"], diff --git a/src/host/pico_platform/include/hardware/platform_defs.h b/src/host/pico_platform/include/hardware/platform_defs.h index c1a6f5f44..f91765e1a 100644 --- a/src/host/pico_platform/include/hardware/platform_defs.h +++ b/src/host/pico_platform/include/hardware/platform_defs.h @@ -18,6 +18,7 @@ #define NUM_USER_IRQS 6u #define FIRST_USER_IRQ (NUM_IRQS - NUM_USER_IRQS) #define VTABLE_FIRST_IRQ 16 +#define PICO_NUM_VTABLE_IRQS NUM_IRQS #define NUM_SPIN_LOCKS 32u diff --git a/src/host/pico_platform/include/pico/platform.h b/src/host/pico_platform/include/pico/platform.h index 0338354e5..1bfd5896d 100644 --- a/src/host/pico_platform/include/pico/platform.h +++ b/src/host/pico_platform/include/pico/platform.h @@ -128,6 +128,12 @@ void __noreturn panic_unsupported(); void __noreturn panic(const char *fmt, ...); +#ifdef NDEBUG +#define panic_compact(...) panic(__VA_ARGS__) +#else +#define panic_compact(...) panic("") +#endif + // arggggghhhh there is a weak function called sem_init used by SDL #define sem_init sem_init_alternative diff --git a/src/rp2_common/pico_btstack/BUILD.bazel b/src/rp2_common/pico_btstack/BUILD.bazel index 5d88ad690..c7322ad92 100644 --- a/src/rp2_common/pico_btstack/BUILD.bazel +++ b/src/rp2_common/pico_btstack/BUILD.bazel @@ -87,7 +87,7 @@ cc_library( target_compatible_with = compatible_with_pico_w(), deps = [ "//src/rp2_common/hardware_sync", - "//src/rp2_common/pico_async_context", + "//src/common/pico_async_context", "@btstack//:pico_btstack_base", ], ) diff --git a/src/rp2_common/pico_cyw43_arch/BUILD.bazel b/src/rp2_common/pico_cyw43_arch/BUILD.bazel index 286184e73..ee8b25c72 100644 --- a/src/rp2_common/pico_cyw43_arch/BUILD.bazel +++ b/src/rp2_common/pico_cyw43_arch/BUILD.bazel @@ -75,7 +75,7 @@ _CONFIGURATIONS = [ ), deps = [ "//src/rp2_common:pico_platform", - "//src/rp2_common/pico_async_context:pico_async_context_{}".format(kind), + "//src/common/pico_async_context:pico_async_context_{}".format(kind), "//src/rp2_common/pico_cyw43_driver", "//src/rp2_common/pico_unique_id", ] + ( diff --git a/src/rp2_common/pico_cyw43_driver/BUILD.bazel b/src/rp2_common/pico_cyw43_driver/BUILD.bazel index 3810b27c2..9bdbe28c1 100644 --- a/src/rp2_common/pico_cyw43_driver/BUILD.bazel +++ b/src/rp2_common/pico_cyw43_driver/BUILD.bazel @@ -34,7 +34,7 @@ cc_library( "//src/rp2_common/hardware_irq", "//src/rp2_common/hardware_pio", "//src/rp2_common/hardware_sync", - "//src/rp2_common/pico_async_context", + "//src/common/pico_async_context", "//src/rp2_common/pico_unique_id", "@cyw43-driver//:cyw43_driver", ] + select({ diff --git a/src/rp2_common/pico_lwip/BUILD.bazel b/src/rp2_common/pico_lwip/BUILD.bazel index cc5de44c8..0fc03e215 100644 --- a/src/rp2_common/pico_lwip/BUILD.bazel +++ b/src/rp2_common/pico_lwip/BUILD.bazel @@ -22,7 +22,7 @@ cc_library( ":pico_lwip", "//src/common/pico_time", "//src/rp2_common:pico_platform", - "//src/rp2_common/pico_async_context", + "//src/common/pico_async_context", "//src/rp2_common/pico_rand", ], alwayslink = True, @@ -38,7 +38,7 @@ cc_library( ":pico_lwip", "//src/common/pico_time", "//src/rp2_common:pico_platform", - "//src/rp2_common/pico_async_context", + "//src/common/pico_async_context", "//src/rp2_common/pico_rand", ], alwayslink = True, diff --git a/tools/build_all_headers.py b/tools/build_all_headers.py index a3e4f04b3..b54a2c127 100755 --- a/tools/build_all_headers.py +++ b/tools/build_all_headers.py @@ -20,9 +20,9 @@ IGNORE_DIRS = set(['host', 'boards']) IGNORE_DIRS.add('common/boot_picoboot') IGNORE_DIRS.add('common/boot_uf2') +IGNORE_DIRS.add('common/pico_async_context') IGNORE_DIRS.add('common/pico_usb_reset_interface') IGNORE_DIRS.add('rp2_common/cmsis') -IGNORE_DIRS.add('rp2_common/pico_async_context') IGNORE_DIRS.add('rp2_common/pico_btstack') #IGNORE_DIRS.add('rp2_common/pico_cyw43_arch') IGNORE_DIRS.add('rp2_common/pico_cyw43_driver')