diff local.cmake @ 0:a55e39064a71

First commit of code that compiles. Does nothing like it should but has cmake goo to wrap dat files
author Daniel O'Connor <darius@dons.net.au>
date Mon, 29 Mar 2021 13:48:34 +1030
parents
children b9ec45077bff
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/local.cmake	Mon Mar 29 13:48:34 2021 +1030
@@ -0,0 +1,33 @@
+function(bin2elf TARGET BINFILE)
+    cmake_parse_arguments(bin2elf "" "OUTPUT_DIR" "" ${ARGN})
+    set(FILENAME "${CMAKE_SOURCE_DIR}/${BINFILE}")
+    set(ELFNAME "${CMAKE_CURRENT_BINARY_DIR}/${BINFILE}.o")
+    #message("FILENAME ${FILENAME} ELFNAME ${ELFNAME}")
+
+    # Not sure why but we can't depend directly, have to create this intermediary
+    # Copied idea from pico_generate_pio_header
+    get_filename_component(BIN_GEN_TARGET ${BINFILE} NAME_WE)
+    set(BIN_GEN_TARGET "${TARGET}_${BIN_GEN_TARGET}")
+    add_custom_target(${BIN_GEN_TARGET} DEPENDS ${ELFNAME})
+
+    # Create symbol name for bin file
+    string(MAKE_C_IDENTIFIER ${BINFILE} BIN_SYMNAME)
+    #message("BINFILE ${BINFILE} BIN_SYMNAME ${BIN_SYMNAME}")
+
+    # Get directory name of source file
+    # ld will name the symbol based on the full path so we have to mangle it
+    get_filename_component(BIN_SRC_DIR ${FILENAME} DIRECTORY)
+    string(REPLACE "/" "_" SRC_DIRNAME_MANGLED ${BIN_SRC_DIR})
+    #message("SRC_DIRNAME_MANGLED ${SRC_DIRNAME_MANGLED}")
+
+    add_custom_command(OUTPUT ${ELFNAME}
+      COMMAND arm-none-eabi-ld -r -b binary -o ${ELFNAME}
+ --defsym=${BIN_SYMNAME}_start=_binary_${SRC_DIRNAME_MANGLED}_${BIN_SYMNAME}_start
+ --defsym=${BIN_SYMNAME}_size=_binary_${SRC_DIRNAME_MANGLED}_${BIN_SYMNAME}_size
+ ${FILENAME}
+        DEPENDS ${FILENAME})
+    add_dependencies(${TARGET} ${BIN_GEN_TARGET})
+
+    # Add object file to list of things to be linked
+    target_link_libraries(${TARGET} ${CMAKE_CURRENT_BINARY_DIR}/${ELFNAME})
+endfunction()