mirror of
				https://github.com/pascallanger/DIY-Multiprotocol-TX-Module.git
				synced 2025-10-31 03:14:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			205 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			205 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| # 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
 | |
| 
 | |
| # Chooses the bootloader, available: maple and robotis
 | |
| BOOTLOADER    ?= maple
 | |
| 
 | |
| # This is the serial port used by robotis bootloader
 | |
| ROBOTIS_PORT ?= /dev/ttyACM0
 | |
| 
 | |
| # $(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) \
 | |
| 		   -DBOOTLOADER_$(BOOTLOADER)
 | |
| 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
 | |
| 
 | |
| ifeq ($(BOOTLOADER),maple)
 | |
| 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
 | |
| endif
 | |
| 
 | |
| ifeq ($(BOOTLOADER),robotis)
 | |
| UPLOAD_flash := $(SUPPORT_PATH)/scripts/robotis-loader.py $(ROBOTIS_PORT) $(BUILD_PATH)/$(BOARD).bin
 | |
| endif
 | |
| 
 | |
| # 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))))"
 |