xref: /f-stack/tools/prog.mk (revision d4a07e70)
1# # Derived from FreeBSD src/share/mk/bsd.prog.mk
2#
3
4ifdef DEBUG_FLAGS
5CFLAGS+=${DEBUG_FLAGS}
6CXXFLAGS+=${DEBUG_FLAGS}
7endif
8
9ifdef NO_SHARED
10ifneq (${NO_SHARED},no)
11ifneq (${NO_SHARED},NO)
12LDFLAGS+= -static
13endif
14endif
15endif
16
17ifdef PROG_CXX
18PROG=   ${PROG_CXX}
19endif
20
21ifndef PROG
22$(error  PROG or PROG_CXX must be defined.)
23endif
24
25ifndef TOPDIR
26$(error TOPDIR must be defined.)
27endif
28
29ifneq ($(shell pkg-config --exists libdpdk && echo 0),0)
30$(error "no installation of DPDK found, maybe you shuld export environment variable `PKG_CONFIG_PATH`")
31endif
32
33ifndef SRCS
34ifdef PROG_CXX
35SRCS=   ${PROG}.cc
36else
37SRCS=   ${PROG}.c
38endif
39endif
40
41PROGDIR= ${TOPDIR}/tools/sbin
42
43HEADERS+= $(filter %.h,${SRCS})
44OBJS+= $(patsubst %.c,%.o, $(filter %.c,${SRCS}))
45OBJS+= $(patsubst %.cc,%.o, $(filter %.cc,${SRCS}))
46
47PKGCONF ?= pkg-config
48
49FF_PROG_CFLAGS:= -g -Wall -Werror -DFSTACK -std=gnu99 $(shell $(PKGCONF) --cflags libdpdk)
50FF_PROG_CFLAGS+= -I${TOPDIR}/lib -I${TOPDIR}/tools/compat
51FF_PROG_CFLAGS+= -include${TOPDIR}/tools/compat/compat.h
52FF_PROG_CFLAGS+= -I${TOPDIR}/tools/compat/include -D__BSD_VISIBLE
53FF_PROG_CFLAGS+= -I${TOPDIR}/tools/libxo
54
55FF_PROG_LIBS:= -L${TOPDIR}/tools/compat -Wl,--whole-archive,-lffcompat,--no-whole-archive
56FF_PROG_LIBS+= $(shell $(PKGCONF) --static --libs libdpdk)
57FF_PROG_LIBS+= -Wl,--no-whole-archive -lrt -lm -ldl -lcrypto -lpthread -lnuma
58
59CFLAGS+= -Wno-unused-but-set-variable -Wno-unused-variable
60CFLAGS+= ${FF_PROG_CFLAGS}
61CXXFLAGS+= ${FF_PROG_CFLAGS}
62
63CFLAGS+= $(foreach n,${LIBADD},-I${TOPDIR}/tools/lib${n})
64LIBS+= $(foreach n,${LIBADD},-L${TOPDIR}/tools/lib${n} -l${n})
65
66LIBS+= ${FF_PROG_LIBS}
67
68CLEANFILES+= ${PROGDIR}/${PROG} ${OBJS}
69
70${PROG}: ${HEADERS} ${OBJS}
71ifdef PROG_CXX
72	${CXX} ${CXXFLAGS} ${LDFLAGS} -o ${PROGDIR}/${PROG} ${OBJS} ${LIBS}
73else
74	${CC} ${CFLAGS} ${LDFLAGS} -o ${PROGDIR}/${PROG} ${OBJS} ${LIBS}
75endif
76
77clean:
78	@rm -f ${CLEANFILES}
79
80all: ${PROG}
81