xref: /f-stack/lib/Makefile (revision 2bfe3f2e)
1#
2# Copyright (c) 2013 Patrick Kelsey. All rights reserved.
3# Copyright (C) 2017 THL A29 Limited, a Tencent company.
4# All rights reserved.
5#
6# Derived in part from libuinet's Makefile.
7#
8# Derived from FreeBSD auto-generated kernel Makefile and
9# machine-specific Makefile templates
10#
11
12TOPDIR?=${CURDIR}/..
13S=${TOPDIR}/freebsd
14MACHINE_INCLUDES_ROOT:=${CURDIR}/machine_include
15OVERRIDE_INCLUDES_ROOT:=${CURDIR}/include
16X86_INCLUDES=0
17
18HOST_OS:=$(shell uname -s)
19#DEBUG=-O0 -gdwarf-2 -g3
20#FF_NETGRAPH=1
21#FF_IPFW=1
22
23ifeq ($(FF_DPDK),)
24    FF_DPDK=${TOPDIR}/dpdk/x86_64-native-linuxapp-gcc
25endif
26
27DPDK_CFLAGS= -Wall -Werror -include ${FF_DPDK}/include/rte_config.h
28DPDK_CFLAGS+= -march=native -DRTE_MACHINE_CPUFLAG_SSE -DRTE_MACHINE_CPUFLAG_SSE2 -DRTE_MACHINE_CPUFLAG_SSE3
29DPDK_CFLAGS+= -DRTE_MACHINE_CPUFLAG_SSSE3 -DRTE_MACHINE_CPUFLAG_SSE4_1 -DRTE_MACHINE_CPUFLAG_SSE4_2
30DPDK_CFLAGS+= -DRTE_COMPILE_TIME_CPUFLAGS=RTE_CPUFLAG_SSE,RTE_CPUFLAG_SSE2,RTE_CPUFLAG_SSE3,RTE_CPUFLAG_SSSE3,RTE_CPUFLAG_SSE4_1,RTE_CPUFLAG_SSE4_2
31DPDK_CFLAGS+= -I${FF_DPDK}/include
32
33include ${TOPDIR}/mk/kern.pre.mk
34
35KERNPREINCLUDES:= ${INCLUDES}
36INCLUDES= -I${OVERRIDE_INCLUDES_ROOT} ${KERNPREINCLUDES}
37INCLUDES+= -I./machine_include
38INCLUDES+= -I./opt
39
40# Include search path for files that only include host OS headers
41HOST_INCLUDES= -I.
42ifndef DEBUG
43HOST_CFLAGS = -O2 -frename-registers  -funswitch-loops -fweb
44else
45HOST_CFLAGS = ${DEBUG}
46endif
47
48HOST_CFLAGS+= ${DPDK_CFLAGS}
49HOST_CFLAGS+= ${CONF_CFLAGS}
50
51ifdef FF_NETGRAPH
52HOST_CFLAGS+= -DFF_NETGRAPH
53endif
54
55ifdef FF_IPFW
56HOST_CFLAGS+= -DFF_IPFW
57endif
58
59HOST_C= ${CC} -c $(HOST_CFLAGS) ${HOST_INCLUDES} ${WERROR} ${PROF} $<
60
61
62ifneq ($(filter amd64 i386,${MACHINE_CPUARCH}),)
63X86_INCLUDES=1
64endif
65
66
67#
68# Distilled from FreeBSD src/sys/conf/Makefile.amd64
69#
70ifeq (${MACHINE_CPUARCH},amd64)
71endif
72
73#
74# Distilled from FreeBSD src/sys/conf/Makefile.arm
75#
76ifeq (${MACHINE_CPUARCH},arm)
77
78ifneq (${COMPILER_TYPE},clang)
79CFLAGS += -mno-thumb-interwork
80endif
81
82endif
83
84
85#
86# Distilled from FreeBSD src/sys/conf/Makefile.i386
87#
88ifeq (${MACHINE_CPUARCH},i386)
89MACHINE=i386
90endif
91
92
93#
94# Distilled from FreeBSD src/sys/conf/Makefile.mips
95#
96ifeq (${MACHINE_CPUARCH},mips)
97
98# We default to the MIPS32 ISA, if none specified in the
99# kernel configuration file.
100ARCH_FLAGS?=-march=mips32
101
102HACK_EXTRA_FLAGS=-shared
103
104CFLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
105HACK_EXTRA_FLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
106endif
107
108CFLAGS+= -DFSTACK
109
110# add for LVS tcp option toa, disabled by default
111# CFLAGS+= -DLVS_TCPOPT_TOA
112
113VPATH+= $S/${MACHINE_CPUARCH}/${MACHINE_CPUARCH}
114VPATH+= $S/kern
115VPATH+= $S/crypto
116VPATH+= $S/crypto/aesni
117VPATH+= $S/crypto/blowfish
118VPATH+= $S/crypto/camellia
119VPATH+= $S/crypto/des
120VPATH+= $S/crypto/rijndael
121VPATH+= $S/crypto/sha2
122VPATH+= $S/crypto/siphash
123VPATH+= $S/net
124ifdef FF_NETGRAPH
125VPATH+= $S/netgraph
126endif
127VPATH+= $S/netinet
128VPATH+= $S/netinet/libalias
129VPATH+= $S/netinet/cc
130VPATH+= $S/netipsec
131ifdef FF_IPFW
132VPATH+= $S/netpfil/ipfw
133endif
134VPATH+= $S/opencrypto
135VPATH+= $S/vm
136VPATH+= $S/libkern
137
138
139FF_SRCS+=                     \
140	ff_compat.c           \
141	ff_glue.c             \
142	ff_freebsd_init.c     \
143	ff_init_main.c        \
144	ff_kern_condvar.c     \
145	ff_kern_environment.c \
146	ff_kern_intr.c        \
147	ff_kern_subr.c        \
148	ff_kern_synch.c       \
149	ff_kern_timeout.c     \
150	ff_lock.c             \
151	ff_syscall_wrapper.c  \
152	ff_subr_prf.c         \
153	ff_vfs_ops.c          \
154	ff_veth.c             \
155	ff_route.c
156
157ifdef FF_NETGRAPH
158FF_SRCS+=                   \
159        ff_ng_base.c        \
160        ff_ngctl.c
161endif
162
163FF_HOST_SRCS+=              \
164	ff_host_interface.c \
165	ff_config.c         \
166	ff_ini_parser.c     \
167	ff_dpdk_if.c        \
168	ff_dpdk_kni.c       \
169	ff_dpdk_pcap.c      \
170	ff_epoll.c          \
171	ff_init.c
172
173ifdef FF_IPSEC
174CRYPTO_ASM_SRCS+=                       \
175	aesencdec_${MACHINE_CPUARCH}.S  \
176	aeskeys_${MACHINE_CPUARCH}.S
177
178CRYPTO_SRCS+=               \
179	aesni.c	            \
180	aesni_wrap.c        \
181	bf_ecb.c            \
182	bf_enc.c            \
183	bf_skey.c           \
184	camellia.c          \
185	camellia-api.c      \
186	des_ecb.c           \
187	des_enc.c           \
188	des_setkey.c        \
189	rijndael-alg-fst.c  \
190	rijndael-api.c      \
191	sha1.c              \
192	sha256c.c           \
193	sha512c.c           \
194	siphash.c
195else
196CRYPTO_SRCS+=               \
197	sha1.c              \
198	siphash.c
199endif
200
201KERN_SRCS+=                 \
202	kern_descrip.c      \
203	kern_event.c        \
204	kern_fail.c         \
205	kern_khelp.c        \
206	kern_hhook.c        \
207	kern_linker.c       \
208	kern_mbuf.c         \
209	kern_module.c       \
210	kern_mtxpool.c      \
211	kern_ntptime.c      \
212	kern_osd.c          \
213	kern_sysctl.c       \
214	kern_tc.c           \
215	kern_uuid.c         \
216	link_elf.c          \
217	md5c.c              \
218	subr_capability.c   \
219	subr_counter.c      \
220	subr_eventhandler.c \
221	subr_kobj.c         \
222	subr_lock.c         \
223	subr_module.c       \
224	subr_param.c        \
225	subr_pcpu.c         \
226	subr_sbuf.c         \
227	subr_taskqueue.c    \
228	subr_unit.c         \
229	sys_capability.c    \
230	sys_generic.c       \
231	sys_socket.c        \
232	uipc_accf.c         \
233	uipc_mbuf.c         \
234	uipc_mbuf2.c        \
235	uipc_domain.c       \
236	uipc_sockbuf.c      \
237	uipc_socket.c       \
238	uipc_syscalls.c
239
240
241KERN_MHEADERS+=		\
242	bus_if.m	\
243	device_if.m	\
244	linker_if.m
245
246
247KERN_MSRCS+=		\
248	linker_if.m
249
250
251LIBKERN_SRCS+=		 \
252	bcd.c		 \
253	crc32.c          \
254	inet_ntoa.c	 \
255	jenkins_hash.c   \
256	strlcpy.c	 \
257	strnlen.c        \
258	zlib.c
259
260
261MACHINE_SRCS+=		 \
262	in_cksum.c
263
264
265NET_SRCS+=		 \
266	bpf.c		 \
267	bridgestp.c      \
268	if.c		 \
269	if_bridge.c      \
270	if_clone.c	 \
271	if_dead.c	 \
272	if_ethersubr.c	 \
273	if_loop.c	 \
274	if_llatbl.c	 \
275	if_media.c       \
276	if_spppfr.c      \
277	if_spppsubr.c    \
278	if_vlan.c        \
279	if_vxlan.c       \
280	in_fib.c	 \
281	in_gif.c         \
282	ip_reass.c	 \
283	netisr.c	 \
284	pfil.c		 \
285	radix.c		 \
286	raw_cb.c	 \
287	raw_usrreq.c	 \
288	route.c		 \
289	rtsock.c         \
290	slcompress.c
291
292ifdef FF_NETGRAPH
293NETGRAPH_SRCS +=         \
294	ng_async.c       \
295	ng_atmllc.c      \
296	ng_bridge.c      \
297	ng_car.c         \
298	ng_cisco.c       \
299	ng_deflate.c     \
300	ng_echo.c        \
301	ng_eiface.c      \
302	ng_etf.c         \
303	ng_ether.c       \
304	ng_ether_echo.c  \
305	ng_frame_relay.c \
306	ng_gif.c         \
307	ng_gif_demux.c   \
308	ng_hole.c        \
309	ng_hub.c         \
310	ng_iface.c       \
311	ng_ip_input.c    \
312	ng_ipfw.c        \
313	ng_ksocket.c     \
314	ng_l2tp.c        \
315	ng_lmi.c         \
316	ng_nat.c         \
317	ng_one2many.c    \
318	ng_parse.c       \
319	ng_patch.c       \
320	ng_pipe.c        \
321	ng_ppp.c         \
322	ng_pppoe.c       \
323	ng_pptpgre.c     \
324	ng_pred1.c       \
325	ng_rfc1490.c     \
326	ng_sample.c      \
327	ng_socket.c      \
328	ng_source.c      \
329	ng_split.c       \
330	ng_sppp.c        \
331	ng_tag.c         \
332	ng_tcpmss.c      \
333	ng_tee.c         \
334	ng_UI.c          \
335	ng_vjc.c         \
336	ng_vlan.c
337endif
338
339NETINET_SRCS+=		\
340	if_ether.c	\
341	if_gif.c        \
342	igmp.c		\
343	in.c		\
344	in_mcast.c	\
345	in_pcb.c	\
346	in_proto.c	\
347	in_rmx.c	\
348	ip_carp.c	\
349	ip_divert.c     \
350	ip_ecn.c        \
351	ip_encap.c	\
352	ip_fastfwd.c	\
353	ip_icmp.c	\
354	ip_id.c		\
355	ip_input.c	\
356	ip_mroute.c     \
357	ip_options.c	\
358	ip_output.c	\
359	raw_ip.c	\
360	tcp_debug.c	\
361	tcp_fastopen.c	\
362	tcp_hostcache.c	\
363	tcp_input.c	\
364	tcp_lro.c	\
365	tcp_offload.c	\
366	tcp_output.c	\
367	tcp_reass.c	\
368	tcp_sack.c	\
369	tcp_subr.c	\
370	tcp_syncache.c	\
371	tcp_timer.c	\
372	tcp_timewait.c	\
373	tcp_usrreq.c	\
374	udp_usrreq.c	\
375	cc.c		\
376	cc_newreno.c    \
377	cc_htcp.c       \
378	cc_cubic.c      \
379	alias.c         \
380	alias_db.c      \
381	alias_mod.c     \
382	alias_proxy.c   \
383	alias_sctp.c    \
384	alias_util.c
385
386ifdef FF_IPFW
387NETIPFW_SRCS+=             \
388	ip_fw_dynamic.c \
389	ip_fw_eaction.c \
390	ip_fw_iface.c   \
391	ip_fw_log.c     \
392	ip_fw_nat.c     \
393	ip_fw_pfil.c    \
394	ip_fw_sockopt.c \
395	ip_fw_table.c   \
396	ip_fw_table_algo.c  \
397	ip_fw_table_value.c \
398	ip_fw2.c
399endif
400
401ifdef FF_IPSEC
402NETINET_SRCS+=		\
403	ip_ipsec.c
404endif
405
406
407ifdef FF_IPSEC
408NETIPSEC_SRCS+=		\
409	ipsec.c		\
410	ipsec_input.c	\
411	ipsec_mbuf.c	\
412	ipsec_output.c	\
413	key.c		\
414	key_debug.c	\
415	keysock.c	\
416	xform_ah.c	\
417	xform_esp.c	\
418	xform_ipcomp.c
419endif
420
421# only if TCP_SIGNTAURE is defined
422#xform_tcp.c
423
424NETINET6_SRCS+=
425
426
427ifdef FF_IPSEC
428OPENCRYPTO_SRCS+=	\
429	cast.c		\
430	criov.c		\
431	crypto.c	\
432	cryptosoft.c	\
433	deflate.c	\
434	rmd160.c	\
435	skipjack.c	\
436	xform.c
437endif
438
439#	cryptodev.c
440
441OPENCRYPTO_MHEADERS= cryptodev_if.m
442OPENCRYPTO_MSRCS= cryptodev_if.m
443
444VM_SRCS+=		\
445	uma_core.c
446
447
448MHEADERS= $(patsubst %.m,%.h,${KERN_MHEADERS})
449MHEADERS+= vnode_if.h vnode_if_newproto.h vnode_if_typedef.h
450MHEADERS+= $(patsubst %.m,%.h,${OPENCRYPTO_MHEADERS})
451
452MSRCS= $(patsubst %.m,%.c,${KERN_MSRCS})
453MSRCS+= $(patsubst %.m,%.c,${OPENCRYPTO_MSRCS})
454
455ASM_SRCS = ${CRYPTO_ASM_SRCS}
456
457SRCS=  ${FF_SRCS} ${CRYPTO_SRCS} ${KERN_SRCS} ${LIBKERN_SRCS} ${MACHINE_SRCS}
458SRCS+= ${MSRCS} ${NET_SRCS} ${NETGRAPH_SRCS} ${NETINET_SRCS} ${NETINET6_SRCS}
459SRCS+= ${NETIPSEC_SRCS} ${NETIPFW_SRCS} ${OPENCRYPTO_SRCS} ${VM_SRCS}
460
461# If witness is enabled.
462# SRCS+= ${KERN_WITNESS_SRCS}
463
464# Extra FreeBSD kernel module srcs.
465SRCS+= ${KMOD_SRCS}
466
467HOST_SRCS = ${FF_HOST_SRCS}
468
469ASM_OBJS+= $(patsubst %.S,%.o,${ASM_SRCS})
470OBJS+= $(patsubst %.c,%.o,${SRCS})
471HOST_OBJS+= $(patsubst %.c,%.o,${HOST_SRCS})
472
473all: libfstack.a
474
475#
476# The library is built by first incrementally linking all the object
477# to resolve internal references.  Then, all symbols are made local.
478# Then, only the symbols that are part of the  API are made
479# externally available.
480#
481libfstack.a: machine_includes ff_api.symlist ${MHEADERS} ${MSRCS} ${HOST_OBJS} ${ASM_OBJS} ${OBJS}
482	${LD} -d -r -o $*.ro ${ASM_OBJS} ${OBJS}
483	nm $*.ro  | grep -v ' U ' | cut -d ' ' -f 3 > $*_localize_list.tmp
484	objcopy --localize-symbols=$*_localize_list.tmp $*.ro
485	rm $*_localize_list.tmp
486	objcopy --globalize-symbols=ff_api.symlist $*.ro
487	rm -f $@
488	ar -cqs $@ $*.ro ${HOST_OBJS}
489	rm -f $*.ro
490
491${HOST_OBJS}: %.o: %.c
492	${HOST_C}
493
494${ASM_OBJS}: %.o: %.S ${IMACROS_FILE}
495	${NORMAL_S}
496
497${OBJS}: %.o: %.c ${IMACROS_FILE}
498	${NORMAL_C}
499
500
501.SUFFIXES: .m
502
503.m.c:
504	${AWK} -f $S/tools/makeobjops.awk $< -c
505
506.m.h:
507	${AWK} -f $S/tools/makeobjops.awk $< -h
508
509.PHONY: clean
510clean:
511	rm -f libfstack.a
512	rm -f ${MHEADERS} ${MSRCS} ${HOST_OBJS} ${ASM_OBJS} ${OBJS} ${PROGRAM} ${IMACROS_FILE}
513	rm -rf ${MACHINE_INCLUDES_ROOT}
514
515
516.PHONY: machine_includes
517machine_includes:
518	@rm -rf ${MACHINE_INCLUDES_ROOT}
519	@mkdir -p ${MACHINE_INCLUDES_ROOT}/machine
520	@cp -r $S/${MACHINE_CPUARCH}/include/* ${MACHINE_INCLUDES_ROOT}/machine
521	@if [ "${X86_INCLUDES}" != "0" ]; then 				\
522		mkdir -p ${MACHINE_INCLUDES_ROOT}/x86;			\
523		cp -r $S/x86/include/* ${MACHINE_INCLUDES_ROOT}/x86;	\
524	fi
525
526#
527# Distilled from FreeBSD src/sys/conf/kern.post.mk
528#
529vnode_if.h vnode_if_newproto.h vnode_if_typedef.h: $S/tools/vnode_if.awk \
530    $S/kern/vnode_if.src
531vnode_if.h: vnode_if_newproto.h vnode_if_typedef.h
532	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h
533vnode_if_newproto.h:
534	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p
535vnode_if_typedef.h:
536	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q
537
538include ${TOPDIR}/mk/kern.mk
539
540