blob: 92e71927e22d6408de5f4dc9e3b5e18dee8d7596 (
plain) (
tree)
|
|
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
MAKEFLAGS += --no-print-directory
MAKEFLAGS += --warn-undefined-variables
srcdir := .
builddir := tmp
LIBUNIT_PREFIX := /opt/local/unit
LIBUNIT_CPPFLAGS := -isystem$(LIBUNIT_PREFIX)/include
LIBUNIT_LIBS := -L$(LIBUNIT_PREFIX)/lib -lunit
DEFAULT_CPPFLAGS := -D_GNU_SOURCE $(LIBUNIT_CPPFLAGS)
EXTRA_CPPFLAGS :=
CPPFLAGS := $(DEFAULT_CPPFLAGS) $(EXTRA_CPPFLAGS)
DEFAULT_CFLAGS := -Wall -Wextra -Werror -std=gnu2x -O3
EXTRA_CFLAGS :=
CFLAGS := $(DEFAULT_CFLAGS) $(EXTRA_CFLAGS)
DEFAULT_ASFLAGS :=
EXTRA_ASFLAGS :=
ASFLAGS := $(DEFAULT_ASFLAGS) $(EXTRA_ASFLAGS)
DEFAULT_LDFLAGS :=
EXTRA_LDFLAGS :=
LDFLAGS := $(DEFAULT_LDFLAGS) $(EXTRA_LDFLAGS)
DEFAULT_LIBS := $(LIBUNIT_LIBS) -lpthread -lc -lgcc
EXTRA_LIBS :=
LIBS := $(DEFAULT_LIBS) $(EXTRA_LIBS)
AR := ar
AS := as
CC := cc
CPP := $(CC) -E $(CFLAGS)
LD := $(CC) $(CFLAGS)
FIND := find
GREP := grep
MKDIR := mkdir
SED := sed
SORT := sort
SRCDIR := $(srcdir)/src
SRC := $(shell $(FIND) $(SRCDIR) -type f | $(GREP) '\.c$$' | $(SORT))
I := $(patsubst $(srcdir)/%.c,$(builddir)/%.i,$(SRC))
ASM := $(patsubst $(srcdir)/%.c,$(builddir)/%.s,$(SRC))
OBJ := $(patsubst %.s,%.o,$(ASM))
BIN := $(builddir)/unit_c_app
SRCDIRS := $(shell $(FIND) $(SRCDIR) -type d | $(SED) 's,$$,/,')
BUILDDIRS := $(patsubst $(srcdir)/%, $(builddir)/%, $(SRCDIRS))
.PHONY: all
all: $(BIN)
.SECONDEXPANSION:
$(I): $(builddir)/%.i: $(srcdir)/%.c Makefile | $$(@D)/
$(info CPP $@)
$(CPP) $(CPPFLAGS) -o $@ $<
$(ASM): %.s: %.i Makefile | $$(@D)/
$(info CC $@)
$(CC) -S $(CFLAGS) -o $@ $<
$(OBJ): %.o: %.s Makefile | $$(@D)/
$(info AS $@)
$(AS) $(ASFLAGS) -o $@ $<
$(BIN): $(OBJ) Makefile | $$(@D)/
$(info LD $@)
$(LD) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
$(BUILDDIRS): %/: | $$(dir %)
$(info MKDIR $@)
$(MKDIR) $@
$(builddir)/:
$(info MKDIR $@)
$(MKDIR) $@
ifdef V
else
.SILENT:
endif
|