From e6f02d07f80840eac309e7c45ddc9ee61e926685 Mon Sep 17 00:00:00 2001 From: James Goppert Date: Sun, 30 Oct 2011 14:47:30 -0400 Subject: [PATCH] CMake sketch processing almost complete Need to get prototypes included after last include. Use string find? --- CMakeLists.txt | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 652ed40c39..ebd743c970 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,26 +80,53 @@ message(STATUS "Board configured as: ${BOARD}") # add a sketch macro(add_sketch SKETCH_NAME BOARD PORT) + message(STATUS "Generating sketch ${SKETCH_NAME}") + + # files set(SKETCH_CPP ${CMAKE_CURRENT_BINARY_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.cpp) - set(SKETCH_PDE ${SKETCH_NAME}/${SKETCH_NAME}.pde) + set(SKETCH_PDE ${CMAKE_CURRENT_SOURCE_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.pde) + + # settings set(${SKETCH_NAME}_BOARD ${BOARD}) set(${SKETCH_NAME}_PORT ${PORT}) set(${SKETCH_NAME}_SRCS ${SKETCH_CPP}) set(${SKETCH_NAME}_LIBS m c) + + # find pde files file(GLOB PDE_SOURCES ${SKETCH_NAME}/*.pde) - file(READ ${SKETCH_PDE} FILE) - file(WRITE ${SKETCH_CPP} ${FILE}) - file(APPEND ${SKETCH_CPP} "#include \"WProgram.h\"") list(REMOVE_ITEM PDE_SOURCES ${SKETCH_PDE}) list(SORT PDE_SOURCES) + + # write main pde + file(WRITE ${SKETCH_CPP} "// automatically generated by arduino-cmake\n") + + # write prototypes foreach(PDE ${PDE_SOURCES}) + message(STATUS "pde: ${PDE}") + file(READ ${PDE} FILE) + string(REGEX MATCHALL "[ ]*(static)?[ ]*(unsigned|signed)?[ ]*(void)+[ ]*[ _a-zA-Z0-9]*[(][^)]*[)]" PROTOTYPES ${FILE}) + foreach(PROTOTYPE ${PROTOTYPES}) + message(STATUS "\tprototype: ${PROTOTYPE}") + file(APPEND ${SKETCH_CPP} "${PROTOTYPE};\n") + endforeach() + endforeach() + + # write source + file(READ ${SKETCH_PDE} FILE) + file(APPEND ${SKETCH_CPP} ${FILE}) + foreach (PDE ${PDE_SOURCES}) file(READ ${PDE} FILE) file(APPEND ${SKETCH_CPP} ${FILE}) endforeach() + file(APPEND ${SKETCH_CPP} "#include \"WProgram.h\"\n") + + # generate firmware include_directories(${SKETCH_NAME}) generate_arduino_firmware(${SKETCH_NAME}) set_target_properties(${SKETCH_NAME} PROPERTIES LINKER_LANGUAGE CXX) + + # install settings install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${SKETCH_NAME}.hex DESTINATION bin