diff options
| author | Karl Semich <fuzzyTew@gmail.com> | 2017-07-11 12:38:43 +0000 |
|---|---|---|
| committer | Karl Semich <fuzzyTew@gmail.com> | 2017-07-12 23:55:05 +0000 |
| commit | 5bcb64ade92b1ed8e6e0bc5760fe064cc26a49c3 (patch) | |
| tree | e50716f564a35bfac141c0f47efb1f9088897540 /OpenCM.mk | |
| parent | ba96840399381b35e20a9fe620602dc4a6fc6be7 (diff) | |
Add makefile for Robotis OpenCM & update version to 1.6.0
Diffstat (limited to 'OpenCM.mk')
| -rw-r--r-- | OpenCM.mk | 236 |
1 files changed, 236 insertions, 0 deletions
diff --git a/OpenCM.mk b/OpenCM.mk new file mode 100644 index 0000000..257cf78 --- /dev/null +++ b/OpenCM.mk @@ -0,0 +1,236 @@ +######################################################################## +# +# Support for Robotis OpenCM boards +# +# http://en.robotis.com/index/product.php?cate_code=131010 +# +# You must install the OpenCM IDE for this Makefile to work: +# +# http://support.robotis.com/en/software/robotis_opencm/robotis_opencm.htm +# +# Based on work that is copyright Jeremy Shaw, Sudar, Nicholas Zambetti, +# David A. Mellis & Hernando Barragan. +# +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of the +# License, or (at your option) any later version. +# +# Adapted from Teensy 3.x makefile which was adapted from Arduino 0011 +# Makefile by M J Oldfield +# +# Original Arduino adaptation by mellis, eighthave, oli.keller +# +######################################################################## + +ifndef ARDMK_DIR + ARDMK_DIR := $(realpath $(dir $(realpath $(lastword $(MAKEFILE_LIST))))) +endif + +# include Common.mk now we know where it is +include $(ARDMK_DIR)/Common.mk + +ARDUINO_DIR = $(OPENCMIDE_DIR) + +ifndef ARDMK_VENDOR + ARDMK_VENDOR = robotis +endif + +ifndef ARDUINO_CORE_PATH + ARDUINO_CORE_PATH = $(ARDUINO_DIR)/hardware/robotis/cores/robotis +endif + +ifndef BOARDS_TXT + BOARDS_TXT = $(ARDUINO_DIR)/hardware/$(ARDMK_VENDOR)/boards.txt +endif + +ifndef PARSE_OPENCM + # result = $(call READ_BOARD_TXT, 'boardname', 'parameter') + PARSE_OPENCM = $(shell grep -v "^\#" "$(BOARDS_TXT)" | grep $(1).$(2) | cut -d = -f 2- ) +endif + +ifndef F_CPU + F_CPU := $(call PARSE_OPENCM,$(BOARD_TAG),build.f_cpu) +endif + +# if boards.txt gets modified, look there, else hard code it +ARCHITECTURE = $(call PARSE_OPENCM,$(BOARD_TAG),build.architecture) +ifeq ($(strip $(ARCHITECTURE)),) + ARCHITECTURE = arm +endif + +AVR_TOOLS_DIR = $(call dir_if_exists,$(ARDUINO_DIR)/hardware/tools/$(ARCHITECTURE)) + +# Robotis has moved the platform lib dir to their root folder +ifndef ARDUINO_PLATFORM_LIB_PATH + ARDUINO_PLATFORM_LIB_PATH = $(ARDUINO_DIR)/libraries + $(call show_config_variable,ARDUINO_PLATFORM_LIB_PATH,[COMPUTED],(from ARDUINO_DIR)) +endif + +ifndef ARDUINO_HEADER + ARDUINO_HEADER = wirish.h +endif + +######################################################################## +# command names + +ifndef CC_NAME + CC_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.gcc) + ifndef CC_NAME + CC_NAME := arm-none-eabi-gcc + else + $(call show_config_variable,CC_NAME,[COMPUTED]) + endif +endif + +ifndef CXX_NAME + CXX_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.g++) + ifndef CXX_NAME + CXX_NAME := arm-none-eabi-g++ + else + $(call show_config_variable,CXX_NAME,[COMPUTED]) + endif +endif + +ifndef AS_NAME + AS_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.as) + ifndef AS_NAME + AS_NAME := arm-none-eabi-as + else + $(call show_config_variable,AS_NAME,[COMPUTED]) + endif +endif + +ifndef OBJDUMP_NAME + OBJDUMP_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.objdump) + ifndef OBJDUMP_NAME + OBJDUMP_NAME := arm-none-eabi-objdump + else + $(call show_config_variable,OBJDUMP_NAME,[COMPUTED]) + endif +endif + +ifndef AR_NAME + AR_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.ar) + ifndef AR_NAME + AR_NAME := arm-none-eabi-ar + else + $(call show_config_variable,AR_NAME,[COMPUTED]) + endif +endif + +ifndef SIZE_NAME + SIZE_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.size) + ifndef SIZE_NAME + SIZE_NAME := arm-none-eabi-size + else + $(call show_config_variable,SIZE_NAME,[COMPUTED]) + endif +endif + +ifndef NM_NAME + NM_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.nm) + ifndef NM_NAME + NM_NAME := arm-none-eabi-nm + else + $(call show_config_variable,NM_NAME,[COMPUTED]) + endif +endif + +ifndef OBJCOPY_NAME + OBJCOPY_NAME := $(call PARSE_OPENCM,$(BOARD_TAG),build.command.objcopy) + ifndef OBJCOPY_NAME + OBJCOPY_NAME := arm-none-eabi-objcopy + else + $(call show_config_variable,OBJCOPY_NAME,[COMPUTED]) + endif +endif + +# processor stuff +ifndef MCU + MCU := $(call PARSE_OPENCM,$(BOARD_TAG),build.family) +endif + +ifndef MCU_FLAG_NAME + MCU_FLAG_NAME=mcpu +endif + +######################################################################## +# FLAGS +ifndef USB_TYPE + USB_TYPE = USB_SERIAL +endif + +CPPFLAGS += -DBOARD_$(call PARSE_OPENCM,$(BOARD_TAG),build.board) +CPPFLAGS += -DMCU_$(call PARSE_OPENCM,$(BOARD_TAG),build.mcu) +CPPFLAGS += -DSTM32_MEDIUM_DENSITY -DVECT_TAB_FLASH + +CPPFLAGS += $(call PARSE_OPENCM,$(BOARD_TAG),build.option) + +CXXFLAGS += -fno-rtti + +CXXFLAGS += $(call PARSE_OPENCM,$(BOARD_TAG),build.cppoption) +ifeq ("$(call PARSE_OPENCM,$(BOARD_TAG),build.gnu0x)","true") + CXXFLAGS_STD += -std=gnu++0x +endif + +ifeq ("$(call PARSE_OPENCM,$(BOARD_TAG),build.elide_constructors)", "true") + CXXFLAGS += -felide-constructors +endif + +CPPFLAGS += -mthumb -march=armv7-m -nostdlib -Wl,--gc-sections -Wall + +LDFLAGS += -T$(ARDUINO_DIR)/hardware/robotis/cores/robotis/CM900/flash.ld +LDFLAGS += -L$(ARDUINO_CORE_PATH) +LDFLAGS += -mthumb -Xlinker --gc-sections -Wall + +OTHER_LIBS += -lstdc++ + +######################################################################## +# Reset is handled by upload script +override RESET_CMD = + +######################################################################## +# Object conversion & uploading magic, modified from Arduino.mk +override TARGET_HEX = $(OBJDIR)/$(TARGET).bin + +ifndef AVRDUDE + AVRDUDE := $(shell which robotis-loader 2>/dev/null) + ifndef AVRDUDE + AVRDUDE = $(ARDMK_DIR)/bin/robotis-loader + endif +endif + +override avr_size = $(SIZE) --target=binary $(2) + +override AVRDUDE_COM_OPTS = +ifeq ($(CURRENT_OS), WINDOWS) + override AVRDUDE_ARD_OPTS = $(COM_STYLE_MONITOR_PORT) +else + override AVRDUDE_ARD_OPTS = $(call get_monitor_port) +endif + +override AVRDUDE_UPLOAD_HEX = $(TARGET_HEX) + +######################################################################## +# automatically include Arduino.mk + +include $(ARDMK_DIR)/Arduino.mk + +######################################################################## +# Object conversion & uploading magic, modified from Arduino.mk + +$(OBJDIR)/%.bin: $(OBJDIR)/%.elf $(COMMON_DEPS) + @$(MKDIR) $(dir $@) + $(OBJCOPY) -v -Obinary $< $@ + @$(ECHO) '\n' + $(call avr_size,$<,$@) +ifneq ($(strip $(HEX_MAXIMUM_SIZE)),) + @if [ `$(SIZE) --target=binary $@ | awk 'FNR == 2 {print $$2}'` -le $(HEX_MAXIMUM_SIZE) ]; then touch $@.sizeok; fi +else + @$(ECHO) "Maximum flash memory of $(BOARD_TAG) is not specified. Make sure the size of $@ is less then $(BOARD_TAG)\'s flash memory" + @touch $@.sizeok +endif + +# link fails to plug _sbrk into libc if core is a lib, seems a bug in the linker +CORE_LIB = $(CORE_OBJS) |
