diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c54fc7836..171b8b0e9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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) 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) # 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() diff --git a/README.txt b/README.txt index 50d0d38478..0e1ad4a89b 100644 --- a/README.txt +++ b/README.txt @@ -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 ----------------------------------------------- diff --git a/cmake/modules/FindArduino.cmake b/cmake/modules/FindArduino.cmake index e53873e9ad..dc20e07cd6 100644 --- a/cmake/modules/FindArduino.cmake +++ b/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}) set(BOARD_CORE_PATH ${ARDUINO_CORES_PATH}/${BOARD_CORE}) 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}) set(${VAR_NAME} ${CORE_LIB_NAME} PARENT_SCOPE) endif() @@ -317,7 +320,7 @@ function(find_arduino_libraries VAR_NAME SRCS) get_property(LIBRARY_SEARCH_PATH DIRECTORY # Property Scope 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}) list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}) break() @@ -340,23 +343,27 @@ 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}") - if (NOT DEFINED ${LIB_SHORT_NAME}_RECURSE) - set(${LIB_SHORT_NAME}_RECURSE False) - endif() - find_sources(LIB_SRCS ${LIB_PATH} ${${LIB_SHORT_NAME}_RECURSE}) + string(REGEX REPLACE ".*/" "" LIB_SHORT_NAME ${LIB_NAME}) + + # 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) message(STATUS "Generating Arduino ${LIB_NAME} library") @@ -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,16 +450,19 @@ 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} - DEPENDS ${TARGET_NAME}) + ${ARDUINO_AVRDUDE_PROGRAM} + ${AVRDUDE_FLAGS} + -C${ARDUINO_AVRDUDE_CONFIG_PATH} + -p${${BOARD_ID}.build.mcu} + -c${${BOARD_ID}.upload.protocol} + -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) endif() @@ -468,20 +478,21 @@ endfunction() # Finds all C/C++ sources located at the specified path. # function(find_sources VAR_NAME LIB_PATH RECURSE) - set(FILE_SEARCH_LIST - ${LIB_PATH}/*.cpp - ${LIB_PATH}/*.c - ${LIB_PATH}/*.cc - ${LIB_PATH}/*.cxx - ${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}") + set(FILE_SEARCH_LIST + ${LIB_PATH}/*.cpp + ${LIB_PATH}/*.c + ${LIB_PATH}/*.cc + ${LIB_PATH}/*.cxx + ${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() + if(LIB_FILES) set(${VAR_NAME} ${LIB_FILES} PARENT_SCOPE) endif() @@ -522,75 +533,82 @@ 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) - - find_file(ARDUINO_LIBRARIES_PATH - NAMES libraries - PATHS ${ARDUINO_SDK_PATH}) - - find_file(ARDUINO_BOARDS_PATH - NAMES boards.txt - PATHS ${ARDUINO_SDK_PATH} - PATH_SUFFIXES hardware/arduino) - - find_file(ARDUINO_PROGRAMMERS_PATH - NAMES programmers.txt - PATHS ${ARDUINO_SDK_PATH} - PATH_SUFFIXES hardware/arduino) - - find_file(ARDUINO_REVISIONS_PATH - NAMES revisions.txt - PATHS ${ARDUINO_SDK_PATH}) - - find_file(ARDUINO_VERSION_PATH - NAMES lib/version.txt - PATHS ${ARDUINO_SDK_PATH}) - - find_program(ARDUINO_AVRDUDE_PROGRAM - NAMES avrdude - PATHS ${ARDUINO_SDK_PATH} - PATH_SUFFIXES hardware/tools) - - find_program(ARDUINO_AVRDUDE_CONFIG_PATH - NAMES avrdude.conf - PATHS ${ARDUINO_SDK_PATH} /etc/avrdude - PATH_SUFFIXES hardware/tools - hardware/tools/avr/etc) - - 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 "") - set(ARDUINO_OBJCOPY_HEX_FLAGS -O ihex -R .eeprom - CACHE STRING "") - set(ARDUINO_AVRDUDE_FLAGS -V -F - CACHE STRING "Arvdude global flag list.") - - if(ARDUINO_SDK_PATH) - detect_arduino_version(ARDUINO_SDK_VERSION) - set(ARDUINO_SDK_VERSION ${ARDUINO_SDK_VERSION} CACHE STRING "Arduino SDK Version") - endif(ARDUINO_SDK_PATH) - - include(FindPackageHandleStandardArgs) - find_package_handle_standard_args(Arduino - REQUIRED_VARS ARDUINO_SDK_PATH - ARDUINO_SDK_VERSION - VERSION_VAR ARDUINO_SDK_VERSION) - - - mark_as_advanced(ARDUINO_CORES_PATH - ARDUINO_SDK_VERSION - ARDUINO_LIBRARIES_PATH - 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() +find_file(ARDUINO_CORES_PATH + NAMES cores + PATHS ${ARDUINO_SDK_PATH} + PATH_SUFFIXES hardware/arduino + NO_DEFAULT_PATH) + +find_file(ARDUINO_LIBRARIES_PATH + NAMES libraries + PATHS ${ARDUINO_SDK_PATH} + NO_DEFAULT_PATH) + +find_file(ARDUINO_BOARDS_PATH + NAMES boards.txt + PATHS ${ARDUINO_SDK_PATH} + PATH_SUFFIXES hardware/arduino + NO_DEFAULT_PATH) + +find_file(ARDUINO_PROGRAMMERS_PATH + NAMES programmers.txt + PATHS ${ARDUINO_SDK_PATH} + PATH_SUFFIXES hardware/arduino + NO_DEFAULT_PATH) + +find_file(ARDUINO_REVISIONS_PATH + NAMES revisions.txt + PATHS ${ARDUINO_SDK_PATH} + NO_DEFAULT_PATH) + +find_file(ARDUINO_VERSION_PATH + NAMES lib/version.txt + PATHS ${ARDUINO_SDK_PATH} + NO_DEFAULT_PATH) + +find_program(ARDUINO_AVRDUDE_PROGRAM + NAMES avrdude + PATHS ${ARDUINO_SDK_PATH} + PATH_SUFFIXES hardware/tools + NO_DEFAULT_PATH) + +find_file(ARDUINO_AVRDUDE_CONFIG_PATH + NAMES avrdude.conf + PATHS ${ARDUINO_SDK_PATH} /etc/avrdude + 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 + CACHE STRING "") +set(ARDUINO_OBJCOPY_HEX_FLAGS -O ihex -R .eeprom + CACHE STRING "") +set(ARDUINO_AVRDUDE_FLAGS -V -F + CACHE STRING "Arvdude global flag list.") + +if(ARDUINO_SDK_PATH) + detect_arduino_version(ARDUINO_SDK_VERSION) + set(ARDUINO_SDK_VERSION ${ARDUINO_SDK_VERSION} CACHE STRING "Arduino SDK Version") +endif(ARDUINO_SDK_PATH) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Arduino + REQUIRED_VARS ARDUINO_SDK_PATH + ARDUINO_SDK_VERSION + VERSION_VAR ARDUINO_SDK_VERSION) + + +mark_as_advanced(ARDUINO_CORES_PATH + ARDUINO_SDK_VERSION + ARDUINO_LIBRARIES_PATH + 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() diff --git a/cmake/toolchains/Arduino.cmake b/cmake/toolchains/Arduino.cmake index 68c58a72e9..897ea4fa0c 100644 --- a/cmake/toolchains/Arduino.cmake +++ b/cmake/toolchains/Arduino.cmake @@ -7,7 +7,7 @@ set(CMAKE_CXX_COMPILER avr-g++) # 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() set(CMAKE_C_FLAGS "-g -Os ${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 # #=============================================================================# 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() set(CMAKE_CXX_FLAGS "-g -Os ${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 # #=============================================================================# if (NOT DEFINED ARDUINO_LINKER_FLAGS) - set(ARDUINO_LINKER_FLAGS "-Wl,--gc-sections") + set(ARDUINO_LINKER_FLAGS "-Wl,--gc-sections") endif() set(CMAKE_EXE_LINKER_FLAGS "${ARDUINO_LINKER_FLAGS}" CACHE STRING "") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${ARDUINO_LINKER_FLAGS}" CACHE STRING "") diff --git a/cmake/updated-arduino-cmake.sh b/cmake/updated-arduino-cmake.sh index 3c86d4b728..c8c26b6781 100755 --- a/cmake/updated-arduino-cmake.sh +++ b/cmake/updated-arduino-cmake.sh @@ -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