@@ -30,6 +30,51 @@ if (NOT TARGET pico_standard_link)
30
30
set_target_properties (${TARGET} PROPERTIES PICO_TARGET_BINARY_TYPE ${TYPE} )
31
31
endfunction ()
32
32
33
+ function (pico_set_modified_binary_type TARGET TYPE )
34
+ set (multiValueArgs RAM SCRATCH_X SCRATCH_Y )
35
+ cmake_parse_arguments (PARSE_ARGV 0 args
36
+ "" "" "${multiValueArgs} "
37
+ )
38
+
39
+ pico_set_binary_type (${TARGET} ${TYPE} )
40
+
41
+ # Scripts that will be created by this function
42
+ set (LINKER_CMAKE_SCRIPT "${CMAKE_CURRENT_BINARY_DIR} /memmap_${TARGET} .cmake" )
43
+ set (LINKER_LD_SCRIPT "${CMAKE_CURRENT_BINARY_DIR} /memmap_${TARGET} .ld" )
44
+
45
+ # Configure memmap_${TARGET}.cmake script file to create memmap_${TARGET}.ld
46
+ if (args_RAM )
47
+ list (POP_FRONT args_RAM ORIGIN LENGTH )
48
+ set (RAM "string(REGEX REPLACE \" RAM\\\\ (rwx\\\\ ) *: *ORIGIN *= *[0-9xX]*, *LENGTH *= *[0-9kKmM]*\\ n\" \" RAM(rwx) : ORIGIN = ${ORIGIN} , LENGTH = ${LENGTH} \\ n\" LINKER_SCRIPT \"\$ {LINKER_SCRIPT}\" )\n " )
49
+ endif ()
50
+ if (args_SCRATCH_X )
51
+ list (POP_FRONT args_SCRATCH_X ORIGIN LENGTH )
52
+ set (SCRATCH_X "string(REGEX REPLACE \" SCRATCH_X\\\\ (rwx\\\\ ) *: *ORIGIN *= *[0-9xX]*, *LENGTH *= *[0-9kKmM]*\\ n\" \" SCRATCH_X(rwx) : ORIGIN = ${ORIGIN} , LENGTH = ${LENGTH} \\ n\" LINKER_SCRIPT \"\$ {LINKER_SCRIPT}\" )\n " )
53
+ endif ()
54
+ if (args_SCRATCH_Y )
55
+ list (POP_FRONT args_SCRATCH_Y ORIGIN LENGTH )
56
+ set (SCRATCH_Y "string(REGEX REPLACE \" SCRATCH_Y\\\\ (rwx\\\\ ) *: *ORIGIN *= *[0-9xX]*, *LENGTH *= *[0-9kKmM]*\\ n\" \" SCRATCH_Y(rwx) : ORIGIN = ${ORIGIN} , LENGTH = ${LENGTH} \\ n\" LINKER_SCRIPT \"\$ {LINKER_SCRIPT}\" )\n " )
57
+ endif ()
58
+ if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0" )
59
+ # CMAKE_CURRENT_FUNCTION_LIST_DIR added in 3.17.0
60
+ configure_file (${CMAKE_CURRENT_FUNCTION_LIST_DIR} /memmap_script.template.cmake ${LINKER_CMAKE_SCRIPT} @ONLY )
61
+ else ()
62
+ configure_file (${PICO_SDK_PATH} src/rp2_common/pico_standard_link/memmap_script.template.cmake ${LINKER_CMAKE_SCRIPT} @ONLY )
63
+ endif ()
64
+
65
+ # Add command to run this script whenever it or memmap_${TYPE}.ld changes
66
+ add_custom_command (OUTPUT ${LINKER_LD_SCRIPT}
67
+ COMMAND ${CMAKE_COMMAND}
68
+ -DPICO_LINKER_SCRIPT_PATH:PATH=${PICO_LINKER_SCRIPT_PATH}
69
+ -Doutput_file:FILEPATH=${LINKER_LD_SCRIPT}
70
+ -P "${LINKER_CMAKE_SCRIPT} "
71
+ DEPENDS ${PICO_LINKER_SCRIPT_PATH} /memmap_${TYPE}.ld ${LINKER_CMAKE_SCRIPT} )
72
+ add_custom_target (memmap_${TARGET}_ld DEPENDS ${LINKER_LD_SCRIPT} )
73
+ add_dependencies (${TARGET} memmap_${TARGET}_ld )
74
+
75
+ pico_set_linker_script (${TARGET} ${CMAKE_CURRENT_BINARY_DIR} /memmap_${TARGET}.ld )
76
+ endfunction ()
77
+
33
78
if (NOT PICO_DEFAULT_BINARY_TYPE )
34
79
if (PICO_NO_FLASH )
35
80
set (PICO_DEFAULT_BINARY_TYPE no_flash )
0 commit comments