view Makefile.inc @ 729:ef1521b179b1

More build system improvements.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 25 Feb 2022 15:25:16 +0200
parents 18a19d052f94
children 057da95d7447
line wrap: on
line source

###
### Tools, paths and directories
###
ifneq ($(BINTOOL_PREFIX),)
CC = $(BINTOOL_PREFIX)gcc
CXX = $(BINTOOL_PREFIX)g++
AR = $(BINTOOL_PREFIX)ar
RANLIB = $(BINTOOL_PREFIX)ranlib
else
CC ?= $(BINTOOL_PREFIX)gcc
CXX ?= $(BINTOOL_PREFIX)g++
AR ?= $(BINTOOL_PREFIX)ar
RANLIB ?= $(BINTOOL_PREFIX)ranlib
endif

INSTALL ?= install
MKDIR ?= mkdir
MKDIR_P ?= $(MKDIR) -p


###
### Main th-libs targets
###
THLIBS_A = $(OBJPATH)thlibs.a
THLIBS_DEP += $(THLIBS)th_types.h $(THLIBS)th_util.h


NOBUILD_TARGETS +=
NOINST_TARGETS += $(THLIBS_A)


###
### Functions and compilation/link commands
###
ifneq ($(V),1)
DO_CMD=/bin/echo -E " $(1) $(2)" && $(3)
else
DO_CMD=/bin/echo -E $(3) && $(3)
endif
DO_MKDIR=if test ! -z "$(1)" -a ! -d "$(1)"; then /bin/echo -E " MKDIR $(1)"; mkdir -p "$(1)"; fi


COMPILE_C_OBJ = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,CC,$<,$(CC) $(CFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))

LINK_C_BIN = \
	@$(call DO_MKDIR,$(BINPATH)) ; \
	$(call DO_CMD,LINK,$@,$(CC) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))

COMPILE_CXX_OBJ = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,CXX,$<,$(CXX) $(CXXFLAGS) $(DM_CFLAGS) -c -o $@ $< $(1))

LINK_CXX_BIN = \
	@$(call DO_MKDIR,$(BINPATH)) ; \
	$(call DO_CMD,LINK,$@,$(CXX) -o $@ $(filter %.o %.a,$+) $(LDFLAGS) $(1))

LINK_STATIC_LIB = \
	@$(call DO_MKDIR,$(OBJPATH)) ; \
	$(call DO_CMD,AR,$@ $(filter %.o,$+),$(AR) cru $@ $(filter %.o,$+)) ; \
	$(call DO_CMD,RANLIB,$@,$(RANLIB) $@)


###
### Generic target rules
###
all: $(NOBUILD_TARGETS) $(NOINST_TARGETS) $(TARGETS)


$(OBJPATH)th_string.o: $(addprefix $(THLIBS), \
	th_string.c th_printf.c th_printf1.c \
	th_strglob.c th_string.h) $(THLIBS_DEP)
	$(call COMPILE_C_OBJ,)


$(OBJPATH)%.o: $(THLIBS)%.c $(THLIBS_DEP)
	$(call COMPILE_C_OBJ,)

$(OBJPATH)%.o: $(THLIBS)%.c $(THLIBS)%.h $(THLIBS_DEP)
	$(call COMPILE_C_OBJ, -I$(THLIBS))

$(OBJPATH)%.o: %.c %.h $(THLIBS_DEP)
	$(call COMPILE_C_OBJ, -I$(THLIBS))

$(OBJPATH)%.o: %.c $(THLIBS_DEP)
	$(call COMPILE_C_OBJ, -I$(THLIBS))

$(THLIBS_A): $(addprefix $(OBJPATH),$(THLIBS_OBJ))
	$(call LINK_STATIC_LIB,)


###
### Generate endian check and config.h
###
$(OBJPATH)endianchk.o: $(THLIBS)endianchk.c
	$(call COMPILE_C_OBJ,)

$(ENDIANCHK_BIN): $(OBJPATH)endianchk.o
	$(call LINK_C_BIN,)

config.h: $(ENDIANCHK_BIN)
	$(ENDIANCHK_BIN) > $@


###
### Special targets
###
clean:
	-$(RM) $(TARGETS) $(NOINST_TARGETS) $(CLEAN_TARGETS) $(OBJPATH)*.o

distclean: clean
	-$(RM) $(DISTCLEAN_TARGETS) *~ core *.core

.PHONY: clean distclean all