xref: /f-stack/lib/Makefile (revision a9643ea8)
1*a9643ea8Slogwang#
2*a9643ea8Slogwang# Copyright (c) 2013 Patrick Kelsey. All rights reserved.
3*a9643ea8Slogwang# Copyright (C) 2017 THL A29 Limited, a Tencent company.
4*a9643ea8Slogwang# All rights reserved.
5*a9643ea8Slogwang#
6*a9643ea8Slogwang# Derived in part from libuinet's Makefile.
7*a9643ea8Slogwang#
8*a9643ea8Slogwang# Derived from FreeBSD auto-generated kernel Makefile and
9*a9643ea8Slogwang# machine-specific Makefile templates
10*a9643ea8Slogwang#
11*a9643ea8Slogwang
12*a9643ea8SlogwangTOPDIR?=${CURDIR}/..
13*a9643ea8SlogwangS=${TOPDIR}/freebsd
14*a9643ea8SlogwangMACHINE_INCLUDES_ROOT:=${CURDIR}/machine_include
15*a9643ea8SlogwangOVERRIDE_INCLUDES_ROOT:=${CURDIR}/include
16*a9643ea8SlogwangX86_INCLUDES=0
17*a9643ea8Slogwang
18*a9643ea8SlogwangHOST_OS:=$(shell uname -s)
19*a9643ea8SlogwangDEBUG=-O0 -gdwarf-2 -g3
20*a9643ea8Slogwang
21*a9643ea8Slogwangifeq ($(FF_DPDK),)
22*a9643ea8Slogwang    FF_DPDK=${TOPDIR}/dpdk/x86_64-native-linuxapp-gcc
23*a9643ea8Slogwangendif
24*a9643ea8Slogwang
25*a9643ea8SlogwangDPDK_CFLAGS= -Wall -Werror -include ${FF_DPDK}/include/rte_config.h
26*a9643ea8SlogwangDPDK_CFLAGS+= -march=native -DRTE_MACHINE_CPUFLAG_SSE -DRTE_MACHINE_CPUFLAG_SSE2 -DRTE_MACHINE_CPUFLAG_SSE3
27*a9643ea8SlogwangDPDK_CFLAGS+= -DRTE_MACHINE_CPUFLAG_SSSE3 -DRTE_MACHINE_CPUFLAG_SSE4_1 -DRTE_MACHINE_CPUFLAG_SSE4_2
28*a9643ea8SlogwangDPDK_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
29*a9643ea8SlogwangDPDK_CFLAGS+= -I${FF_DPDK}/include
30*a9643ea8Slogwang
31*a9643ea8Slogwanginclude ${TOPDIR}/mk/kern.pre.mk
32*a9643ea8Slogwang
33*a9643ea8SlogwangKERNPREINCLUDES:= ${INCLUDES}
34*a9643ea8SlogwangINCLUDES= -I${OVERRIDE_INCLUDES_ROOT} ${KERNPREINCLUDES}
35*a9643ea8SlogwangINCLUDES+= -I./machine_include
36*a9643ea8SlogwangINCLUDES+= -I./opt
37*a9643ea8Slogwang
38*a9643ea8Slogwang# Include search path for files that only include host OS headers
39*a9643ea8SlogwangHOST_INCLUDES= -I.
40*a9643ea8Slogwangifndef DEBUG
41*a9643ea8SlogwangHOST_CFLAGS = -O2 -frename-registers  -funswitch-loops -fweb
42*a9643ea8Slogwangelse
43*a9643ea8SlogwangHOST_CFLAGS = ${DEBUG}
44*a9643ea8Slogwangendif
45*a9643ea8SlogwangHOST_CFLAGS+= ${DPDK_CFLAGS}
46*a9643ea8SlogwangHOST_C= ${CC} -c $(HOST_CFLAGS) ${HOST_INCLUDES} ${WERROR} ${PROF} $<
47*a9643ea8Slogwang
48*a9643ea8Slogwang
49*a9643ea8Slogwangifneq ($(filter amd64 i386,${MACHINE_CPUARCH}),)
50*a9643ea8SlogwangX86_INCLUDES=1
51*a9643ea8Slogwangendif
52*a9643ea8Slogwang
53*a9643ea8Slogwang
54*a9643ea8Slogwang#
55*a9643ea8Slogwang# Distilled from FreeBSD src/sys/conf/Makefile.amd64
56*a9643ea8Slogwang#
57*a9643ea8Slogwangifeq (${MACHINE_CPUARCH},amd64)
58*a9643ea8Slogwangendif
59*a9643ea8Slogwang
60*a9643ea8Slogwang#
61*a9643ea8Slogwang# Distilled from FreeBSD src/sys/conf/Makefile.arm
62*a9643ea8Slogwang#
63*a9643ea8Slogwangifeq (${MACHINE_CPUARCH},arm)
64*a9643ea8Slogwang
65*a9643ea8Slogwangifneq (${COMPILER_TYPE},clang)
66*a9643ea8SlogwangCFLAGS += -mno-thumb-interwork
67*a9643ea8Slogwangendif
68*a9643ea8Slogwang
69*a9643ea8Slogwangendif
70*a9643ea8Slogwang
71*a9643ea8Slogwang
72*a9643ea8Slogwang#
73*a9643ea8Slogwang# Distilled from FreeBSD src/sys/conf/Makefile.i386
74*a9643ea8Slogwang#
75*a9643ea8Slogwangifeq (${MACHINE_CPUARCH},i386)
76*a9643ea8SlogwangMACHINE=i386
77*a9643ea8Slogwangendif
78*a9643ea8Slogwang
79*a9643ea8Slogwang
80*a9643ea8Slogwang#
81*a9643ea8Slogwang# Distilled from FreeBSD src/sys/conf/Makefile.mips
82*a9643ea8Slogwang#
83*a9643ea8Slogwangifeq (${MACHINE_CPUARCH},mips)
84*a9643ea8Slogwang
85*a9643ea8Slogwang# We default to the MIPS32 ISA, if none specified in the
86*a9643ea8Slogwang# kernel configuration file.
87*a9643ea8SlogwangARCH_FLAGS?=-march=mips32
88*a9643ea8Slogwang
89*a9643ea8SlogwangHACK_EXTRA_FLAGS=-shared
90*a9643ea8Slogwang
91*a9643ea8SlogwangCFLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
92*a9643ea8SlogwangHACK_EXTRA_FLAGS+=${EXTRA_FLAGS} $(ARCH_FLAGS)
93*a9643ea8Slogwangendif
94*a9643ea8Slogwang
95*a9643ea8SlogwangCFLAGS+= -DFSTACK
96*a9643ea8Slogwang
97*a9643ea8SlogwangVPATH+= $S/${MACHINE_CPUARCH}/${MACHINE_CPUARCH}
98*a9643ea8SlogwangVPATH+= $S/kern
99*a9643ea8SlogwangVPATH+= $S/crypto
100*a9643ea8SlogwangVPATH+= $S/crypto/aesni
101*a9643ea8SlogwangVPATH+= $S/crypto/blowfish
102*a9643ea8SlogwangVPATH+= $S/crypto/camellia
103*a9643ea8SlogwangVPATH+= $S/crypto/des
104*a9643ea8SlogwangVPATH+= $S/crypto/rijndael
105*a9643ea8SlogwangVPATH+= $S/crypto/sha2
106*a9643ea8SlogwangVPATH+= $S/crypto/siphash
107*a9643ea8SlogwangVPATH+= $S/net
108*a9643ea8SlogwangVPATH+= $S/netinet
109*a9643ea8SlogwangVPATH+= $S/netinet/cc
110*a9643ea8SlogwangVPATH+= $S/netipsec
111*a9643ea8SlogwangVPATH+= $S/opencrypto
112*a9643ea8SlogwangVPATH+= $S/vm
113*a9643ea8SlogwangVPATH+= $S/libkern
114*a9643ea8Slogwang
115*a9643ea8Slogwang
116*a9643ea8SlogwangFF_SRCS+=			\
117*a9643ea8Slogwang	ff_compat.c    \
118*a9643ea8Slogwang	ff_glue.c      \
119*a9643ea8Slogwang	ff_freebsd_init.c      \
120*a9643ea8Slogwang	ff_init_main.c \
121*a9643ea8Slogwang	ff_kern_condvar.c \
122*a9643ea8Slogwang	ff_kern_environment.c  \
123*a9643ea8Slogwang	ff_kern_intr.c  \
124*a9643ea8Slogwang	ff_kern_subr.c \
125*a9643ea8Slogwang	ff_kern_synch.c \
126*a9643ea8Slogwang	ff_kern_timeout.c \
127*a9643ea8Slogwang	ff_lock.c      \
128*a9643ea8Slogwang	ff_syscall_wrapper.c \
129*a9643ea8Slogwang	ff_subr_prf.c    \
130*a9643ea8Slogwang	ff_vfs_ops.c  \
131*a9643ea8Slogwang	ff_veth.c  \
132*a9643ea8Slogwang	ff_epoll.c
133*a9643ea8Slogwang
134*a9643ea8SlogwangFF_HOST_SRCS+= \
135*a9643ea8Slogwang	ff_host_interface.c \
136*a9643ea8Slogwang	ff_config.c    \
137*a9643ea8Slogwang	ff_ini_parser.c  \
138*a9643ea8Slogwang	ff_dpdk_if.c \
139*a9643ea8Slogwang	ff_dpdk_kni.c \
140*a9643ea8Slogwang	ff_dpdk_pcap.c \
141*a9643ea8Slogwang	ff_init.c
142*a9643ea8Slogwang
143*a9643ea8Slogwangifdef FF_IPSEC
144*a9643ea8SlogwangCRYPTO_ASM_SRCS+=			\
145*a9643ea8Slogwang	aesencdec_${MACHINE_CPUARCH}.S	\
146*a9643ea8Slogwang	aeskeys_${MACHINE_CPUARCH}.S
147*a9643ea8Slogwang
148*a9643ea8SlogwangCRYPTO_SRCS+=			\
149*a9643ea8Slogwang	aesni.c			\
150*a9643ea8Slogwang	aesni_wrap.c		\
151*a9643ea8Slogwang	bf_ecb.c		\
152*a9643ea8Slogwang	bf_enc.c		\
153*a9643ea8Slogwang	bf_skey.c		\
154*a9643ea8Slogwang	camellia.c		\
155*a9643ea8Slogwang	camellia-api.c		\
156*a9643ea8Slogwang	des_ecb.c		\
157*a9643ea8Slogwang	des_enc.c		\
158*a9643ea8Slogwang	des_setkey.c		\
159*a9643ea8Slogwang	rijndael-alg-fst.c	\
160*a9643ea8Slogwang	rijndael-api.c		\
161*a9643ea8Slogwang	sha1.c			    \
162*a9643ea8Slogwang	sha256c.c           \
163*a9643ea8Slogwang	sha512c.c           \
164*a9643ea8Slogwang	siphash.c
165*a9643ea8Slogwangelse
166*a9643ea8SlogwangCRYPTO_SRCS+=			\
167*a9643ea8Slogwang	sha1.c              \
168*a9643ea8Slogwang	siphash.c
169*a9643ea8Slogwangendif
170*a9643ea8Slogwang
171*a9643ea8SlogwangKERN_SRCS+=			\
172*a9643ea8Slogwang	kern_descrip.c		\
173*a9643ea8Slogwang	kern_event.c		\
174*a9643ea8Slogwang	kern_fail.c		\
175*a9643ea8Slogwang	kern_khelp.c		\
176*a9643ea8Slogwang	kern_hhook.c		\
177*a9643ea8Slogwang	kern_linker.c		\
178*a9643ea8Slogwang	kern_mbuf.c		\
179*a9643ea8Slogwang	kern_module.c		\
180*a9643ea8Slogwang	kern_mtxpool.c		\
181*a9643ea8Slogwang	kern_ntptime.c		\
182*a9643ea8Slogwang	kern_osd.c		\
183*a9643ea8Slogwang	kern_sysctl.c		\
184*a9643ea8Slogwang	kern_tc.c		\
185*a9643ea8Slogwang	kern_uuid.c		\
186*a9643ea8Slogwang	link_elf.c		\
187*a9643ea8Slogwang	md5c.c			\
188*a9643ea8Slogwang	subr_capability.c   \
189*a9643ea8Slogwang	subr_counter.c      \
190*a9643ea8Slogwang	subr_eventhandler.c	\
191*a9643ea8Slogwang	subr_kobj.c		\
192*a9643ea8Slogwang	subr_lock.c		\
193*a9643ea8Slogwang	subr_module.c		\
194*a9643ea8Slogwang	subr_param.c		\
195*a9643ea8Slogwang	subr_pcpu.c		\
196*a9643ea8Slogwang	subr_sbuf.c		\
197*a9643ea8Slogwang	subr_taskqueue.c	\
198*a9643ea8Slogwang	subr_unit.c		\
199*a9643ea8Slogwang	sys_capability.c	\
200*a9643ea8Slogwang	sys_generic.c		\
201*a9643ea8Slogwang	sys_socket.c		\
202*a9643ea8Slogwang	uipc_accf.c		\
203*a9643ea8Slogwang	uipc_mbuf.c		\
204*a9643ea8Slogwang	uipc_mbuf2.c		\
205*a9643ea8Slogwang	uipc_domain.c		\
206*a9643ea8Slogwang	uipc_sockbuf.c		\
207*a9643ea8Slogwang	uipc_socket.c       \
208*a9643ea8Slogwang    uipc_syscalls.c
209*a9643ea8Slogwang
210*a9643ea8Slogwang
211*a9643ea8SlogwangKERN_MHEADERS+=		\
212*a9643ea8Slogwang	bus_if.m	\
213*a9643ea8Slogwang	device_if.m	\
214*a9643ea8Slogwang	linker_if.m
215*a9643ea8Slogwang
216*a9643ea8Slogwang
217*a9643ea8SlogwangKERN_MSRCS+=		\
218*a9643ea8Slogwang	linker_if.m
219*a9643ea8Slogwang
220*a9643ea8Slogwang
221*a9643ea8SlogwangLIBKERN_SRCS+=		\
222*a9643ea8Slogwang	bcd.c		\
223*a9643ea8Slogwang	inet_ntoa.c	\
224*a9643ea8Slogwang	jenkins_hash.c  \
225*a9643ea8Slogwang	strlcpy.c	\
226*a9643ea8Slogwang	strnlen.c
227*a9643ea8Slogwang
228*a9643ea8Slogwang
229*a9643ea8SlogwangMACHINE_SRCS+=		\
230*a9643ea8Slogwang	in_cksum.c
231*a9643ea8Slogwang
232*a9643ea8Slogwang
233*a9643ea8SlogwangNET_SRCS+=		\
234*a9643ea8Slogwang	bpf.c		\
235*a9643ea8Slogwang	if.c		\
236*a9643ea8Slogwang	if_clone.c	\
237*a9643ea8Slogwang	if_dead.c	\
238*a9643ea8Slogwang	if_ethersubr.c	\
239*a9643ea8Slogwang	if_loop.c	\
240*a9643ea8Slogwang	if_llatbl.c	\
241*a9643ea8Slogwang	in_fib.c	\
242*a9643ea8Slogwang 	ip_reass.c	\
243*a9643ea8Slogwang	netisr.c	\
244*a9643ea8Slogwang	pfil.c		\
245*a9643ea8Slogwang	radix.c		\
246*a9643ea8Slogwang	raw_cb.c	\
247*a9643ea8Slogwang	raw_usrreq.c	\
248*a9643ea8Slogwang	route.c		\
249*a9643ea8Slogwang	rtsock.c
250*a9643ea8Slogwang
251*a9643ea8Slogwang
252*a9643ea8SlogwangNETINET_SRCS+=		\
253*a9643ea8Slogwang	ip_carp.c	\
254*a9643ea8Slogwang	if_ether.c	\
255*a9643ea8Slogwang	igmp.c		\
256*a9643ea8Slogwang	in.c		\
257*a9643ea8Slogwang	in_mcast.c	\
258*a9643ea8Slogwang	in_pcb.c	\
259*a9643ea8Slogwang	in_proto.c	\
260*a9643ea8Slogwang	in_rmx.c	\
261*a9643ea8Slogwang	ip_encap.c	\
262*a9643ea8Slogwang	ip_fastfwd.c	\
263*a9643ea8Slogwang	ip_icmp.c	\
264*a9643ea8Slogwang	ip_id.c		\
265*a9643ea8Slogwang	ip_input.c	\
266*a9643ea8Slogwang	ip_options.c	\
267*a9643ea8Slogwang	ip_output.c	\
268*a9643ea8Slogwang	raw_ip.c	\
269*a9643ea8Slogwang	tcp_debug.c	\
270*a9643ea8Slogwang	tcp_fastopen.c	\
271*a9643ea8Slogwang	tcp_hostcache.c	\
272*a9643ea8Slogwang	tcp_input.c	\
273*a9643ea8Slogwang	tcp_lro.c	\
274*a9643ea8Slogwang	tcp_offload.c	\
275*a9643ea8Slogwang	tcp_output.c	\
276*a9643ea8Slogwang	tcp_reass.c	\
277*a9643ea8Slogwang	tcp_sack.c	\
278*a9643ea8Slogwang	tcp_subr.c	\
279*a9643ea8Slogwang	tcp_syncache.c	\
280*a9643ea8Slogwang	tcp_timer.c	\
281*a9643ea8Slogwang	tcp_timewait.c	\
282*a9643ea8Slogwang	tcp_usrreq.c	\
283*a9643ea8Slogwang	udp_usrreq.c	\
284*a9643ea8Slogwang	cc.c		    \
285*a9643ea8Slogwang	cc_newreno.c    \
286*a9643ea8Slogwang	cc_htcp.c       \
287*a9643ea8Slogwang	cc_cubic.c
288*a9643ea8Slogwang
289*a9643ea8Slogwangifdef FF_IPSEC
290*a9643ea8SlogwangNETINET_SRCS+=		\
291*a9643ea8Slogwang	ip_ipsec.c
292*a9643ea8Slogwangendif
293*a9643ea8Slogwang
294*a9643ea8Slogwang
295*a9643ea8Slogwangifdef FF_IPSEC
296*a9643ea8SlogwangNETIPSEC_SRCS+=		\
297*a9643ea8Slogwang	ipsec.c		\
298*a9643ea8Slogwang	ipsec_input.c	\
299*a9643ea8Slogwang	ipsec_mbuf.c	\
300*a9643ea8Slogwang	ipsec_output.c	\
301*a9643ea8Slogwang	key.c		\
302*a9643ea8Slogwang	key_debug.c	\
303*a9643ea8Slogwang	keysock.c	\
304*a9643ea8Slogwang	xform_ah.c	\
305*a9643ea8Slogwang	xform_esp.c	\
306*a9643ea8Slogwang	xform_ipcomp.c
307*a9643ea8Slogwangendif
308*a9643ea8Slogwang
309*a9643ea8Slogwang# only if TCP_SIGNTAURE is defined
310*a9643ea8Slogwang#xform_tcp.c
311*a9643ea8Slogwang
312*a9643ea8SlogwangNETINET6_SRCS+=
313*a9643ea8Slogwang
314*a9643ea8Slogwang
315*a9643ea8Slogwangifdef FF_IPSEC
316*a9643ea8SlogwangOPENCRYPTO_SRCS+=	\
317*a9643ea8Slogwang	cast.c		\
318*a9643ea8Slogwang	criov.c		\
319*a9643ea8Slogwang	crypto.c	\
320*a9643ea8Slogwang	cryptosoft.c	\
321*a9643ea8Slogwang	deflate.c	\
322*a9643ea8Slogwang	rmd160.c	\
323*a9643ea8Slogwang	skipjack.c	\
324*a9643ea8Slogwang	xform.c
325*a9643ea8Slogwangendif
326*a9643ea8Slogwang
327*a9643ea8Slogwang#	cryptodev.c
328*a9643ea8Slogwang
329*a9643ea8SlogwangOPENCRYPTO_MHEADERS= cryptodev_if.m
330*a9643ea8SlogwangOPENCRYPTO_MSRCS= cryptodev_if.m
331*a9643ea8Slogwang
332*a9643ea8SlogwangVM_SRCS+=		\
333*a9643ea8Slogwang	uma_core.c
334*a9643ea8Slogwang
335*a9643ea8Slogwang
336*a9643ea8SlogwangMHEADERS= $(patsubst %.m,%.h,${KERN_MHEADERS})
337*a9643ea8SlogwangMHEADERS+= vnode_if.h vnode_if_newproto.h vnode_if_typedef.h
338*a9643ea8SlogwangMHEADERS+= $(patsubst %.m,%.h,${OPENCRYPTO_MHEADERS})
339*a9643ea8Slogwang
340*a9643ea8SlogwangMSRCS= $(patsubst %.m,%.c,${KERN_MSRCS})
341*a9643ea8SlogwangMSRCS+= $(patsubst %.m,%.c,${OPENCRYPTO_MSRCS})
342*a9643ea8Slogwang
343*a9643ea8SlogwangASM_SRCS = ${CRYPTO_ASM_SRCS}
344*a9643ea8Slogwang
345*a9643ea8SlogwangSRCS=  ${FF_SRCS} ${CRYPTO_SRCS} ${KERN_SRCS} ${LIBKERN_SRCS} ${MACHINE_SRCS}
346*a9643ea8SlogwangSRCS+= ${MSRCS} ${NET_SRCS} ${NETINET_SRCS} ${NETINET6_SRCS} ${NETIPSEC_SRCS} ${OPENCRYPTO_SRCS} ${VM_SRCS}
347*a9643ea8Slogwang
348*a9643ea8Slogwang# If witness is enabled.
349*a9643ea8Slogwang# SRCS+= ${KERN_WITNESS_SRCS}
350*a9643ea8Slogwang
351*a9643ea8SlogwangHOST_SRCS = ${FF_HOST_SRCS}
352*a9643ea8Slogwang
353*a9643ea8SlogwangASM_OBJS+= $(patsubst %.S,%.o,${ASM_SRCS})
354*a9643ea8SlogwangOBJS+= $(patsubst %.c,%.o,${SRCS})
355*a9643ea8SlogwangHOST_OBJS+= $(patsubst %.c,%.o,${HOST_SRCS})
356*a9643ea8Slogwang
357*a9643ea8Slogwangall: libfstack.a
358*a9643ea8Slogwang
359*a9643ea8Slogwang#
360*a9643ea8Slogwang# The library is built by first incrementally linking all the object
361*a9643ea8Slogwang# to resolve internal references.  Then, all symbols are made local.
362*a9643ea8Slogwang# Then, only the symbols that are part of the  API are made
363*a9643ea8Slogwang# externally available.
364*a9643ea8Slogwang#
365*a9643ea8Slogwanglibfstack.a: machine_includes ff_api.symlist ${MHEADERS} ${MSRCS} ${HOST_OBJS} ${ASM_OBJS} ${OBJS}
366*a9643ea8Slogwang	${LD} -r -o $*.ro ${ASM_OBJS} ${OBJS}
367*a9643ea8Slogwang	nm $*.ro  | grep -v ' U ' | cut -d ' ' -f 3 > $*_localize_list.tmp
368*a9643ea8Slogwang	objcopy --localize-symbols=$*_localize_list.tmp $*.ro
369*a9643ea8Slogwang	rm $*_localize_list.tmp
370*a9643ea8Slogwang	objcopy --globalize-symbols=ff_api.symlist $*.ro
371*a9643ea8Slogwang	rm -f $@
372*a9643ea8Slogwang	ar -cqs $@ $*.ro ${HOST_OBJS}
373*a9643ea8Slogwang	rm -f $*.ro
374*a9643ea8Slogwang
375*a9643ea8Slogwang${HOST_OBJS}: %.o: %.c
376*a9643ea8Slogwang	${HOST_C}
377*a9643ea8Slogwang
378*a9643ea8Slogwang${ASM_OBJS}: %.o: %.S ${IMACROS_FILE}
379*a9643ea8Slogwang	${NORMAL_S}
380*a9643ea8Slogwang
381*a9643ea8Slogwang${OBJS}: %.o: %.c ${IMACROS_FILE}
382*a9643ea8Slogwang	${NORMAL_C}
383*a9643ea8Slogwang
384*a9643ea8Slogwang
385*a9643ea8Slogwang.SUFFIXES: .m
386*a9643ea8Slogwang
387*a9643ea8Slogwang.m.c:
388*a9643ea8Slogwang	${AWK} -f $S/tools/makeobjops.awk $< -c
389*a9643ea8Slogwang
390*a9643ea8Slogwang.m.h:
391*a9643ea8Slogwang	${AWK} -f $S/tools/makeobjops.awk $< -h
392*a9643ea8Slogwang
393*a9643ea8Slogwang.PHONY: clean
394*a9643ea8Slogwangclean:
395*a9643ea8Slogwang	rm -f libfstack.a
396*a9643ea8Slogwang	rm -f ${MHEADERS} ${MSRCS} ${HOST_OBJS} ${ASM_OBJS} ${OBJS} ${PROGRAM} ${IMACROS_FILE}
397*a9643ea8Slogwang	rm -rf ${MACHINE_INCLUDES_ROOT}
398*a9643ea8Slogwang
399*a9643ea8Slogwang
400*a9643ea8Slogwang.PHONY: machine_includes
401*a9643ea8Slogwangmachine_includes:
402*a9643ea8Slogwang	@rm -rf ${MACHINE_INCLUDES_ROOT}
403*a9643ea8Slogwang	@mkdir -p ${MACHINE_INCLUDES_ROOT}/machine
404*a9643ea8Slogwang	@cp -r $S/${MACHINE_CPUARCH}/include/* ${MACHINE_INCLUDES_ROOT}/machine
405*a9643ea8Slogwang	@if [ "${X86_INCLUDES}" != "0" ]; then 				\
406*a9643ea8Slogwang		mkdir -p ${MACHINE_INCLUDES_ROOT}/x86;			\
407*a9643ea8Slogwang		cp -r $S/x86/include/* ${MACHINE_INCLUDES_ROOT}/x86;	\
408*a9643ea8Slogwang	fi
409*a9643ea8Slogwang
410*a9643ea8Slogwang#
411*a9643ea8Slogwang# Distilled from FreeBSD src/sys/conf/kern.post.mk
412*a9643ea8Slogwang#
413*a9643ea8Slogwangvnode_if.h vnode_if_newproto.h vnode_if_typedef.h: $S/tools/vnode_if.awk \
414*a9643ea8Slogwang    $S/kern/vnode_if.src
415*a9643ea8Slogwangvnode_if.h: vnode_if_newproto.h vnode_if_typedef.h
416*a9643ea8Slogwang	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -h
417*a9643ea8Slogwangvnode_if_newproto.h:
418*a9643ea8Slogwang	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -p
419*a9643ea8Slogwangvnode_if_typedef.h:
420*a9643ea8Slogwang	${AWK} -f $S/tools/vnode_if.awk $S/kern/vnode_if.src -q
421*a9643ea8Slogwang
422*a9643ea8Slogwanginclude ${TOPDIR}/mk/kern.mk
423*a9643ea8Slogwang
424