summaryrefslogblamecommitdiffstats
path: root/Makefile
blob: 92e71927e22d6408de5f4dc9e3b5e18dee8d7596 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                       
                                 
 
 

                                                     
 
                                                     

                                                         
 




















                                                        










                                                                        
                                                          














                                                                  




                                                       
                           


                                   
                           


                                 
                           


                                             
                           


                   
                           



                   



        
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