1if (NOT TARGET pico_mem_ops) 2 #shims for ROM functions for -lgcc functions (listed below) 3 pico_add_library(pico_mem_ops) 4 5 # no custom implementation; falls thru to compiler 6 pico_add_library(pico_mem_ops_compiler) 7 8 # add alias "default" which is just pico. 9 add_library(pico_mem_ops_default INTERFACE) 10 if (PICO_RP2040) 11 # RP2040 bootrom has optimized versions 12 target_link_libraries(pico_mem_ops_default INTERFACE pico_mem_ops_pico) 13 else() 14 # beware commpiler memcpy cannot be used for unaligned copies in peripheral space 15 target_link_libraries(pico_mem_ops_default INTERFACE pico_mem_ops_compiler) 16 endif() 17 18 set(PICO_DEFAULT_MEM_OPS_IMPL pico_mem_ops_default) 19 20 pico_add_library(pico_mem_ops_pico) 21 target_link_libraries(pico_mem_ops INTERFACE 22 $<IF:$<BOOL:$<TARGET_PROPERTY:PICO_TARGET_MEM_OPS_IMPL>>,$<TARGET_PROPERTY:PICO_TARGET_MEM_OPS_IMPL>,${PICO_DEFAULT_MEM_OPS_IMPL}>) 23 24 target_sources(pico_mem_ops_pico INTERFACE 25 ${CMAKE_CURRENT_LIST_DIR}/mem_ops_aeabi.S 26 ) 27 target_include_directories(pico_mem_ops_pico_headers SYSTEM INTERFACE ${CMAKE_CURRENT_LIST_DIR}/include) 28 pico_mirrored_target_link_libraries(pico_mem_ops_pico INTERFACE pico_base) 29 30 target_link_libraries(pico_mem_ops_pico INTERFACE pico_bootrom) 31 32 pico_wrap_function(pico_mem_ops_pico memcpy) 33 pico_wrap_function(pico_mem_ops_pico memset) 34 pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy) 35 pico_wrap_function(pico_mem_ops_pico __aeabi_memset) 36 pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy4) 37 pico_wrap_function(pico_mem_ops_pico __aeabi_memset4) 38 pico_wrap_function(pico_mem_ops_pico __aeabi_memcpy8) 39 pico_wrap_function(pico_mem_ops_pico __aeabi_memset8) 40 41 macro(pico_set_mem_ops_implementation TARGET IMPL) 42 get_target_property(target_type ${TARGET} TYPE) 43 if ("EXECUTABLE" STREQUAL "${target_type}") 44 set_target_properties(${TARGET} PROPERTIES PICO_TARGET_MEM_OPS_IMPL "pico_mem_ops_${IMPL}") 45 else() 46 message(FATAL_ERROR "mem_ops implementation must be set on executable not library") 47 endif() 48 endmacro() 49endif() 50