blob: 3665cd80514d6b2a1aa9cde4d26c8983bac076f2 [file] [log] [blame]
pico_add_library(pico_runtime)
target_sources(pico_runtime INTERFACE
${CMAKE_CURRENT_LIST_DIR}/runtime.c
)
target_include_directories(pico_runtime_headers SYSTEM INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include)
pico_mirrored_target_link_libraries(pico_runtime INTERFACE
pico_base
pico_runtime_init
)
if (TARGET hardware_gpio_headers)
target_link_libraries(pico_runtime INTERFACE hardware_gpio_headers) # to determine if we should init GPIO copro
endif()
if (TARGET hardware_riscv_headers)
target_link_libraries(pico_runtime INTERFACE hardware_riscv_headers)
endif()
set(PICO_RUNTIME_LIBRARIES
hardware_uart
pico_bit_ops
pico_divider
pico_double
pico_int64_ops
pico_float
pico_malloc
pico_mem_ops
pico_atomic
pico_cxx_options
pico_standard_binary_info
pico_standard_link
pico_sync
pico_printf
pico_crt0
pico_clib_interface
pico_stdio
)
foreach(LIB IN LISTS PICO_RUNTIME_LIBRARIES)
if (TARGET ${LIB})
pico_mirrored_target_link_libraries(pico_runtime INTERFACE ${LIB})
endif()
endforeach()
# todo is this correct/needed?
if (PICO_C_COMPILER_IS_GNU)
target_link_options(pico_runtime INTERFACE "--specs=nosys.specs")
elseif (PICO_C_COMPILER_IS_CLANG)
# target_link_options(pico_runtime INTERFACE "-nostdlib")
endif()
# pico_minimize_runtime((INCLUDE ...) (EXCLUDE ...))
#
# INCLUDE/EXCLUDE can contain any of the following (all defaulting to not included)
#
# DEFAULT_ALARM_POOL - default alarm pool setup
# PRINTF - full printf support
# PRINTF_MINIMAL - printf support without the following
# PRINTF_FLOAT - to control float support if printf is enabled
# PRINTF_EXPONENTIAL
# PRINTF_LONG_LONG
# PRINTF_PTRDIFF_T
# FLOAT - support for single-precision floating point
# DOUBLE - support for double-precision floating point
# FPGA_CHECK - checks for FPGA which allows Raspberry Pi to run your binary on FPGA
function(pico_minimize_runtime TARGET)
cmake_parse_arguments(RUNTIME "" ""
"INCLUDE;EXCLUDE" ${ARGN} )
foreach (INCL_EXCL IN ITEMS INCLUDE EXCLUDE)
if (INCL_EXCL STREQUAL "INCLUDE")
set(VAL 1)
else()
set(VAL 0)
endif()
foreach(VAR IN LISTS RUNTIME_${INCL_EXCL})
set(RUNTIME_INCLUDE_${VAR} ${VAL})
endforeach ()
endforeach ()
if (NOT RUNTIME_INCLUDE_DEFAULT_ALARM_POOL)
target_compile_definitions(${TARGET} PRIVATE PICO_TIME_DEFAULT_ALARM_POOL_DISABLED=1)
endif()
if (NOT RUNTIME_INCLUDE_FLOAT)
pico_set_float_implementation(${TARGET} none)
endif()
if (NOT RUNTIME_INCLUDE_DOUBLE)
pico_set_double_implementation(${TARGET} none)
endif()
if (NOT RUNTIME_INCLUDE_AUTO_INIT_MUTEX)
target_compile_definitions(${TARGET} PRIVATE PICO_RUNTIME_SKIP_INIT_MUTEX=1)
endif()
if (RUNTIME_INCLUDE_PRINTF)
if (NOT RUNTIME_INCLUDE_PRINTF_MINIMAL)
set( RUNTIME_INCLUDE_PRINTF_FLOAT 1)
set( RUNTIME_INCLUDE_PRINTF_EXPONENTIAL 1)
set( RUNTIME_INCLUDE_PRINTF_LONG_LONG 1)
set( RUNTIME_INCLUDE_PRINTF_PTRDIFF_T 1)
endif()
if (NOT RUNTIME_INCLUDE_PRINTF_FLOAT)
target_compile_definitions(${TARGET} PRIVATE PICO_PRINTF_SUPPORT_FLOAT=0)
endif()
if (NOT RUNTIME_INCLUDE_PRINTF_EXPONENTIAL)
target_compile_definitions(${TARGET} PRIVATE PICO_PRINTF_SUPPORT_EXPONENTIAL=0)
endif()
if (NOT RUNTIME_INCLUDE_PRINTF_LONG_LONG)
target_compile_definitions(${TARGET} PRIVATE PICO_PRINTF_SUPPORT_LONG_LONG=0)
endif()
if (NOT RUNTIME_INCLUDE_PRINTF_PTRDIFF_T)
target_compile_definitions(${TARGET} PRIVATE PICO_PRINTF_SUPPORT_PTRDIFF_T=0)
endif()
else()
pico_set_printf_implementation(${TARGET} none)
endif()
if (NOT RUNTIME_INCLUDE_FPGA_CHECK)
target_compile_definitions(${TARGET} PRIVATE PICO_NO_FPGA_CHECK=1)
endif()
endfunction()