| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- # Try "make help" first
-
- .DEFAULT_GOAL := sketch
-
- ##
- ## Useful paths, constants, etc.
- ##
-
- ifeq ($(LIB_MAPLE_HOME),)
- SRCROOT := .
- else
- SRCROOT := $(LIB_MAPLE_HOME)
- endif
- BUILD_PATH = build
- LIBMAPLE_PATH := $(SRCROOT)/libmaple
- WIRISH_PATH := $(SRCROOT)/wirish
- SUPPORT_PATH := $(SRCROOT)/support
- LIBRARIES_PATH := $(SRCROOT)/libraries
- # Support files for linker
- LDDIR := $(SUPPORT_PATH)/ld
- # Support files for this Makefile
- MAKEDIR := $(SUPPORT_PATH)/make
- BOARD_INCLUDE_DIR := $(MAKEDIR)/board-includes
-
- ##
- ## Target-specific configuration. This determines some compiler and
- ## linker options/flags.
- ##
-
- # Try "make help" for more information on BOARD and MEMORY_TARGET;
- # these default to a Maple Flash build.
- BOARD ?= maple
- MEMORY_TARGET ?= flash
-
- # $(BOARD)- and $(MEMORY_TARGET)-specific configuration
- include $(MAKEDIR)/target-config.mk
-
- ##
- ## Build rules and useful templates
- ##
-
- include $(MAKEDIR)/build-rules.mk
- include $(MAKEDIR)/build-templates.mk
-
- ##
- ## Compilation flags
- ##
-
- # FIXME: the following allows for deprecated include style, e.g.:
- # #include "libmaple.h"
- # or
- # #include "wirish.h"
- # It slows compilation noticeably; remove after 1 release.
- TARGET_FLAGS += -I$(LIBMAPLE_PATH)/include/libmaple \
- -I$(WIRISH_PATH)/include/wirish
- TARGET_FLAGS += -I$(LIBRARIES_PATH) # for internal lib. includes, e.g. <Wire/WireBase.h>
- GLOBAL_CFLAGS := -Os -g3 -gdwarf-2 -nostdlib \
- -ffunction-sections -fdata-sections \
- -Wl,--gc-sections $(TARGET_FLAGS)
- GLOBAL_CXXFLAGS := -fno-rtti -fno-exceptions -Wall $(TARGET_FLAGS)
- GLOBAL_ASFLAGS := -x assembler-with-cpp $(TARGET_FLAGS)
- LDFLAGS = $(TARGET_LDFLAGS) $(TOOLCHAIN_LDFLAGS) -mcpu=cortex-m3 -mthumb \
- -Xlinker --gc-sections \
- -Xassembler --march=armv7-m -Wall
- # -Xlinker --print-gc-sections \
-
- ##
- ## Set all submodules here
- ##
-
- LIBMAPLE_MODULES += $(SRCROOT)/libmaple
- LIBMAPLE_MODULES += $(SRCROOT)/libmaple/usb # The USB module is kept separate
- LIBMAPLE_MODULES += $(LIBMAPLE_MODULE_SERIES) # STM32 series submodule in libmaple
- LIBMAPLE_MODULES += $(SRCROOT)/wirish
-
- # Official libraries:
- LIBMAPLE_MODULES += $(SRCROOT)/libraries/Servo
- LIBMAPLE_MODULES += $(SRCROOT)/libraries/LiquidCrystal
- LIBMAPLE_MODULES += $(SRCROOT)/libraries/Wire
- # Experimental libraries:
- LIBMAPLE_MODULES += $(SRCROOT)/libraries/FreeRTOS
-
- # User modules:
- ifneq ($(USER_MODULES),)
- LIBMAPLE_MODULES += $(USER_MODULES)
- endif
-
- # Call each module's rules.mk:
- $(foreach m,$(LIBMAPLE_MODULES),$(eval $(call LIBMAPLE_MODULE_template,$(m))))
-
- ##
- ## Targets
- ##
-
- # main target
- include $(SRCROOT)/build-targets.mk
-
- .PHONY: install sketch clean help cscope tags ctags ram flash jtag doxygen mrproper list-boards
-
- # Target upload commands
- # USB ID for DFU upload -- FIXME: do something smarter with this
- BOARD_USB_VENDOR_ID := 1EAF
- BOARD_USB_PRODUCT_ID := 0003
- UPLOAD_ram := $(SUPPORT_PATH)/scripts/reset.py && \
- sleep 1 && \
- $(DFU) -a0 -d $(BOARD_USB_VENDOR_ID):$(BOARD_USB_PRODUCT_ID) -D $(BUILD_PATH)/$(BOARD).bin -R
- UPLOAD_flash := $(SUPPORT_PATH)/scripts/reset.py && \
- sleep 1 && \
- $(DFU) -a1 -d $(BOARD_USB_VENDOR_ID):$(BOARD_USB_PRODUCT_ID) -D $(BUILD_PATH)/$(BOARD).bin -R
-
- # Conditionally upload to whatever the last build was
- install: INSTALL_TARGET = $(shell cat $(BUILD_PATH)/build-type 2>/dev/null)
- install: $(BUILD_PATH)/$(BOARD).bin
- @echo "Install target:" $(INSTALL_TARGET)
- $(UPLOAD_$(INSTALL_TARGET))
-
- # Force a rebuild if the target changed
- PREV_BUILD_TYPE = $(shell cat $(BUILD_PATH)/build-type 2>/dev/null)
- build-check:
- ifneq ($(PREV_BUILD_TYPE), $(MEMORY_TARGET))
- $(shell rm -rf $(BUILD_PATH))
- endif
-
- sketch: build-check MSG_INFO $(BUILD_PATH)/$(BOARD).bin
-
- clean:
- rm -rf build
-
- mrproper: clean
- rm -rf doxygen
-
- help:
- @echo ""
- @echo "Basic usage (BOARD defaults to maple):"
- @echo " $$ cp your-main.cpp main.cpp"
- @echo " $$ make BOARD=your_board"
- @echo " $$ make BOARD=your_board install"
- @echo ""
- @echo "(Multiple source files? Link with libmaple.a (\`$$ make library')"
- @echo "or hack build-targets.mk appropriately.)"
- @echo ""
- @echo "Important targets:"
- @echo " sketch: Compile for BOARD to MEMORY_TARGET (default)."
- @echo " install: Compile and upload over USB using Maple bootloader"
- @echo ""
- @echo "You *must* set BOARD if not compiling for Maple (e.g."
- @echo "use BOARD=maple_mini for mini, etc.), and MEMORY_TARGET"
- @echo "if not compiling to Flash. Run \`$$ make list-boards' for"
- @echo "a list of all boards."
- @echo ""
- @echo "Valid MEMORY_TARGETs (default=flash):"
- @echo " ram: Compile to RAM (doesn't touch Flash)"
- @echo " flash: Compile to Flash (for Maple bootloader)"
- @echo " jtag: Compile for JTAG/SWD upload (overwrites bootloader)"
- @echo ""
- @echo "Other targets:"
- @echo " clean: Remove all build and object files"
- @echo " doxygen: Build Doxygen HTML and XML documentation"
- @echo " help: Show this message"
- @echo " mrproper: Remove all generated files"
- @echo ""
-
- cscope:
- rm -rf cscope.*
- find . -name '*.[hcS]' -o -name '*.cpp' | xargs cscope -b
-
- tags:
- etags `find . -name "*.c" -o -name "*.cpp" -o -name "*.h"`
- @echo "Made TAGS file for EMACS code browsing"
-
- ctags:
- ctags-exuberant -R .
- @echo "Made tags file for VIM code browsing"
-
- ram:
- @$(MAKE) MEMORY_TARGET=ram --no-print-directory sketch
-
- flash:
- @$(MAKE) MEMORY_TARGET=flash --no-print-directory sketch
-
- jtag:
- @$(MAKE) MEMORY_TARGET=jtag --no-print-directory sketch
-
- doxygen:
- doxygen $(SUPPORT_PATH)/doxygen/Doxyfile
-
- # This output is kind of ugly, but I don't understand make very well.
- list-boards:
- @echo " $(addsuffix "\\n",$(basename $(notdir $(wildcard $(BOARD_INCLUDE_DIR)/*.mk))))"
|