Mercurial > ~darius > hgwebdir.cgi > modulator
annotate local.cmake @ 4:b6416c4aadc8
Test implementation
author | Daniel O'Connor <darius@dons.net.au> |
---|---|
date | Tue, 04 Feb 2025 14:20:07 +1030 |
parents | b9ec45077bff |
children |
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() |