Makefile.libbcc 3.01 KB
# Makefile for building BCC library
#include $(TOP)/Makefile.tools

# library specific compilation flags
CFLAGS=-O2 -ffunction-sections -fdata-sections $(LIBFLAGS)

# ------------------------------------------------------------------------------
# libbcc: from bsp

BCC_SRCPATH:=$(abspath ./bsp)
BSP_SRCPATH:=$(BCC_SRCPATH)/bsp/2020q4

# libc include
LIBC_SRCPATH:=$(abspath ./newlib/newlib/libc)

# read common list of source files
-include $(BCC_SRCPATH)/common.mk

EXTRA_S_SRCS:=shared/crt0.S shared/first.S


BCC_SOURCES:=$(BCC_COMMON_SOURCES) $(BCC_INT_IRQMP_SOURCES) $(BCC_APBUART_SOURCES) $(BCC_GPTIMER_SOURCES)
BCC_OBJS:=$(subst /,~,$(BCC_SOURCES:%=%.o))

BCC_C_SOURCES = $(filter %.c,$(BCC_SOURCES))
BCC_S_SOURCES = $(filter %.S,$(BCC_SOURCES))

BCC_C_OBJS=$(BCC_C_SOURCES:.c=.o)
BCC_S_OBJS=$(BCC_S_SOURCES:.S=.o)
BCC_C_OBJS_SUB=$(subst /,~,$(BCC_C_OBJS))
BCC_S_OBJS_SUB=$(subst /,~,$(BCC_S_OBJS))
BCC_EXTRA_OBJS=$(notdir $(EXTRA_S_SRCS:.S=.o))

BCC_C_OBJS_FULLPATH=$(BCC_C_OBJS_SUB:%=$(DSTDIR)/%)
BCC_S_OBJS_FULLPATH=$(BCC_S_OBJS_SUB:%=$(DSTDIR)/%)
BCC_EXTRA_OBJS_FULLPATH=$(addprefix $(DSTDIR)/,$(BCC_EXTRA_OBJS))

#$(info "TEST")
#$(info $(EXTRA_S_SRCS))
#$(info $(BCC_EXTRA_OBJS))
#$(info $(BCC_S_OBJS_FULLPATH))
#$(info $(BCC_EXTRA_OBJS_FULLPATH))
#$(info "END-TEST")

all: $(DSTDIR)/../include $(BCC_EXTRA_OBJS_FULLPATH) $(DSTDIR)/libbcc.a
	@echo "BCC library is prepared"

# run building
$(DSTDIR)/libbcc.a: $(DSTDIR) $(BCC_SRCPATH)/common.mk $(BCC_C_OBJS_FULLPATH) $(BCC_S_OBJS_FULLPATH)
	@$(AR) r $@ $(BCC_C_OBJS_FULLPATH) $(BCC_S_OBJS_FULLPATH)

# run copying include
$(DSTDIR)/../include:
	@echo "Copy include"
	@cp -r $(BCC_SRCPATH)/shared/include $@
	@cp -r $(BSP_SRCPATH)/include/* $@


define GEN_C2O_RULE
$(DSTDIR)/$(ofile): $(DSTDIR)/$(ofile:%.o=%.c_S)
	@echo "Assemble $$@ from $$<"
	@$(AS) $(ASARCH) -gdwarf-5 -o $$@ $$<
$(DSTDIR)/$(ofile:%.o=%.c_S) : $(BCC_SRCPATH)/$(subst ~,/,$(notdir $(ofile:.o=.c))) $(DSTDIR)/../include $(LIBC_SRCPATH)/include
	@echo "Compile '$$<' to '$$@'"
	@$(CC) $(CCARCH) $(CFLAGS) -fno-addrsig -Wall -Wextra -pedantic -fno-builtin -I$(DSTDIR)/../include -I$(LIBC_SRCPATH)/include -S -o $$@ $$<
endef

$(foreach ofile, $(BCC_C_OBJS_SUB), \
  $(eval $(GEN_C2O_RULE)) \
)

define GEN_S2O_RULE
$(DSTDIR)/$(ofile) : $(BCC_SRCPATH)/$(subst ~,/,$(notdir $(ofile:.o=.S))) $(DSTDIR)/../include
	@$(CC) $(CCARCH) $(CFLAGS) -fno-addrsig -I$(DSTDIR)/../include -I$(BCC_SRCPATH)/shared/inc -S -o $$@_as $$<
	@$(AS) $(ASARCH) -gdwarf-5 -I$(BCC_SRCPATH)/shared/inc -o $$@ $$@_as
endef

$(foreach ofile, $(BCC_S_OBJS_SUB), \
  $(eval $(GEN_S2O_RULE)) \
)

define GEN_EXT_RULE
$(DSTDIR)/$(notdir $(oext:.S=.o)) : $(BCC_SRCPATH)/$(oext)
	@$(CC) $(CCARCH) $(CFLAGS) -fno-addrsig -I$(DSTDIR)/../include -I$(BCC_SRCPATH)/shared/inc -S -o $$@_as $$<
	@$(AS) $(ASARCH) -gdwarf-5 -I$(BCC_SRCPATH)/shared/inc -o $$@ $$@_as
endef

$(foreach oext, $(EXTRA_S_SRCS), \
	$(eval $(GEN_EXT_RULE)) \
)

# ------------------------------------------------------------------------------
clean:
	rm `find $(DSTDIR) -name "*.o"`
	rm `find $(DSTDIR) -name "*.a"`