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. 224
      cmake/modules/FindArduino.cmake
  4. 6
      cmake/toolchains/Arduino.cmake
  5. 2
      cmake/updated-arduino-cmake.sh

12
CMakeLists.txt

@ -86,8 +86,8 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
# files # files
set(SKETCH_CPP ${CMAKE_CURRENT_BINARY_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.cpp) set(SKETCH_CPP ${CMAKE_CURRENT_BINARY_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.cpp)
set(SKETCH_PDE ${CMAKE_CURRENT_SOURCE_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.pde) set(SKETCH_PDE ${CMAKE_CURRENT_SOURCE_DIR}/${SKETCH_NAME}/${SKETCH_NAME}.pde)
message(STATUS "SKETCH_PDE:\n${SKETCH_PDE}") #message(STATUS "SKETCH_PDE:\n${SKETCH_PDE}")
message(STATUS "SKETCH_CPP:\n${SKETCH_CPP}") #message(STATUS "SKETCH_CPP:\n${SKETCH_CPP}")
# settings # settings
set(${SKETCH_NAME}_BOARD ${BOARD}) set(${SKETCH_NAME}_BOARD ${BOARD})
@ -109,12 +109,12 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
string(FIND "${STR1}" "\n" POS2) string(FIND "${STR1}" "\n" POS2)
math(EXPR POS3 "${POS1}+${POS2}") math(EXPR POS3 "${POS1}+${POS2}")
string(SUBSTRING "${FILE}" 0 ${POS3} FILE_HEAD) 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 # find the body of the main pde
math(EXPR BODY_LENGTH "${FILE_LENGTH}-${POS3}-1") math(EXPR BODY_LENGTH "${FILE_LENGTH}-${POS3}-1")
string(SUBSTRING "${FILE}" "${POS3}+1" "${BODY_LENGTH}" FILE_BODY) 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 # write the file head
file(APPEND ${SKETCH_CPP} "${FILE_HEAD}") file(APPEND ${SKETCH_CPP} "${FILE_HEAD}")
@ -122,11 +122,11 @@ macro(add_sketch SKETCH_NAME BOARD PORT)
# write prototypes # write prototypes
foreach(PDE ${PDE_SOURCES}) foreach(PDE ${PDE_SOURCES})
message(STATUS "pde: ${PDE}") #message(STATUS "pde: ${PDE}")
file(READ ${PDE} FILE) 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}) 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}) foreach(PROTOTYPE ${PROTOTYPES})
message(STATUS "\tprototype: ${PROTOTYPE};") #message(STATUS "\tprototype: ${PROTOTYPE};")
file(APPEND ${SKETCH_CPP} "${PROTOTYPE};") file(APPEND ${SKETCH_CPP} "${PROTOTYPE};")
endforeach() endforeach()
endforeach() endforeach()

10
README.txt

@ -14,9 +14,17 @@ Building using cmake
----------------------------------------------- -----------------------------------------------
- mkdir build - mkdir build
- cd 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 (will build every sketch)
- make ArduPlane (will build just ArduPlane etc.) - 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 Building using eclipse
----------------------------------------------- -----------------------------------------------

224
cmake/modules/FindArduino.cmake

@ -280,7 +280,10 @@ function(setup_arduino_core VAR_NAME BOARD_ID)
if(BOARD_CORE AND NOT TARGET ${CORE_LIB_NAME}) if(BOARD_CORE AND NOT TARGET ${CORE_LIB_NAME})
set(BOARD_CORE_PATH ${ARDUINO_CORES_PATH}/${BOARD_CORE}) set(BOARD_CORE_PATH ${ARDUINO_CORES_PATH}/${BOARD_CORE})
find_sources(CORE_SRCS ${BOARD_CORE_PATH} True) find_sources(CORE_SRCS ${BOARD_CORE_PATH} True)
list(REMOVE_ITEM CORE_SRCS "${BOARD_CORE_PATH}/main.cxx")
# Debian/Ubuntu fix
list(REMOVE_ITEM CORE_SRCS "${BOARD_CORE_PATH}/main.cxx")
add_library(${CORE_LIB_NAME} ${CORE_SRCS}) add_library(${CORE_LIB_NAME} ${CORE_SRCS})
set(${VAR_NAME} ${CORE_LIB_NAME} PARENT_SCOPE) set(${VAR_NAME} ${CORE_LIB_NAME} PARENT_SCOPE)
endif() endif()
@ -317,7 +320,7 @@ function(find_arduino_libraries VAR_NAME SRCS)
get_property(LIBRARY_SEARCH_PATH get_property(LIBRARY_SEARCH_PATH
DIRECTORY # Property Scope DIRECTORY # Property Scope
PROPERTY LINK_DIRECTORIES) PROPERTY LINK_DIRECTORIES)
foreach(LIB_SEARCH_PATH ${LIBRARY_SEARCH_PATH} ${ARDUINO_LIBRARIES_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libraries) foreach(LIB_SEARCH_PATH ${LIBRARY_SEARCH_PATH} ${ARDUINO_LIBRARIES_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libraries)
if(EXISTS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}/${CMAKE_MATCH_1}) if(EXISTS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}/${CMAKE_MATCH_1})
list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}) list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}/${INCLUDE_NAME})
break() break()
@ -340,23 +343,27 @@ endfunction()
# #
# Creates an Arduino library, with all it's library dependencies. # Creates an Arduino library, with all it's library dependencies.
# #
# "LIB_NAME"_RECURSE controls if the library will recurse # ${LIB_NAME}_RECURSE controls if the library will recurse
# when looking for source files # when looking for source files.
# #
# For known libraries can list recurse here # For known libraries can list recurse here
set(Wire_RECURSE True) set(Wire_RECURSE True)
set(Ethernet_RECURSE True)
function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH) function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH)
set(LIB_TARGETS) set(LIB_TARGETS)
get_filename_component(LIB_NAME ${LIB_PATH} NAME) get_filename_component(LIB_NAME ${LIB_PATH} NAME)
set(TARGET_LIB_NAME ${BOARD_ID}_${LIB_NAME}) set(TARGET_LIB_NAME ${BOARD_ID}_${LIB_NAME})
if(NOT TARGET ${TARGET_LIB_NAME}) if(NOT TARGET ${TARGET_LIB_NAME})
string(REGEX REPLACE ".*/" "" LIB_SHORT_NAME ${LIB_NAME}) string(REGEX REPLACE ".*/" "" LIB_SHORT_NAME ${LIB_NAME})
#message(STATUS "short name: ${LIB_SHORT_NAME} recures: ${${LIB_SHORT_NAME}_RECURSE}")
if (NOT DEFINED ${LIB_SHORT_NAME}_RECURSE) # Detect if recursion is needed
set(${LIB_SHORT_NAME}_RECURSE False) if (NOT DEFINED ${LIB_SHORT_NAME}_RECURSE)
endif() set(${LIB_SHORT_NAME}_RECURSE False)
find_sources(LIB_SRCS ${LIB_PATH} ${${LIB_SHORT_NAME}_RECURSE}) endif()
find_sources(LIB_SRCS ${LIB_PATH} ${${LIB_SHORT_NAME}_RECURSE})
if(LIB_SRCS) if(LIB_SRCS)
message(STATUS "Generating Arduino ${LIB_NAME} library") message(STATUS "Generating Arduino ${LIB_NAME} library")
@ -393,7 +400,7 @@ endfunction()
# #
function(setup_arduino_libraries VAR_NAME BOARD_ID SRCS) function(setup_arduino_libraries VAR_NAME BOARD_ID SRCS)
set(LIB_TARGETS) set(LIB_TARGETS)
find_arduino_libraries(TARGET_LIBS ${SRCS}) find_arduino_libraries(TARGET_LIBS "${SRCS}")
foreach(TARGET_LIB ${TARGET_LIBS}) foreach(TARGET_LIB ${TARGET_LIBS})
setup_arduino_library(LIB_DEPS ${BOARD_ID} ${TARGET_LIB}) # Create static library instead of returning sources setup_arduino_library(LIB_DEPS ${BOARD_ID} ${TARGET_LIB}) # Create static library instead of returning sources
list(APPEND LIB_TARGETS ${LIB_DEPS}) list(APPEND LIB_TARGETS ${LIB_DEPS})
@ -443,16 +450,19 @@ function(setup_arduino_upload BOARD_ID TARGET_NAME PORT)
if(DEFINED ${TARGET_NAME}_AFLAGS) if(DEFINED ${TARGET_NAME}_AFLAGS)
set(AVRDUDE_FLAGS ${${TARGET_NAME}_AFLAGS}) set(AVRDUDE_FLAGS ${${TARGET_NAME}_AFLAGS})
endif() endif()
if (${${BOARD_ID}.upload.protocol} STREQUAL "stk500")
set(${BOARD_ID}.upload.protocol "stk500v1")
endif()
add_custom_target(${TARGET_NAME}-upload add_custom_target(${TARGET_NAME}-upload
${ARDUINO_AVRDUDE_PROGRAM} ${ARDUINO_AVRDUDE_PROGRAM}
-U flash:w:${TARGET_NAME}.hex ${AVRDUDE_FLAGS}
${AVRDUDE_FLAGS} -C${ARDUINO_AVRDUDE_CONFIG_PATH}
-C ${ARDUINO_AVRDUDE_CONFIG_PATH} -p${${BOARD_ID}.build.mcu}
-p ${${BOARD_ID}.build.mcu} -c${${BOARD_ID}.upload.protocol}
-c ${${BOARD_ID}.upload.protocol} -P${PORT} -b${${BOARD_ID}.upload.speed}
-b ${${BOARD_ID}.upload.speed} -D
-P ${PORT} -Uflash:w:${CMAKE_BINARY_DIR}/${TARGET_NAME}.hex:i
DEPENDS ${TARGET_NAME}) DEPENDS ${TARGET_NAME})
if(NOT TARGET upload) if(NOT TARGET upload)
add_custom_target(upload) add_custom_target(upload)
endif() endif()
@ -468,20 +478,21 @@ endfunction()
# Finds all C/C++ sources located at the specified path. # Finds all C/C++ sources located at the specified path.
# #
function(find_sources VAR_NAME LIB_PATH RECURSE) function(find_sources VAR_NAME LIB_PATH RECURSE)
set(FILE_SEARCH_LIST set(FILE_SEARCH_LIST
${LIB_PATH}/*.cpp ${LIB_PATH}/*.cpp
${LIB_PATH}/*.c ${LIB_PATH}/*.c
${LIB_PATH}/*.cc ${LIB_PATH}/*.cc
${LIB_PATH}/*.cxx ${LIB_PATH}/*.cxx
${LIB_PATH}/*.h ${LIB_PATH}/*.h
${LIB_PATH}/*.hh ${LIB_PATH}/*.hh
${LIB_PATH}/*.hxx) ${LIB_PATH}/*.hxx)
if (RECURSE)
file(GLOB_RECURSE LIB_FILES ${FILE_SEARCH_LIST}) if(RECURSE)
else() file(GLOB_RECURSE LIB_FILES ${FILE_SEARCH_LIST})
file(GLOB LIB_FILES ${FILE_SEARCH_LIST}) else()
endif() file(GLOB LIB_FILES ${FILE_SEARCH_LIST})
#message(STATUS "${LIB_PATH} recurse: ${RECURSE}") endif()
if(LIB_FILES) if(LIB_FILES)
set(${VAR_NAME} ${LIB_FILES} PARENT_SCOPE) set(${VAR_NAME} ${LIB_FILES} PARENT_SCOPE)
endif() endif()
@ -522,75 +533,82 @@ endfunction()
# Setting up Arduino enviroment settings # Setting up Arduino enviroment settings
if(NOT ARDUINO_FOUND) find_file(ARDUINO_CORES_PATH
find_file(ARDUINO_CORES_PATH NAMES cores
NAMES cores PATHS ${ARDUINO_SDK_PATH}
PATHS ${ARDUINO_SDK_PATH} PATH_SUFFIXES hardware/arduino
PATH_SUFFIXES hardware/arduino) NO_DEFAULT_PATH)
find_file(ARDUINO_LIBRARIES_PATH find_file(ARDUINO_LIBRARIES_PATH
NAMES libraries NAMES libraries
PATHS ${ARDUINO_SDK_PATH}) PATHS ${ARDUINO_SDK_PATH}
NO_DEFAULT_PATH)
find_file(ARDUINO_BOARDS_PATH
NAMES boards.txt find_file(ARDUINO_BOARDS_PATH
PATHS ${ARDUINO_SDK_PATH} NAMES boards.txt
PATH_SUFFIXES hardware/arduino) PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/arduino
find_file(ARDUINO_PROGRAMMERS_PATH NO_DEFAULT_PATH)
NAMES programmers.txt
PATHS ${ARDUINO_SDK_PATH} find_file(ARDUINO_PROGRAMMERS_PATH
PATH_SUFFIXES hardware/arduino) NAMES programmers.txt
PATHS ${ARDUINO_SDK_PATH}
find_file(ARDUINO_REVISIONS_PATH PATH_SUFFIXES hardware/arduino
NAMES revisions.txt NO_DEFAULT_PATH)
PATHS ${ARDUINO_SDK_PATH})
find_file(ARDUINO_REVISIONS_PATH
find_file(ARDUINO_VERSION_PATH NAMES revisions.txt
NAMES lib/version.txt PATHS ${ARDUINO_SDK_PATH}
PATHS ${ARDUINO_SDK_PATH}) NO_DEFAULT_PATH)
find_program(ARDUINO_AVRDUDE_PROGRAM find_file(ARDUINO_VERSION_PATH
NAMES avrdude NAMES lib/version.txt
PATHS ${ARDUINO_SDK_PATH} PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/tools) NO_DEFAULT_PATH)
find_program(ARDUINO_AVRDUDE_CONFIG_PATH find_program(ARDUINO_AVRDUDE_PROGRAM
NAMES avrdude.conf NAMES avrdude
PATHS ${ARDUINO_SDK_PATH} /etc/avrdude PATHS ${ARDUINO_SDK_PATH}
PATH_SUFFIXES hardware/tools PATH_SUFFIXES hardware/tools
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 find_file(ARDUINO_AVRDUDE_CONFIG_PATH
CACHE STRING "") NAMES avrdude.conf
set(ARDUINO_OBJCOPY_HEX_FLAGS -O ihex -R .eeprom PATHS ${ARDUINO_SDK_PATH} /etc/avrdude
CACHE STRING "") PATH_SUFFIXES hardware/tools
set(ARDUINO_AVRDUDE_FLAGS -V -F hardware/tools/avr/etc
CACHE STRING "Arvdude global flag list.") NO_DEFAULT_PATH)
if(ARDUINO_SDK_PATH) set(ARDUINO_OBJCOPY_EEP_FLAGS -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
detect_arduino_version(ARDUINO_SDK_VERSION) CACHE STRING "")
set(ARDUINO_SDK_VERSION ${ARDUINO_SDK_VERSION} CACHE STRING "Arduino SDK Version") set(ARDUINO_OBJCOPY_HEX_FLAGS -O ihex -R .eeprom
endif(ARDUINO_SDK_PATH) CACHE STRING "")
set(ARDUINO_AVRDUDE_FLAGS -V -F
include(FindPackageHandleStandardArgs) CACHE STRING "Arvdude global flag list.")
find_package_handle_standard_args(Arduino
REQUIRED_VARS ARDUINO_SDK_PATH if(ARDUINO_SDK_PATH)
ARDUINO_SDK_VERSION detect_arduino_version(ARDUINO_SDK_VERSION)
VERSION_VAR ARDUINO_SDK_VERSION) set(ARDUINO_SDK_VERSION ${ARDUINO_SDK_VERSION} CACHE STRING "Arduino SDK Version")
endif(ARDUINO_SDK_PATH)
mark_as_advanced(ARDUINO_CORES_PATH include(FindPackageHandleStandardArgs)
ARDUINO_SDK_VERSION find_package_handle_standard_args(Arduino
ARDUINO_LIBRARIES_PATH REQUIRED_VARS ARDUINO_SDK_PATH
ARDUINO_BOARDS_PATH ARDUINO_SDK_VERSION
ARDUINO_PROGRAMMERS_PATH VERSION_VAR ARDUINO_SDK_VERSION)
ARDUINO_REVISIONS_PATH
ARDUINO_AVRDUDE_PROGRAM
ARDUINO_AVRDUDE_CONFIG_PATH mark_as_advanced(ARDUINO_CORES_PATH
ARDUINO_OBJCOPY_EEP_FLAGS ARDUINO_SDK_VERSION
ARDUINO_OBJCOPY_HEX_FLAGS) ARDUINO_LIBRARIES_PATH
load_board_settings() ARDUINO_BOARDS_PATH
ARDUINO_PROGRAMMERS_PATH
ARDUINO_REVISIONS_PATH
ARDUINO_AVRDUDE_PROGRAM
ARDUINO_AVRDUDE_CONFIG_PATH
ARDUINO_OBJCOPY_EEP_FLAGS
ARDUINO_OBJCOPY_HEX_FLAGS)
load_board_settings()
endif() endif()

6
cmake/toolchains/Arduino.cmake

@ -7,7 +7,7 @@ set(CMAKE_CXX_COMPILER avr-g++)
# C Flags # # C Flags #
#=============================================================================# #=============================================================================#
if (NOT DEFINED ARDUINO_C_FLAGS) if (NOT DEFINED ARDUINO_C_FLAGS)
set(ARDUINO_C_FLAGS "-ffunction-sections -fdata-sections") set(ARDUINO_C_FLAGS "-ffunction-sections -fdata-sections")
endif() endif()
set(CMAKE_C_FLAGS "-g -Os ${ARDUINO_C_FLAGS}" CACHE STRING "") set(CMAKE_C_FLAGS "-g -Os ${ARDUINO_C_FLAGS}" CACHE STRING "")
set(CMAKE_C_FLAGS_DEBUG "-g ${ARDUINO_C_FLAGS}" CACHE STRING "") set(CMAKE_C_FLAGS_DEBUG "-g ${ARDUINO_C_FLAGS}" CACHE STRING "")
@ -19,7 +19,7 @@ set(CMAKE_C_FLAGS_RELWITHDEBINFO "-0s -g -w ${ARDUINO_C_FLAGS}" CACHE STRI
# C++ Flags # # C++ Flags #
#=============================================================================# #=============================================================================#
if (NOT DEFINED ARDUINO_CXX_FLAGS) if (NOT DEFINED ARDUINO_CXX_FLAGS)
set(ARDUINO_CXX_FLAGS "${ARDUINO_C_FLAGS} -fno-exceptions") set(ARDUINO_CXX_FLAGS "${ARDUINO_C_FLAGS} -fno-exceptions")
endif() endif()
set(CMAKE_CXX_FLAGS "-g -Os ${ARDUINO_CXX_FLAGS}" CACHE STRING "") set(CMAKE_CXX_FLAGS "-g -Os ${ARDUINO_CXX_FLAGS}" CACHE STRING "")
set(CMAKE_CXX_FLAGS_DEBUG "-g ${ARDUINO_CXX_FLAGS}" CACHE STRING "") set(CMAKE_CXX_FLAGS_DEBUG "-g ${ARDUINO_CXX_FLAGS}" CACHE STRING "")
@ -31,7 +31,7 @@ set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-0s -g ${ARDUINO_CXX_FLAGS}" CACHE STR
# Executable Linker Flags # # Executable Linker Flags #
#=============================================================================# #=============================================================================#
if (NOT DEFINED ARDUINO_LINKER_FLAGS) if (NOT DEFINED ARDUINO_LINKER_FLAGS)
set(ARDUINO_LINKER_FLAGS "-Wl,--gc-sections") set(ARDUINO_LINKER_FLAGS "-Wl,--gc-sections")
endif() endif()
set(CMAKE_EXE_LINKER_FLAGS "${ARDUINO_LINKER_FLAGS}" CACHE STRING "") set(CMAKE_EXE_LINKER_FLAGS "${ARDUINO_LINKER_FLAGS}" CACHE STRING "")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${ARDUINO_LINKER_FLAGS}" CACHE STRING "") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${ARDUINO_LINKER_FLAGS}" CACHE STRING "")

2
cmake/updated-arduino-cmake.sh

@ -1,5 +1,5 @@
#!/bin/bash #!/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/modules/* modules
cp -rf tmp/cmake/toolchains/* toolchains cp -rf tmp/cmake/toolchains/* toolchains
rm -rf tmp rm -rf tmp

Loading…
Cancel
Save