From d530730331963aef1ecb5d3b0b1a6368cf60d640 Mon Sep 17 00:00:00 2001 From: iceseyes Date: Tue, 9 Dec 2014 18:25:25 +0100 Subject: [PATCH 1/2] Setting for SDK 1.5 mega configuration and setting includes for arduino libraries with src folder --- cmake/ArduinoToolchain.cmake | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmake/ArduinoToolchain.cmake b/cmake/ArduinoToolchain.cmake index f320898..164f004 100644 --- a/cmake/ArduinoToolchain.cmake +++ b/cmake/ArduinoToolchain.cmake @@ -81,3 +81,8 @@ else() message(FATAL_ERROR "Could not find Arduino SDK (set ARDUINO_SDK_PATH)!") endif() +set(ARDUINO_CPUMENU) +if(ARDUINO_CPU) + set(ARDUINO_CPUMENU ".menu.cpu.${ARDUINO_CPU}") +endif(ARDUINO_CPU) + From 60c6e09bbb01b687e72c92dd10c5cc4281855072 Mon Sep 17 00:00:00 2001 From: iceseyes Date: Tue, 9 Dec 2014 18:30:50 +0100 Subject: [PATCH 2/2] Adding description to Readme --- README.rst | 4 ++ cmake/Platform/Arduino.cmake | 112 +++++++++++++++++++++++++---------- 2 files changed, 84 insertions(+), 32 deletions(-) diff --git a/README.rst b/README.rst index 4675f03..18aeb8a 100644 --- a/README.rst +++ b/README.rst @@ -744,6 +744,10 @@ The following options control how **Arduino CMake** is configured: +---------------------------------+-----------------------------------------------------+ | **ARDUINO_DEFAULT_BOARD** | Default Arduino Board ID, when not specified. | +---------------------------------+-----------------------------------------------------+ +| **ARDUINO_CPU** | Selected CPU from Arduino 1.5 menu boards. For mega | +| | board, for example, you have to set atmega2560 | +| | before including ARDUINO ToolChain | ++---------------------------------+-----------------------------------------------------+ | **ARDUINO_DEFAULT_PORT** | Default Arduino port, when not specified. | +---------------------------------+-----------------------------------------------------+ | **ARDUINO_DEFAULT_SERIAL** | Default Arduino Serial command, when not specified. | diff --git a/cmake/Platform/Arduino.cmake b/cmake/Platform/Arduino.cmake index 042a3c1..7b20491 100644 --- a/cmake/Platform/Arduino.cmake +++ b/cmake/Platform/Arduino.cmake @@ -500,7 +500,7 @@ function(GENERATE_ARDUINO_FIRMWARE INPUT_NAME) find_arduino_libraries(TARGET_LIBS "${ALL_SRCS}" "${INPUT_ARDLIBS}") foreach(LIB_DEP ${TARGET_LIBS}) arduino_debug_msg("Arduino Library: ${LIB_DEP}") - set(LIB_DEP_INCLUDES "${LIB_DEP_INCLUDES} -I\"${LIB_DEP}\"") + set(LIB_DEP_INCLUDES "${LIB_DEP_INCLUDES} -I\"${LIB_DEP}\" -I\"${LIB_DEP}/src\"") endforeach() if(NOT INPUT_NO_AUTOLIBS) @@ -669,6 +669,11 @@ function(REGISTER_HARDWARE_PLATFORM PLATFORM_PATH) PATHS ${PLATFORM_PATH} DOC "Path to directory containing the Arduino bootloader images and sources.") + find_file(${PLATFORM}_LIBRARIES_PATH + NAMES libraries + PATHS ${PLATFORM_PATH} + DOC "Path to directory containing the Arduino hardware libraries sources.") + find_file(${PLATFORM}_PROGRAMMERS_PATH NAMES programmers.txt PATHS ${PLATFORM_PATH} @@ -708,6 +713,7 @@ function(REGISTER_HARDWARE_PLATFORM PLATFORM_PATH) endif() endforeach() endif() + endif() endif() @@ -802,7 +808,7 @@ function(get_arduino_flags COMPILE_FLAGS_VAR LINK_FLAGS_VAR BOARD_ID MANUAL) endif() # output - set(COMPILE_FLAGS "-DF_CPU=${${BOARD_ID}.build.f_cpu} -DARDUINO=${ARDUINO_VERSION_DEFINE} -mmcu=${${BOARD_ID}.build.mcu}") + set(COMPILE_FLAGS "-DF_CPU=${${BOARD_ID}.build.f_cpu} -DARDUINO=${ARDUINO_VERSION_DEFINE} -mmcu=${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu}") if(DEFINED ${BOARD_ID}.build.vid) set(COMPILE_FLAGS "${COMPILE_FLAGS} -DUSB_VID=${${BOARD_ID}.build.vid}") endif() @@ -812,7 +818,7 @@ function(get_arduino_flags COMPILE_FLAGS_VAR LINK_FLAGS_VAR BOARD_ID MANUAL) if(NOT MANUAL) set(COMPILE_FLAGS "${COMPILE_FLAGS} -I\"${${BOARD_CORE}.path}\" -I\"${ARDUINO_LIBRARIES_PATH}\"") endif() - set(LINK_FLAGS "-mmcu=${${BOARD_ID}.build.mcu}") + set(LINK_FLAGS "-mmcu=${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu}") if(ARDUINO_SDK_VERSION VERSION_GREATER 1.0 OR ARDUINO_SDK_VERSION VERSION_EQUAL 1.0) if(NOT MANUAL) set(PIN_HEADER ${${${BOARD_ID}.build.variant}.path}) @@ -920,11 +926,15 @@ function(find_arduino_libraries VAR_NAME SRCS ARDLIBS) 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 ${ARDUINO_EXTRA_LIBRARIES_PATH}) + foreach(LIB_SEARCH_PATH ${LIBRARY_SEARCH_PATH} ${ARDUINO_LIBRARIES_PATH} ${${ARDUINO_PLATFORM}_LIBRARIES_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libraries ${ARDUINO_EXTRA_LIBRARIES_PATH}) if(EXISTS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}/${CMAKE_MATCH_1}) list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}) break() endif() + if(EXISTS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}/src/${CMAKE_MATCH_1}) + list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}/${INCLUDE_NAME}) + break() + endif() if(EXISTS ${LIB_SEARCH_PATH}/${CMAKE_MATCH_1}) list(APPEND ARDUINO_LIBS ${LIB_SEARCH_PATH}) break() @@ -962,6 +972,10 @@ endfunction() set(Wire_RECURSE True) set(Ethernet_RECURSE True) set(SD_RECURSE True) +set(SPI_RECURSE True) +set(SoftwareSerial_RECURSE True) +set(EEPROM_RECURSE True) +set(LiquidCrystal_RECURSE True) function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH COMPILE_FLAGS LINK_FLAGS) set(LIB_TARGETS) set(LIB_INCLUDES) @@ -978,7 +992,7 @@ function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH COMPILE_FLAGS LINK_FLA find_sources(LIB_SRCS ${LIB_PATH} ${${LIB_SHORT_NAME}_RECURSE}) if(LIB_SRCS) - + message(STATUS "Generating ${TARGET_LIB_NAME} for library ${LIB_NAME}") arduino_debug_msg("Generating Arduino ${LIB_NAME} library") add_library(${TARGET_LIB_NAME} STATIC ${LIB_SRCS}) @@ -987,6 +1001,10 @@ function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH COMPILE_FLAGS LINK_FLA find_arduino_libraries(LIB_DEPS "${LIB_SRCS}" "") foreach(LIB_DEP ${LIB_DEPS}) + if(NOT DEP_LIB_SRCS STREQUAL TARGET_LIB_NAME AND DEP_LIB_SRCS) + message(STATUS "Found library ${LIB_NAME} needs ${DEP_LIB_SRCS}") + endif() + setup_arduino_library(DEP_LIB_SRCS ${BOARD_ID} ${LIB_DEP} "${COMPILE_FLAGS}" "${LINK_FLAGS}") list(APPEND LIB_TARGETS ${DEP_LIB_SRCS}) list(APPEND LIB_INCLUDES ${DEP_LIB_SRCS_INCLUDES}) @@ -997,9 +1015,9 @@ function(setup_arduino_library VAR_NAME BOARD_ID LIB_PATH COMPILE_FLAGS LINK_FLA endif() set_target_properties(${TARGET_LIB_NAME} PROPERTIES - COMPILE_FLAGS "${ARDUINO_COMPILE_FLAGS} ${LIB_INCLUDES} -I\"${LIB_PATH}\" -I\"${LIB_PATH}/utility\" ${COMPILE_FLAGS}" + COMPILE_FLAGS "${ARDUINO_COMPILE_FLAGS} ${LIB_INCLUDES} -I\"${LIB_PATH}\" -I\"${LIB_PATH}/src\" -I\"${LIB_PATH}/utility\" ${COMPILE_FLAGS}" LINK_FLAGS "${ARDUINO_LINK_FLAGS} ${LINK_FLAGS}") - list(APPEND LIB_INCLUDES "-I\"${LIB_PATH}\" -I\"${LIB_PATH}/utility\"") + list(APPEND LIB_INCLUDES "-I\"${LIB_PATH}\" -I\"${LIB_PATH}/src\" -I\"${LIB_PATH}/utility\"") target_link_libraries(${TARGET_LIB_NAME} ${BOARD_ID}_CORE ${LIB_TARGETS}) list(APPEND LIB_TARGETS ${TARGET_LIB_NAME}) @@ -1079,6 +1097,8 @@ function(setup_arduino_target TARGET_NAME BOARD_ID ALL_SRCS ALL_LIBS COMPILE_FLA set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) endif() set(TARGET_PATH ${EXECUTABLE_OUTPUT_PATH}/${TARGET_NAME}) + + message(STATUS "Using ${CMAKE_OBJCOPY} for converting firmware image to hex") add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_OBJCOPY} ARGS ${ARDUINO_OBJCOPY_EEP_FLAGS} @@ -1100,7 +1120,7 @@ function(setup_arduino_target TARGET_NAME BOARD_ID ALL_SRCS ALL_LIBS COMPILE_FLA add_custom_command(TARGET ${TARGET_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} ARGS -DFIRMWARE_IMAGE=${TARGET_PATH}.elf - -DMCU=${${BOARD_ID}.build.mcu} + -DMCU=${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu} -DEEPROM_IMAGE=${TARGET_PATH}.eep -P ${ARDUINO_SIZE_SCRIPT} COMMENT "Calculating image size" @@ -1110,7 +1130,7 @@ function(setup_arduino_target TARGET_NAME BOARD_ID ALL_SRCS ALL_LIBS COMPILE_FLA add_custom_target(${TARGET_NAME}-size COMMAND ${CMAKE_COMMAND} -DFIRMWARE_IMAGE=${TARGET_PATH}.elf - -DMCU=${${BOARD_ID}.build.mcu} + -DMCU=${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu} -DEEPROM_IMAGE=${TARGET_PATH}.eep -P ${ARDUINO_SIZE_SCRIPT} DEPENDS ${TARGET_NAME} @@ -1265,8 +1285,8 @@ function(setup_arduino_bootloader_burn TARGET_NAME BOARD_ID PROGRAMMER PORT AVRD endif() endforeach() - if(NOT EXISTS "${ARDUINO_BOOTLOADERS_PATH}/${${BOARD_ID}.bootloader.path}/${${BOARD_ID}.bootloader.file}") - message("${ARDUINO_BOOTLOADERS_PATH}/${${BOARD_ID}.bootloader.path}/${${BOARD_ID}.bootloader.file}") + if(NOT EXISTS "${ARDUINO_BOOTLOADERS_PATH}/${${BOARD_ID}.bootloader.path}/${${BOARD_ID}${ARDUINO_CPUMENU}.bootloader.file}") + message("${ARDUINO_BOOTLOADERS_PATH}/${${BOARD_ID}.bootloader.path}/${${BOARD_ID}${ARDUINO_CPUMENU}.bootloader.file}") message("Missing bootloader image, not creating bootloader burn target ${BOOTLOADER_TARGET}.") return() endif() @@ -1277,14 +1297,14 @@ function(setup_arduino_bootloader_burn TARGET_NAME BOARD_ID PROGRAMMER PORT AVRD # Set unlock bits and fuses (because chip is going to be erased) list(APPEND AVRDUDE_ARGS "-Ulock:w:${${BOARD_ID}.bootloader.unlock_bits}:m") if(${BOARD_ID}.bootloader.extended_fuses) - list(APPEND AVRDUDE_ARGS "-Uefuse:w:${${BOARD_ID}.bootloader.extended_fuses}:m") + list(APPEND AVRDUDE_ARGS "-Uefuse:w:${${BOARD_ID}${ARDUINO_CPUMENU}.bootloader.extended_fuses}:m") endif() list(APPEND AVRDUDE_ARGS - "-Uhfuse:w:${${BOARD_ID}.bootloader.high_fuses}:m" + "-Uhfuse:w:${${BOARD_ID}${ARDUINO_CPUMENU}.bootloader.high_fuses}:m" "-Ulfuse:w:${${BOARD_ID}.bootloader.low_fuses}:m") # Set bootloader image - list(APPEND AVRDUDE_ARGS "-Uflash:w:${${BOARD_ID}.bootloader.file}:i") + list(APPEND AVRDUDE_ARGS "-Uflash:w:${${BOARD_ID}${ARDUINO_CPUMENU}.bootloader.file}:i") # Set lockbits list(APPEND AVRDUDE_ARGS "-Ulock:w:${${BOARD_ID}.bootloader.lock_bits}:m") @@ -1344,7 +1364,7 @@ function(setup_arduino_programmer_args BOARD_ID PROGRAMMER TARGET_NAME PORT AVRD list(APPEND AVRDUDE_ARGS "-i${${PROGRAMMER}.delay}") # Set delay endif() - list(APPEND AVRDUDE_ARGS "-p${${BOARD_ID}.build.mcu}") # MCU Type + list(APPEND AVRDUDE_ARGS "-p${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu}") # MCU Type list(APPEND AVRDUDE_ARGS ${AVRDUDE_FLAGS}) @@ -1373,19 +1393,19 @@ function(setup_arduino_bootloader_args BOARD_ID TARGET_NAME PORT AVRDUDE_FLAGS O list(APPEND AVRDUDE_ARGS "-C${ARDUINO_AVRDUDE_CONFIG_PATH}" # avrdude config - "-p${${BOARD_ID}.build.mcu}" # MCU Type + "-p${${BOARD_ID}${ARDUINO_CPUMENU}.build.mcu}" # MCU Type ) # Programmer - if(NOT ${BOARD_ID}.upload.protocol OR ${BOARD_ID}.upload.protocol STREQUAL "stk500") + if(NOT ${BOARD_ID}${ARDUINO_CPUMENU}.upload.protocol OR ${BOARD_ID}${ARDUINO_CPUMENU}.upload.protocol STREQUAL "stk500") list(APPEND AVRDUDE_ARGS "-cstk500v1") else() - list(APPEND AVRDUDE_ARGS "-c${${BOARD_ID}.upload.protocol}") + list(APPEND AVRDUDE_ARGS "-c${${BOARD_ID}${ARDUINO_CPUMENU}.upload.protocol}") endif() set(UPLOAD_SPEED "19200") - if(${BOARD_ID}.upload.speed) - set(UPLOAD_SPEED ${${BOARD_ID}.upload.speed}) + if(${BOARD_ID}${ARDUINO_CPUMENU}.upload.speed) + set(UPLOAD_SPEED ${${BOARD_ID}${ARDUINO_CPUMENU}.upload.speed}) endif() list(APPEND AVRDUDE_ARGS @@ -1560,24 +1580,38 @@ function(LOAD_ARDUINO_STYLE_SETTINGS SETTINGS_LIST SETTINGS_PATH) # Add entry to main list list(APPEND ${SETTINGS_LIST} ${ENTRY_NAME}) endif() - + # Add entry setting to entry settings list if it does not exist set(ENTRY_SETTING_LIST ${ENTRY_NAME}.SETTINGS) list(GET ENTRY_NAME_TOKENS 1 ENTRY_SETTING) - list(FIND ${ENTRY_SETTING_LIST} ${ENTRY_SETTING} ENTRY_SETTING_INDEX) - if(ENTRY_SETTING_INDEX LESS 0) - # Add setting to entry - list(APPEND ${ENTRY_SETTING_LIST} ${ENTRY_SETTING}) - set(${ENTRY_SETTING_LIST} ${${ENTRY_SETTING_LIST}} - CACHE INTERNAL "Arduino ${ENTRY_NAME} Board settings list") - endif() + set(PARAMETERS 2) + if(ENTRY_SETTING STREQUAL "menu") + list(GET ENTRY_NAME_TOKENS 3 CPUNAME) + if(ENTRY_NAME_TOKENS_LEN GREATER 4) + list(GET ENTRY_NAME_TOKENS 4 PROPERTYNAME) + set(ENTRY_SETTING "menu.cpu.${CPUNAME}.${PROPERTYNAME}") + set(PARAMETERS 5) + else() + set(ENTRY_SETTING "menu.cpu.${CPUNAME}") + set(PARAMETERS 4) + endif() + list(APPEND ${ENTRY_SETTING_LIST} "${ENTRY_SETTING}") + else() + list(FIND ${ENTRY_SETTING_LIST} ${ENTRY_SETTING} ENTRY_SETTING_INDEX) + if(ENTRY_SETTING_INDEX LESS 0) + # Add setting to entry + list(APPEND ${ENTRY_SETTING_LIST} ${ENTRY_SETTING}) + set(${ENTRY_SETTING_LIST} ${${ENTRY_SETTING_LIST}} + CACHE INTERNAL "Arduino ${ENTRY_NAME} Board settings list") + endif() + endif() set(FULL_SETTING_NAME ${ENTRY_NAME}.${ENTRY_SETTING}) # Add entry sub-setting to entry sub-settings list if it does not exists - if(ENTRY_NAME_TOKENS_LEN GREATER 2) + if(ENTRY_NAME_TOKENS_LEN GREATER ${PARAMETERS}) set(ENTRY_SUBSETTING_LIST ${ENTRY_NAME}.${ENTRY_SETTING}.SUBSETTINGS) - list(GET ENTRY_NAME_TOKENS 2 ENTRY_SUBSETTING) + list(GET ENTRY_NAME_TOKENS ${PARAMETERS} ENTRY_SUBSETTING) list(FIND ${ENTRY_SUBSETTING_LIST} ${ENTRY_SUBSETTING} ENTRY_SUBSETTING_INDEX) if(ENTRY_SUBSETTING_INDEX LESS 0) list(APPEND ${ENTRY_SUBSETTING_LIST} ${ENTRY_SUBSETTING}) @@ -1675,7 +1709,8 @@ function(SETUP_ARDUINO_EXAMPLE TARGET_NAME LIBRARY_NAME EXAMPLE_NAME OUTPUT_VAR) 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} ${${ARDUINO_PLATFORM}_LIBRARIES_PATH} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/libraries) + message(STATUS "Search ${LIBRARY_NAME} example directory in ${LIB_SEARCH_PATH}") if(EXISTS "${LIB_SEARCH_PATH}/${LIBRARY_NAME}/examples/${EXAMPLE_NAME}") set(EXAMPLE_SKETCH_PATH "${LIB_SEARCH_PATH}/${LIBRARY_NAME}/examples/${EXAMPLE_NAME}") break() @@ -2171,7 +2206,7 @@ if(NOT ARDUINO_FOUND AND ARDUINO_SDK_PATH) find_program(AVROBJCOPY_PROGRAM avr-objcopy) set(ADDITIONAL_REQUIRED_VARS AVROBJCOPY_PROGRAM) - set(CMAKE_OBJCOPY ${AVROBJCOPY_PROGRAM}) + set(CMAKE_OBJCOPY ${AVROBJCOPY_PROGRAM} CACHE PATH "OBJCOPY Program for firmware convertion in hex") endif(NOT CMAKE_OBJCOPY) set(ARDUINO_DEFAULT_BOARD uno CACHE STRING "Default Arduino Board ID when not specified.") @@ -2230,3 +2265,16 @@ if(NOT ARDUINO_FOUND AND ARDUINO_SDK_PATH) AVRSIZE_PROGRAM) endif() +if(ARDUINO_SDK_VERSION VERSION_LESS 1.5) + set(ARDUINO_PLATFORM "AVR") +else() + if(NOT ARDUINO_PLATFORM) + register_hardware_platform(${ARDUINO_SDK_PATH}/hardware/arduino/avr) + set(ARDUINO_PLATFORM "AVR") + else() + string(TOLOWER ${ARDUINO_PLATFORM} _platform) + register_hardware_platform(${ARDUINO_SDK_PATH}/hardware/arduino/${_platform}) + endif() +endif() + +