315 lines
8.1 KiB
Makefile
315 lines
8.1 KiB
Makefile
# 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
|
|
|
|
|
|
# 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 crctab.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 = 2
|
|
|
|
# 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
|
|
|
|
|
|
#---------------- 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: elf bin hex
|
|
$(E) " SIZE $(TARGET).elf"
|
|
$(Q)$(ELFSIZE)|grep -v debug
|
|
|
|
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: bin
|
|
utils/lpcchksum $(TARGET).bin
|
|
openocd -f openocd-usb.cfg -f lpc1754.cfg -f flash.cfg
|
|
|
|
debug: bin
|
|
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 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)
|
|
$(OBJDIR)/%.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) $(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
|