* Compiler now puts all objects in a separate directory. * Add support for dependency files * Add obj directory to .gitignore
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
| ################################Shimatta Makefile####################################
 | |
| #CPU:		STM32F030
 | |
| #Compiler:	arm-none-eabi
 | |
| #####################################################################################
 | |
| 
 | |
| ifneq ($(VERBOSE),true)
 | |
| QUIET=@
 | |
| else
 | |
| QUIET=
 | |
| endif
 | |
| 
 | |
| 
 | |
| #Add Files and Folders below#########################################################
 | |
| CFILES 	= main.c syscalls/syscalls.c setup/system_init.c startup/startup_stm32f0xx.c
 | |
| ASFILES =
 | |
| INCLUDEPATH = -Iinclude -Iinclude/cmsis
 | |
| 
 | |
| OBJDIR=obj
 | |
| target	= project
 | |
| LIBRARYPATH = -Lstartup
 | |
| LIBRARIES = 
 | |
| 
 | |
| DEFINES = -DSTM32F030x6 -DSTM32F0XX
 | |
| mapfile = memmap
 | |
| 
 | |
| ##Custom Files###
 | |
| 
 | |
| #TODO
 | |
| 
 | |
| 
 | |
| ###################################################################################
 | |
| CC=arm-none-eabi-gcc
 | |
| OBJCOPY=arm-none-eabi-objcopy
 | |
| OBJDUMP=arm-none-eabi-objdump
 | |
| SIZE=arm-none-eabi-size
 | |
| 
 | |
| LFLAGS = -mlittle-endian -mthumb -mcpu=cortex-m0 -mthumb-interwork 
 | |
| LFLAGS += -mfloat-abi=soft --disable-newlib-supplied-syscalls -nostartfiles
 | |
| LFLAGS += -Tstartup/stm32f030.ld -Wl,-Map=$(mapfile).map -Wl,--gc-sections -g
 | |
| 
 | |
| CFLAGS = -c -fmessage-length=0 -mlittle-endian -mthumb -mcpu=cortex-m0 -mthumb-interwork
 | |
| CFLAGS += -mfloat-abi=soft -nostartfiles -Wall -g
 | |
| 
 | |
| ####################################################################################
 | |
| 
 | |
| OBJ = $(CFILES:%.c=$(OBJDIR)/%.c.o)
 | |
| ASOBJ = $(ASFILES:%.S=$(OBJDIR)/%.S.o)
 | |
| 
 | |
| default: $(target).elf
 | |
| 
 | |
| binary: $(target).bin $(target).hex
 | |
| 
 | |
| %.bin: %.elf
 | |
| 	$(OBJCOPY) -O binary $^ $@
 | |
| %.hex: %.elf
 | |
| 	$(OBJCOPY) -O ihex $^ $@
 | |
| 
 | |
| #Linking
 | |
| $(target).elf: $(OBJ) $(ASOBJ)
 | |
| 	@echo Linking $@
 | |
| 	$(QUIET)$(CC) $(LFLAGS) $(LIBRARYPATH) -o $@ $^ $(LIBRARIES)
 | |
| 	$(QUIET)$(SIZE) $@
 | |
| 
 | |
| #Compiling
 | |
| $(OBJ):
 | |
| 	@echo Compiling $@
 | |
| 	$(eval OUTPATH=$(dir $@))
 | |
| 	@mkdir -p $(OUTPATH)
 | |
| 	$(QUIET)$(CC) $(CFLAGS) -MMD -MT $@ $(INCLUDEPATH) $(DEFINES) -o $@ $(@:$(OBJDIR)/%.c.o=%.c)
 | |
| 	
 | |
| $(ASOBJ):
 | |
| 	@echo Compiling $@
 | |
| 	$(eval OUTPATH=$(dir $@))
 | |
| 	@mkdir -p $(OUTPATH)
 | |
| 	$(QUIET)$(CC) $(CFLAGS) -MMD -MT $@ $(INCLUDEPATH) $(DEFINES) -o $@ $(@:$(OBJDIR)/%.S.o=%.S)
 | |
| 
 | |
| .PHONY: qtproject clean mrproper objcopy disassemble
 | |
| 
 | |
| disassemble: $(target).elf
 | |
| 	$(OBJDUMP) -D -s $< > $(target).lss
 | |
| 
 | |
| objcopy: $(target).bin $(target).hex
 | |
| 
 | |
| mrproper:
 | |
| 	rm -f $(target).pro
 | |
| 
 | |
| clean:
 | |
| 	rm -f $(target).elf $(target).bin $(target).hex $(OBJ) $(ASOBJ) $(mapfile).map $(target).lss
 | |
| 	rm -rfv $(OBJDIR)
 | |
| 
 | |
| qtproject:
 | |
| 	echo -e "TEMPLATE = app\nCONFIG -= console app_bundle qt" > $(target).pro
 | |
| 	echo -e "SOURCES += $(CFILES) $(ASFILES)" >> $(target).pro
 | |
| 	echo -ne "INCLUDEPATH += " >> $(target).pro
 | |
| 	echo "$(INCLUDEPATH)" | sed "s!-I!./!g" >> $(target).pro
 | |
| 	echo -ne "HEADERS += " >> $(target).pro
 | |
| 	find -name "*.h" | tr "\\n" " " >> $(target).pro
 | |
| 	echo -ne "\nDEFINES += " >> $(target).pro
 | |
| 	echo "$(DEFINES)" | sed "s/-D//g" >> $(target).pro
 | |
| 
 | |
| -include $(CFILES:%.c=$(OBJDIR)/%.c.d) $(ASFILES:%.S=($OBJDIR)/%.S.d)
 | |
| 
 |