annotate local.cmake @ 14:388074ff9474

Add fixed point code
author Daniel O'Connor <darius@dons.net.au>
date Tue, 25 Feb 2025 13:28:29 +1030
parents b9ec45077bff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
1 function(bin2elf TARGET BINFILE)
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
2 cmake_parse_arguments(bin2elf "" "OUTPUT_DIR" "" ${ARGN})
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
3 set(FILENAME "${CMAKE_SOURCE_DIR}/${BINFILE}")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
4 set(ELFNAME "${CMAKE_CURRENT_BINARY_DIR}/${BINFILE}.o")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
5 #message("FILENAME ${FILENAME} ELFNAME ${ELFNAME}")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
6
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
7 # Not sure why but we can't depend directly, have to create this intermediary
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
8 # Copied idea from pico_generate_pio_header
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
9 get_filename_component(BIN_GEN_TARGET ${BINFILE} NAME_WE)
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
10 set(BIN_GEN_TARGET "${TARGET}_${BIN_GEN_TARGET}")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
11 add_custom_target(${BIN_GEN_TARGET} DEPENDS ${ELFNAME})
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
12
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
13 # Create symbol name for bin file
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
14 string(MAKE_C_IDENTIFIER ${BINFILE} BIN_SYMNAME)
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
15 #message("BINFILE ${BINFILE} BIN_SYMNAME ${BIN_SYMNAME}")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
16
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
17 # Get directory name of source file
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
18 # ld will name the symbol based on the full path so we have to mangle it
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
19 get_filename_component(BIN_SRC_DIR ${FILENAME} DIRECTORY)
1
b9ec45077bff Use MAKE_C_IDENTIFIER since it's available.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
20 string(MAKE_C_IDENTIFIER ${BIN_SRC_DIR} SRC_DIRNAME_MANGLED)
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
21 #message("SRC_DIRNAME_MANGLED ${SRC_DIRNAME_MANGLED}")
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
22
1
b9ec45077bff Use MAKE_C_IDENTIFIER since it's available.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
23 # http://stupefydeveloper.blogspot.com/2008/08/cc-embed-binary-data-into-elf.html
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
24 add_custom_command(OUTPUT ${ELFNAME}
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
25 COMMAND arm-none-eabi-ld -r -b binary -o ${ELFNAME}
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
26 --defsym=${BIN_SYMNAME}_start=_binary_${SRC_DIRNAME_MANGLED}_${BIN_SYMNAME}_start
1
b9ec45077bff Use MAKE_C_IDENTIFIER since it's available.
Daniel O'Connor <darius@dons.net.au>
parents: 0
diff changeset
27 --defsym=${BIN_SYMNAME}_end=_binary_${SRC_DIRNAME_MANGLED}_${BIN_SYMNAME}_end
0
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
28 --defsym=${BIN_SYMNAME}_size=_binary_${SRC_DIRNAME_MANGLED}_${BIN_SYMNAME}_size
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
29 ${FILENAME}
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
30 DEPENDS ${FILENAME})
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
31 add_dependencies(${TARGET} ${BIN_GEN_TARGET})
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
32
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
33 # Add object file to list of things to be linked
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
34 target_link_libraries(${TARGET} ${CMAKE_CURRENT_BINARY_DIR}/${ELFNAME})
a55e39064a71 First commit of code that compiles.
Daniel O'Connor <darius@dons.net.au>
parents:
diff changeset
35 endfunction()