Browse Source

Fixed some arduino cmake upload issues.

May still be necessary to reset some board before upload.
master
James Goppert 13 years ago
parent
commit
237ca6a4e5
  1. 12
      CMakeLists.txt
  2. 10
      README.txt
  3. 54
      cmake/modules/FindArduino.cmake
  4. 2
      cmake/updated-arduino-cmake.sh

12
CMakeLists.txt

@ -86,8 +86,8 @@ macro(add_sketch SKETCH_NAME BOARD PORT) @@ -86,8 +86,8 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
# files
set(SKETCH_CPP ${CMAKE_CURRENT_BINARY_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.cpp)
set(SKETCH_PDE ${CMAKE_CURRENT_SOURCE_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.pde)
message(STATUS "SKETCH_PDE:\n${SKETCH_PDE}")
message(STATUS "SKETCH_CPP:\n${SKETCH_CPP}")
#message(STATUS "SKETCH_PDE:\n${SKETCH_PDE}")
#message(STATUS "SKETCH_CPP:\n${SKETCH_CPP}")
# settings
set(${SKETCH_NAME}_BOARD ${BOARD})
@ -109,12 +109,12 @@ macro(add_sketch SKETCH_NAME BOARD PORT) @@ -109,12 +109,12 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
string(FIND "${STR1}" "\n" POS2)
math(EXPR POS3 "${POS1}+${POS2}")
string(SUBSTRING "${FILE}" 0 ${POS3} FILE_HEAD)
message(STATUS "FILE_HEAD:\n${FILE_HEAD}")
#message(STATUS "FILE_HEAD:\n${FILE_HEAD}")
# find the body of the main pde
math(EXPR BODY_LENGTH "${FILE_LENGTH}-${POS3}-1")
string(SUBSTRING "${FILE}" "${POS3}+1" "${BODY_LENGTH}" FILE_BODY)
message(STATUS "BODY:\n${FILE_BODY}")
#message(STATUS "BODY:\n${FILE_BODY}")
# write the file head
file(APPEND ${SKETCH_CPP} "${FILE_HEAD}")
@ -122,11 +122,11 @@ macro(add_sketch SKETCH_NAME BOARD PORT) @@ -122,11 +122,11 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
# write prototypes
foreach(PDE ${PDE_SOURCES})
message(STATUS "pde: ${PDE}")
#message(STATUS "pde: ${PDE}")
file(READ ${PDE} FILE)
string(REGEX MATCHALL "[\n]([a-zA-Z]+[ ])*[_a-zA-Z0-9]+([ ]*[\n][\t]*|[ ])[_a-zA-Z0-9]+[ ]?[\n]?[\t]*[ ]*[(]([\t]*[ ]*[*]?[ ]?[a-zA-Z0-9_][,]?[ ]*[\n]?)*[)]" PROTOTYPES ${FILE})
foreach(PROTOTYPE ${PROTOTYPES})
message(STATUS "\tprototype: ${PROTOTYPE};")
#message(STATUS "\tprototype: ${PROTOTYPE};")
file(APPEND ${SKETCH_CPP} "${PROTOTYPE};")
endforeach()
endforeach()

10
README.txt

@ -14,9 +14,17 @@ Building using cmake @@ -14,9 +14,17 @@ Building using cmake
-----------------------------------------------
- mkdir build
- cd build
- cmake ..
- cmake .. -DBOARD=mega -PORT=/dev/ttyUSB0
You can select from mega/mega2560.
If you have arduino installed in a non-standard location you by specify it by using:
-DARDUINO_SDK_PATH=/path/to/arduino ..
- make (will build every sketch)
- make ArduPlane (will build just ArduPlane etc.)
- make ArduPloat-upload (will upload the sketch)
If you have a sync error during upload reset the board/power cycle the board
before the upload starts.
Building using eclipse
-----------------------------------------------

54
cmake/modules/FindArduino.cmake

@ -280,7 +280,10 @@ function(setup_arduino_core VAR_NAME BOARD_ID) @@ -280,7 +280,10 @@ function(setup_arduino_core VAR_NAME BOARD_ID)
if(BOARD_CORE AND NOT TARGET ${CORE_LIB_NAME})
set(BOARD_CORE_PATH ${ARDUINO_CORES_PATH}/${BOARD_CORE})
find_sources(CORE_SRCS ${BOARD_CORE_PATH} True)
# Debian/Ubuntu fix
list(REMOVE_ITEM CORE_SRCS "${BOARD_CORE_PATH}/main.cxx")
add_library(${CORE_LIB_NAME} ${CORE_SRCS})
set(${VAR_NAME} ${CORE_LIB_NAME} PARENT_SCOPE)
endif()
@ -340,22 +343,26 @@ endfunction() @@ -340,22 +343,26 @@ endfunction()
#
# Creates an Arduino library, with all it's library dependencies.
#
# "LIB_NAME"_RECURSE controls if the library will recurse
# when looking for source files
# ${LIB_NAME}_RECURSE controls if the library will recurse
# when looking for source files.
#
# For known libraries can list recurse here
set(Wire_RECURSE True)
set(Ethernet_RECURSE True)
function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH)
set(LIB_TARGETS)
get_filename_component(LIB_NAME ${LIB_PATH} NAME)
set(TARGET_LIB_NAME ${BOARD_ID}_${LIB_NAME})
if(NOT TARGET ${TARGET_LIB_NAME})
string(REGEX REPLACE ".*/" "" LIB_SHORT_NAME ${LIB_NAME})
#message(STATUS "short name: ${LIB_SHORT_NAME} recures: ${${LIB_SHORT_NAME}_RECURSE}")
# Detect if recursion is needed
if (NOT DEFINED ${LIB_SHORT_NAME}_RECURSE)
set(${LIB_SHORT_NAME}_RECURSE False)
endif()
find_sources(LIB_SRCS ${LIB_PATH} ${${LIB_SHORT_NAME}_RECURSE})
if(LIB_SRCS)
@ -393,7 +400,7 @@ endfunction() @@ -393,7 +400,7 @@ endfunction()
#
function(setup_arduino_libraries VAR_NAME BOARD_ID SRCS)
set(LIB_TARGETS)
find_arduino_libraries(TARGET_LIBS ${SRCS})
find_arduino_libraries(TARGET_LIBS "${SRCS}")
foreach(TARGET_LIB ${TARGET_LIBS})
setup_arduino_library(LIB_DEPS ${BOARD_ID} ${TARGET_LIB}) # Create static library instead of returning sources
list(APPEND LIB_TARGETS ${LIB_DEPS})
@ -443,15 +450,18 @@ function(setup_arduino_upload BOARD_ID TARGET_NAME PORT) @@ -443,15 +450,18 @@ function(setup_arduino_upload BOARD_ID TARGET_NAME PORT)
if(DEFINED ${TARGET_NAME}_AFLAGS)
set(AVRDUDE_FLAGS ${${TARGET_NAME}_AFLAGS})
endif()
if (${${BOARD_ID}.upload.protocol} STREQUAL "stk500")
set(${BOARD_ID}.upload.protocol "stk500v1")
endif()
add_custom_target(${TARGET_NAME}-upload
${ARDUINO_AVRDUDE_PROGRAM}
-U flash:w:${TARGET_NAME}.hex
${AVRDUDE_FLAGS}
-C${ARDUINO_AVRDUDE_CONFIG_PATH}
-p${${BOARD_ID}.build.mcu}
-c${${BOARD_ID}.upload.protocol}
-b ${${BOARD_ID}.upload.speed}
-P ${PORT}
-P${PORT} -b${${BOARD_ID}.upload.speed}
-D
-Uflash:w:${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex:i
DEPENDS ${TARGET_NAME})
if(NOT TARGET upload)
add_custom_target(upload)
@ -476,12 +486,13 @@ function(find_sources VAR_NAME LIB_PATH RECURSE) @@ -476,12 +486,13 @@ function(find_sources VAR_NAME LIB_PATH RECURSE)
${LIB_PATH}/*.h
${LIB_PATH}/*.hh
${LIB_PATH}/*.hxx)
if(RECURSE)
file(GLOB_RECURSE LIB_FILES ${FILE_SEARCH_LIST})
else()
file(GLOB LIB_FILES ${FILE_SEARCH_LIST})
endif()
#message(STATUS "${LIB_PATH} recurse: ${RECURSE}")
if(LIB_FILES)
set(${VAR_NAME} ${LIB_FILES} PARENT_SCOPE)
endif()
@ -522,44 +533,51 @@ endfunction() @@ -522,44 +533,51 @@ endfunction()
# Setting up Arduino enviroment settings
if(NOT ARDUINO_FOUND)
find_file(ARDUINO_CORES_PATH
NAMES cores
PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/arduino)
PATH_SUFFIXES hardware/arduino
NO_DEFAULT_PATH)
find_file(ARDUINO_LIBRARIES_PATH
NAMES libraries
PATHS ${ARDUINO_SDK_PATH})
PATHS ${ARDUINO_SDK_PATH}
NO_DEFAULT_PATH)
find_file(ARDUINO_BOARDS_PATH
NAMES boards.txt
PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/arduino)
PATH_SUFFIXES hardware/arduino
NO_DEFAULT_PATH)
find_file(ARDUINO_PROGRAMMERS_PATH
NAMES programmers.txt
PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/arduino)
PATH_SUFFIXES hardware/arduino
NO_DEFAULT_PATH)
find_file(ARDUINO_REVISIONS_PATH
NAMES revisions.txt
PATHS ${ARDUINO_SDK_PATH})
PATHS ${ARDUINO_SDK_PATH}
NO_DEFAULT_PATH)
find_file(ARDUINO_VERSION_PATH
NAMES lib/version.txt
PATHS ${ARDUINO_SDK_PATH})
PATHS ${ARDUINO_SDK_PATH}
NO_DEFAULT_PATH)
find_program(ARDUINO_AVRDUDE_PROGRAM
NAMES avrdude
PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/tools)
PATH_SUFFIXES hardware/tools
NO_DEFAULT_PATH)
find_program(ARDUINO_AVRDUDE_CONFIG_PATH
find_file(ARDUINO_AVRDUDE_CONFIG_PATH
NAMES avrdude.conf
PATHS ${ARDUINO_SDK_PATH} /etc/avrdude
PATH_SUFFIXES hardware/tools
hardware/tools/avr/etc)
hardware/tools/avr/etc
NO_DEFAULT_PATH)
set(ARDUINO_OBJCOPY_EEP_FLAGS -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
CACHE STRING "")

2
cmake/updated-arduino-cmake.sh

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
#!/bin/bash
git clone git@github.com:jgoppert/arduino-cmake.git tmp
git clone git://github.com/jgoppert/arduino-cmake.git tmp
cp -rf tmp/cmake/modules/* modules
cp -rf tmp/cmake/toolchains/* toolchains
rm -rf tmp

Loading…
Cancel
Save