view Makefile.inc @ 693:a622d21833e1

Implement fopen() in mem ioctx, and simplistic read-only/write flag support.
author Matti Hamalainen <ccr@tnsp.org>
date Mon, 09 Mar 2020 18:54:37 +0200
parents 81714d54689c
children 18a19d052f94
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)
	$(COMPILE_C_OBJ)


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

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

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

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

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


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

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

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


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

srcclean: clean
	$(RM) *~

.PHONY: clean srcclean all