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