BUILDDIR = build CONFIG ?= release -include local.mk CONFIGDIR = $(BUILDDIR)/$(CONFIG) OBJDIR = $(CONFIGDIR)/objs LSTDIR = $(CONFIGDIR)/lst DEPDIR = $(CONFIGDIR)/.dep BFIN_TOOLCHAIN ?= CROSS_COMPILE ?= ifeq ($(strip $(CROSS_COMPILE)),) ifneq ($(strip $(BFIN_TOOLCHAIN)),) ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bin/bfin-elf-gcc),) TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf- else ifneq ($(wildcard $(BFIN_TOOLCHAIN)/bfin-elf-gcc),) TRGT = $(BFIN_TOOLCHAIN)/bfin-elf- else TRGT = $(BFIN_TOOLCHAIN)/bin/bfin-elf- endif else TRGT = bfin-elf- endif else TRGT = $(CROSS_COMPILE) endif CC = $(TRGT)gcc CP = $(TRGT)objcopy AS = $(TRGT)gcc -x assembler-with-cpp LDR = $(TRGT)ldr TOOLCHAIN_SKIP_CHECK_GOALS = clean help print-toolchain TOOLCHAIN_CHECK = 1 ifneq ($(strip $(MAKECMDGOALS)),) ifeq ($(strip $(filter-out $(TOOLCHAIN_SKIP_CHECK_GOALS),$(MAKECMDGOALS))),) TOOLCHAIN_CHECK = 0 endif endif ifeq ($(TOOLCHAIN_CHECK),1) ifeq ($(strip $(shell command -v $(CC) 2>/dev/null)),) $(error Blackfin GCC toolchain not found: '$(CC)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-) endif ifeq ($(strip $(shell command -v $(LDR) 2>/dev/null)),) $(error Blackfin loader tool not found: '$(LDR)'. Set BFIN_TOOLCHAIN=/abs/path/to/bfin-elf or CROSS_COMPILE=/abs/path/to/bin/bfin-elf-) endif endif 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 UDEFS += FFT_FP_EXTERNAL_TWIDDLES 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 \ FFT_and_FP_math/C/FFT_FP_realisation.c # List ASM source files here ASRC = gcc/l502-bf_basiccrt.s # List all user directories here UINCDIR = src gcc FFT_and_FP_math/C # 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 #LDFLAGS = $(MCFLAGS) -T$(LDSCRIPT) -nostartfiles -N -Wl,-Map=$(BINDIR)/$(PROJECT).map, -Wl,--cref, -lm #LDFLAGS += -Wl -Map=$(BINDIR)/$(PROJECT).map, --print-memory-usage # # 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 help print-toolchain .SECONDEXPANSION: all: dirs $(RESULT_FILES) help: @echo "Blackfin firmware build" @echo " make" @echo " make CONFIG=debug" @echo " make BFIN_TOOLCHAIN=/abs/path/to/bfin-elf" @echo " make CROSS_COMPILE=/abs/path/to/bin/bfin-elf-" @echo " make print-toolchain" print-toolchain: @echo "TRGT=$(TRGT)" @echo "CC=$(CC)" @echo "AS=$(AS)" @echo "CP=$(CP)" @echo "LDR=$(LDR)" $(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 -p $(BINDIR) $(LSTDIR): mkdir -p $(LSTDIR) $(OBJDIR): mkdir -p $(OBJDIR) $(BUILDDIR): mkdir -p $(BUILDDIR) $(CONFIGDIR): mkdir -p $(CONFIGDIR) $(DEPDIR): mkdir -p $(DEPDIR) clean: -rm -fR $(CONFIGDIR) -include $(wildcard $(DEPDIR)/*)