BUILDDIR = build CONFIG ?= release CONFIGDIR = $(BUILDDIR)/$(CONFIG) OBJDIR = $(CONFIGDIR)/objs LSTDIR = $(CONFIGDIR)/lst DEPDIR = $(CONFIGDIR)/.dep TRGT = bfin-elf- CC = $(TRGT)gcc CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp LDR = $(TRGT)ldr LDRFLAGS = -T BF527 MCU = bf523-0.2 # List all default C defines here, like -D_DEBUG=1 DDEFS = # List all default ASM defines here, like -D_DEBUG=1 DADEFS = # List all default directories to look for include files here DINCDIR = # List the default directory to look for the libraries here DLIBDIR = # List all default libraries here DLIBS = # # End of default section ############################################################################################## ############################################################################################## # Start of user section # # Define project name here PROJECT = l502-BFfirmware0 # Define linker script file here LDSCRIPT= gcc/l502-bf.ld BINDIR = $(CONFIGDIR)/bin RESULT_FILES = $(BINDIR)/$(PROJECT).elf $(BINDIR)/$(PROJECT).ldr # List all user C define here, like -D_DEBUG=1 UDEFS = NDEBUG CLOCK_INIT_CB ifeq ($(CONFIG), debug) UDEFS += __DEBUG OPT = -O0 else OPT = -O3 endif # List C source files here SRC = src/main.c \ src/l502_init.c \ src/l502_fpga.c \ src/l502_sport_tx.c \ src/l502_stream.c \ src/l502_async.c \ src/l502_cmd.c \ src/l502_hdma.c \ src/l502_params.c \ src/l502_tests.c \ src/l502_user_process.c # List ASM source files here ASRC = gcc/l502-bf_basiccrt.s # List all user directories here UINCDIR = src gcc # List the user directory to look for the libraries here # List all user libraries here ULIBS = # # End of user defines ############################################################################################## INCDIR = $(patsubst %,-I%,$(DINCDIR) $(UINCDIR)) LIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR)) DEFS = $(patsubst %,-D%,$(DDEFS) $(UDEFS)) # = $(DDEFS) $(UDEFS) ADEFS = $(DADEFS) $(UADEFS) #OBJS = $(ASRC:.s=.o) $(SRC:.c=.o) OBJS = $(addprefix $(OBJDIR)/, $(notdir $(sort $(SRC:.c=.o)))) AOBJS = $(addprefix $(OBJDIR)/, $(notdir $(sort $(ASRC:.s=.o)))) LIBS = $(DLIBS) $(ULIBS) MCFLAGS = -mcpu=$(MCU) ASFLAGS = $(MCFLAGS) -g -mthumb -gdwarf-2 -Wa,-amhls=$(<:.s=.lst) $(ADEFS) #-gdwarf-2 ANOMALY_FLAGS = -mspecld-anomaly -mcsync-anomaly CPFLAGS = $(MCFLAGS) $(OPT) $(ANOMALY_FLAGS) -std=gnu99 -g -Wall -Wstrict-prototypes -Wa,-ahlms=$(addprefix $(LSTDIR)/, $(notdir $(@:.o=.lst))) $(DEFS) LDFLAGS = $(MCFLAGS) -T$(LDSCRIPT) -nostartfiles -N -Wl,-Map=$(BINDIR)/$(PROJECT).map,--cref,--gc-sections $(LIBDIR) -lm # # Generate dependency information CPFLAGS += -MD -MP -MF $(DEPDIR)/$(@F).d #bfin-elf-gcc $(CPFLAGS) -I . $(INCDIR) $(LDFLAGS) $(SRC) -o bf-test.elf .PHONY: all clean prj dirs .SECONDEXPANSION: all: dirs $(RESULT_FILES) $(OBJS) : $$(filter %/$$(basename $$(notdir $$@)).c, $$(SRC)) ##$$(patsubst %.o,%.c, $$@) $(CC) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ $(AOBJS) : $(ASRC) $(AS) -c $(CPFLAGS) -I . $(INCDIR) $< -o $@ $(BINDIR)/$(PROJECT).elf: $(OBJS) $(AOBJS) $(LDSCRIPT) $(CC) $(OBJS) $(AOBJS) $(LDFLAGS) $(LIBS) -o $@ $(BINDIR)/$(PROJECT).ldr: $(BINDIR)/$(PROJECT).elf $(LDR) $(LDRFLAGS) -c $@ $< dirs: $(BUILDDIR) $(CONFIGDIR) $(DEPDIR) $(OBJDIR) $(LSTDIR) $(BINDIR) $(BINDIR): mkdir $(BINDIR) $(LSTDIR): mkdir $(LSTDIR) $(OBJDIR): mkdir $(OBJDIR) $(BUILDDIR): mkdir $(BUILDDIR) $(CONFIGDIR): mkdir $(CONFIGDIR) $(DEPDIR): mkdir $(DEPDIR) clean: -rm -fR $(CONFIGDIR) -include $(wildcard $(DEPDIR)/*)