123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- # Hey Emacs, this is a -*- makefile -*-
- #----------------------------------------------------------------------------
- # WinAVR Makefile Template written by Eric B. Weddington, Joerg Wunsch, et al.
- #
- # Released to the Public Domain
- #
- # Additional material for this makefile was written by:
- # Peter Fleury
- # Tim Henigan
- # Colin O'Flynn
- # Reiner Patommel
- # Markus Pfaff
- # Sander Pool
- # Frederik Rouleau
- # Carlos Lamas
- #
- #
- # Extensively modified for sd2iec and later adapted for ARM by Ingo Korb
- #
- # To rebuild project do "make clean" then "make all".
- #----------------------------------------------------------------------------
- # Read configuration file
- ifdef CONFIG
- CONFIGSUFFIX = $(CONFIG:config%=%)
- else
- CONFIG = config
- CONFIGSUFFIX =
- endif
- # Enable verbose compilation with "make V=1"
- ifdef V
- Q :=
- E := @:
- else
- Q := @
- E := @echo
- endif
- # Include the configuration file
- include $(CONFIG)
- # Directory for all generated files
- OBJDIR := obj$(CONFIGSUFFIX)
- # Output format. (can be srec, ihex, binary)
- FORMAT = binary
- # Linker script
- LINKERSCRIPT = lpc1754.ld
- # Target file name (without extension).
- TARGET = $(OBJDIR)/sd2snes
- # List C source files here. (C dependencies are automatically generated.)
- SRC = main.c ff.c ccsbcs.c clock.c uart.c power.c led.c timer.c printf.c spi.c fileops.c rtc.c fpga.c fpga_spi.c snes.c smc.c memory.c filetypes.c faulthandler.c sort.c crc32.c cic.c cli.c xmodem.c irq.c rle.c sdnative.c msu1.c crc16.c sysinfo.c cfg.c
- # usbcontrol.c usb_hid.c usbhw_lpc.c usbinit.c usbstdreq.c
- # List Assembler source files here.
- # Make them always end in a capital .S. Files ending in a lowercase .s
- # will not be considered source files but generated files (assembler
- # output from the compiler), and will be deleted upon "make clean"!
- # Even though the DOS/Win* filesystem matches both .s and .S the same,
- # it will preserve the spelling of the filenames, and gcc itself does
- # care about how the name is spelled on its command-line.
- ASRC = startup.S crc.S
- # Optimization level, can be [0, 1, 2, 3, s].
- # 0 = turn off optimization. s = optimize for size.
- # (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
- # Use s -mcall-prologues when you really need size...
- #OPT = 2
- OPT = s
- # Debugging format.
- DEBUG = dwarf-2
- # List any extra directories to look for include files here.
- # Each directory must be seperated by a space.
- # Use forward slashes for directory separators.
- # For a directory that has spaces, enclose it in quotes.
- EXTRAINCDIRS =
- # Compiler flag to set the C Standard level.
- # c89 = "ANSI" C
- # gnu89 = c89 plus GCC extensions
- # c99 = ISO C99 standard (not yet fully implemented)
- # gnu99 = c99 plus GCC extensions
- CSTANDARD = -std=gnu99
- # Place -D or -U options here
- CDEFS = -DF_OSC=$(CONFIG_MCU_FOSC)UL
- # Place -I options here
- CINCS =
- # CPU-specific flags
- ifndef CPUFLAGS
- CPUFLAGS := -mthumb -mcpu=cortex-m3
- endif
- ifndef ARCH
- ARCH := arm-none-eabi
- endif
- # Define programs and commands.
- # CC must be defined here to generate the correct CFLAGS
- SHELL = sh
- CC = $(ARCH)-gcc
- OBJCOPY = $(ARCH)-objcopy
- OBJDUMP = $(ARCH)-objdump
- SIZE = $(ARCH)-size
- NM = $(ARCH)-nm
- REMOVE = rm -f
- COPY = cp
- AWK = awk
- RLE = ../utils/rle
- BIN2H = utils/bin2h
- #---------------- Compiler Options ----------------
- # -g*: generate debugging information
- # -O*: optimization level
- # -f...: tuning, see GCC manual and avr-libc documentation
- # -Wall...: warning level
- # -Wa,...: tell GCC to pass this to the assembler.
- # -adhlns...: create assembler listing
- CFLAGS = -g$(DEBUG)
- CFLAGS += $(CDEFS) $(CINCS)
- CFLAGS += -O$(OPT)
- CFLAGS += $(CPUFLAGS) -nostartfiles
- #CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
- CFLAGS += -Wall -Wstrict-prototypes -Werror
- CFLAGS += -Wa,-adhlns=$(OBJDIR)/$(<:.c=.lst)
- CFLAGS += -I$(OBJDIR)
- CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
- CFLAGS += $(CSTANDARD)
- CFLAGS += -ffunction-sections -fdata-sections
- #---------------- Assembler Options ----------------
- # -Wa,...: tell GCC to pass this to the assembler.
- # -ahlms: create listing
- # -gstabs: have the assembler create line number information; note that
- # for use in COFF files, additional information about filenames
- # and function names needs to be present in the assembler source
- # files -- see avr-libc docs [FIXME: not yet described there]
- ASFLAGS = $(CPUFLAGS) -Wa,-adhlns=$(OBJDIR)/$(<:.S=.lst),-gstabs -I$(OBJDIR)
- #---------------- Linker Options ----------------
- # -Wl,...: tell GCC to pass this to linker.
- # -Map: create map file
- # --cref: add cross reference to map file
- LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
- LDFLAGS += -T$(LINKERSCRIPT)
- LDFLAGS += -Wl,--gc-sections
- ifeq ($(CONFIG_LINKER_RELAX),y)
- LDFLAGS += -Wl,-O9,--relax
- endif
- #============================================================================
- # De-dupe the list of C source files
- CSRC := $(sort $(SRC))
- # Define all object files.
- OBJ := $(patsubst %,$(OBJDIR)/%,$(CSRC:.c=.o) $(ASRC:.S=.o))
- # Define all listing files.
- LST := $(patsubst %,$(OBJDIR)/%,$(CSRC:.c=.lst) $(ASRC:.S=.lst))
- # Compiler flags to generate dependency files.
- GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
- # Combine all necessary flags and optional flags.
- # Add target processor to flags.
- ALL_CFLAGS = -I. $(CFLAGS) $(GENDEPFLAGS)
- ALL_ASFLAGS = -I. -x assembler-with-cpp $(ASFLAGS) $(CDEFS)
- # Default target.
- all: build
- build: cfgware.h elf bin hex
- $(E) " SIZE $(TARGET).elf"
- $(Q)$(ELFSIZE)|grep -v debug
- cp $(TARGET).bin $(OBJDIR)/firmware.img
- utils/genhdr $(OBJDIR)/firmware.img SNSD $(CONFIG_FWVER)
- elf: $(TARGET).elf
- bin: $(TARGET).bin
- hex: $(TARGET).hex
- eep: $(TARGET).eep
- lss: $(TARGET).lss
- sym: $(TARGET).sym
- # # A little helper target for the maintainer =)
- # copy2card:
- # cp $(TARGET).bin /mbed/hw_LPC1768.bin
- program: build
- utils/lpcchksum $(TARGET).bin
- openocd -f openocd-usb.cfg -f lpc1754.cfg -f flash.cfg
- debug: build
- openocd -f openocd-usb.cfg -f lpc1754.cfg
- reset:
- openocd -f openocd-usb.cfg -f lpc1754.cfg -f reset.cfg
- # Display size of file.
- HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
- ELFSIZE = $(SIZE) -A $(TARGET).elf
- # Generate cfgware.h
- cfgware.h: $(OBJDIR)/fpga_rle.bit
- $(E) " BIN2H $@"
- $(Q) $(BIN2H) $< $@
- $(OBJDIR)/fpga_rle.bit: sd2sneslite.bit
- $(E) " RLE $@"
- $(Q) $(RLE) $< $@
- # Generate autoconf.h from config
- .PRECIOUS : $(OBJDIR)/autoconf.h
- $(OBJDIR)/autoconf.h: $(CONFIG) | $(OBJDIR)
- $(E) " CONF2H $(CONFIG)"
- $(Q)$(AWK) -f conf2h.awk $(CONFIG) > $(OBJDIR)/autoconf.h
- # Create final output files from ELF output file.
- $(OBJDIR)/%.bin: $(OBJDIR)/%.elf
- $(E) " BIN $@"
- $(Q)$(OBJCOPY) -O binary $< $@
- $(OBJDIR)/%.hex: $(OBJDIR)/%.elf
- $(E) " HEX $@"
- $(Q)$(OBJCOPY) -O $(FORMAT) $< $@
- # Create extended listing file from ELF output file.
- $(OBJDIR)/%.lss: $(OBJDIR)/%.elf
- $(E) " LSS $<"
- $(Q)$(OBJDUMP) -h -S $< > $@
- # Create a symbol table from ELF output file.
- $(OBJDIR)/%.sym: $(OBJDIR)/%.elf
- $(E) " SYM $<"
- $(E)$(NM) -n $< > $@
- # Link: create ELF output file from object files.
- .SECONDARY : $(TARGET).elf
- .PRECIOUS : $(OBJ)
- $(TARGET).elf : $(OBJ)
- $(E) " LINK $@"
- $(Q)$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
- # Compile: create object files from C source files.
- $(OBJDIR)/%.o : %.c | $(OBJDIR) $(OBJDIR)/autoconf.h
- $(E) " CC $<"
- $(Q)$(CC) -c $(ALL_CFLAGS) $< -o $@
- # Compile: create assembler files from C source files.
- $(OBJDIR)/%.s : %.c | $(OBJDIR) $(OBJDIR)/autoconf.h
- $(CC) -S $(ALL_CFLAGS) $< -o $@
- # Assemble: create object files from assembler source files.
- $(OBJDIR)/%.o : %.S | $(OBJDIR) $(OBJDIR)/autoconf.h
- $(E) " AS $<"
- $(Q)$(CC) -c $(ALL_ASFLAGS) $< -o $@
- # Create preprocessed source for use in sending a bug report.
- $(OBJDIR)/%.i : %.c | $(OBJDIR) $(OBJDIR)/autoconf.h
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
- # Create the output directory
- $(OBJDIR) :
- $(E) " MKDIR $(OBJDIR)"
- $(Q)mkdir $(OBJDIR)
- # Target: clean project.
- clean: begin clean_list end
- clean_list :
- $(E) " CLEAN"
- $(Q)$(REMOVE) $(TARGET).hex
- $(Q)$(REMOVE) $(TARGET).bin
- $(Q)$(REMOVE) $(TARGET).elf
- $(Q)$(REMOVE) $(TARGET).map
- $(Q)$(REMOVE) $(TARGET).sym
- $(Q)$(REMOVE) $(TARGET).lss
- $(Q)$(REMOVE) $(OBJ)
- $(Q)$(REMOVE) cfgware.h
- $(Q)$(REMOVE) $(OBJDIR)/autoconf.h
- $(Q)$(REMOVE) $(OBJDIR)/*.bin
- $(Q)$(REMOVE) $(LST)
- $(Q)$(REMOVE) $(CSRC:.c=.s)
- $(Q)$(REMOVE) $(CSRC:.c=.d)
- $(Q)$(REMOVE) .dep/*
- -$(Q)rmdir $(OBJDIR)
- # Include the dependency files.
- -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
- # Listing of phony targets.
- .PHONY : all begin finish end sizebefore sizeafter \
- build elf hex lss sym clean clean_list
|