Files
E502_ADC_BFfirmware/makefile
2026-04-07 20:20:46 +03:00

230 lines
5.4 KiB
Makefile

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)/*)