libamxp  1.4.0
Patterns C Implementation
makefile
Go to the documentation of this file.
1 include ../makefile.inc
2 
3 # build destination directories
4 OBJDIR = ../output/$(MACHINE)
5 
6 # TARGETS
7 TARGET_SO = $(OBJDIR)/$(COMPONENT).so.$(VERSION)
8 TARGET_A = $(OBJDIR)/$(COMPONENT).a
9 
10 # directories
11 # source directories
12 SRCDIR = .
13 INCDIR_PUB = ../include
14 INCDIR_PRIV = ../include_priv
15 INCDIRS = $(INCDIR_PUB) $(INCDIR_PRIV) $(if $(STAGINGDIR), $(STAGINGDIR)/include) $(if $(STAGINGDIR), $(STAGINGDIR)/usr/include)
16 STAGING_LIBDIR = $(if $(STAGINGDIR), -L$(STAGINGDIR)/lib) $(if $(STAGINGDIR), -L$(STAGINGDIR)/usr/lib)
17 
18 # files
19 HEADERS = $(wildcard $(INCDIR_PUB)/amxp/*.h)
20 SOURCES = $(wildcard $(SRCDIR)/*.c)
21 OBJECTS = $(addprefix $(OBJDIR)/,$(notdir $(SOURCES:.c=.o)))
22 OBJECTS += $(OBJDIR)/lex.amxp_expr.o \
23  $(OBJDIR)/amxp_expr.tab.o \
24 
25 FLEX_BISON = $(OBJDIR)/lex.amxp_expr.c \
26  $(OBJDIR)/amxp_expr.tab.c
27 
28 # compilation and linking flags
29 CFLAGS += -Werror -Wall -Wextra \
30  -Wformat=2 -Wno-unused-parameter -Wshadow \
31  -Wwrite-strings -Wredundant-decls \
32  -Wpedantic -Wno-format-nonliteral \
33  -fPIC -g3 -Wmissing-declarations \
34  $(addprefix -I ,$(INCDIRS)) -I$(OBJDIR) \
35  -pthread
36 
37 ifeq ($(CC_NAME),g++)
38  CFLAGS += -std=c++2a
39 else
40  CFLAGS += -Wstrict-prototypes \
41  -Wold-style-definition \
42  -Wnested-externs \
43  -Wdeclaration-after-statement \
44  -std=c11
45 endif
46 
47 LDFLAGS += $(STAGING_LIBDIR) -pthread -shared -fPIC -Wl,--version-script=libamxp.version -lamxc -lpthread
48 
49 # targets
50 all: $(TARGET_SO) $(TARGET_A)
51 
52 $(TARGET_SO): $(FLEX_BISON) $(OBJECTS)
53  $(CC) -Wl,-soname,$(COMPONENT).so.$(VMAJOR) -o $@ $(OBJECTS) $(LDFLAGS)
54 
55 $(TARGET_A): $(FLEX_BISON) $(OBJECTS)
56  $(AR) rcs $(@) $(OBJECTS)
57 
58 -include $(OBJECTS:.o=.d)
59 
60 $(OBJDIR)/amxp_expr.tab.c: $(SRCDIR)/amxp_expression.y | $(OBJDIR)/
61  bison -d --verbose -o $@ $<
62 
63 $(OBJDIR)/amxp_expr.tab.h: $(OBJDIR)/amxp_expr.tab.c
64 
65 $(OBJDIR)/lex.amxp_expr.c: $(SRCDIR)/amxp_expression.l $(OBJDIR)/amxp_expr.tab.h | $(OBJDIR)/
66  flex --header-file=$(OBJDIR)/amxp_expr_flex.h -o $@ $<
67 
68 $(OBJDIR)/%.o: $(SRCDIR)/%.c $(OBJDIR)/amxp_expr.tab.h | $(OBJDIR)/
69  $(CC) $(CFLAGS) -c -o $@ $<
70  @$(CC) $(CFLAGS) -MM -MP -MT '$(@) $(@:.o=.d)' -MF $(@:.o=.d) $(<)
71 
72 $(OBJDIR)/:
73  $(MKDIR) -p $@
74 
75 clean:
76  rm -rf ../output/ ../$(COMPONENT)-*.* ../$(COMPONENT)_*.*
77 
78 .PHONY: all clean