1- # wolfssl kernel module name and source, and root dir.
2- KMOD = libwolfssl
3- SRCS = wolfkmod.c
4- WOLFSSL_DIR = ../
1+ # wolfssl kernel module name and main source, and wolfssl root dir.
2+ KMOD = libwolfssl
3+ SRCS = wolfkmod.c
4+ WOLFSSL_DIR = ../
55
6- CFLAGS+ = -I${WOLFSSL_DIR}
7- CFLAGS+ = -DWOLFSSL_IGNORE_FILE_WARN -DHAVE_CONFIG_H -DNO_MAIN_DRIVER
6+ CFLAGS += -I${WOLFSSL_DIR}
7+ CFLAGS += -DWOLFSSL_IGNORE_FILE_WARN -DHAVE_CONFIG_H -DNO_MAIN_DRIVER
88#
99# debug options
1010# verbose printing:
11- # CFLAGS+= -DWOLFSSL_BSDKM_VERBOSE_DEBUG
11+ # CFLAGS += -DWOLFSSL_BSDKM_VERBOSE_DEBUG
1212#
1313# print memory mallocs / frees:
14- # CFLAGS+= -DWOLFSSL_BSDKM_MEMORY_DEBUG
14+ # CFLAGS += -DWOLFSSL_BSDKM_MEMORY_DEBUG
1515#
16- CFLAGS+ =$(AM_CPPFLAGS ) $(CPPFLAGS ) $(AM_CFLAGS )
16+ # print fpu_kern_enter / leave:
17+ # CFLAGS += WOLFSSL_BSDKM_FPU_DEBUG
18+ #
19+ CFLAGS += $(AM_CPPFLAGS ) $(CPPFLAGS ) $(AM_CFLAGS )
20+
21+ .if defined(ENABLED_BSDKM_REGISTER)
22+ # These device header files are generated during build.
23+ SRCS += bus_if.h cryptodev_if.h device_if.h
24+ .endif
1725
1826# FreeBSD make does not support GNU make's patsubst and related. Filter
1927# through sed instead.
2028WOLFSSL_OBJS != echo ${src_libwolfssl_la_OBJECTS} | \
2129 sed 's|src_libwolfssl_la-||g' | sed 's|\.lo|.o|g' | \
2230 sed 's|wolfcrypt/src/|${WOLFSSL_DIR}/wolfcrypt/src/|g'
2331
32+ # wolfcrypt test
2433.if ${ENABLED_CRYPT_TESTS} == "yes"
2534 WOLFSSL_OBJS += ${WOLFSSL_DIR}/wolfcrypt/test/test.o
2635.else
27- CFLAGS+ =-DNO_CRYPT_TEST
36+ CFLAGS += -DNO_CRYPT_TEST
37+ .endif
38+
39+ # wolfcrypt benchmark
40+ .if ${ENABLED_KERNEL_BENCHMARKS} == "yes"
41+ WOLFSSL_OBJS += ${WOLFSSL_DIR}/wolfcrypt/benchmark/benchmark.o
42+ CFLAGS += -DWOLFSSL_NO_FLOAT_FMT
2843.endif
2944
3045OBJS += ${WOLFSSL_OBJS}
3146
3247# Export no public symbols by default.
3348.if !defined(BSDKM_EXPORT_SYMS)
34- EXPORT_SYMS = NO
49+ EXPORT_SYMS = NO
3550.else
36- EXPORT_SYMS = ${BSDKM_EXPORT_SYMS}
51+ EXPORT_SYMS = ${BSDKM_EXPORT_SYMS}
3752.endif
3853
3954# Default to live kernel src tree makefile at
@@ -45,12 +60,52 @@ OBJS += ${WOLFSSL_OBJS}
4560.endif
4661.include "${SYSDIR}/conf/kmod.mk"
4762
63+ #
64+ # To use aesni and friends in FreeBSD kernel we need to adjust build flags.
65+ # See these kernel makefiles for reference:
66+ # - /usr/src/sys/modules/aesni/Makefile
67+ # - /usr/src/sys/conf/kern.mk
68+ #
69+ WOLFKMOD_SIMD_BASE = -msse -msse2 -msse4.1
70+ WOLFKMOD_SIMD_AES = -maes -mpclmul
71+ WOLFKMOD_SIMD_AVX = -mavx -mavx2
72+
73+ .if ${ENABLED_AESNI} == "yes"
74+ CFLAGS.aes.c += ${WOLFKMOD_SIMD_BASE}
75+ CFLAGS.aes.c += ${WOLFKMOD_SIMD_AES}
76+ .if ${ENABLED_AESNI_WITH_AVX} == "yes"
77+ CFLAGS.aes.c += ${WOLFKMOD_SIMD_AVX}
78+ .endif # ENABLED_AESNI_WITH_AVX #
79+ CFLAGS.aes.c := ${CFLAGS.aes.c:N-nostdinc}
80+ CFLAGS.aes.c += -I${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
81+ .PATH : ${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
82+ .endif # ENABLED_AESNI
83+
84+ .if ${ENABLED_ASM} == "yes"
85+ .for f in chacha dilithium poly1305 sha sha256 sha3 sha512
86+ CFLAGS.${f}.c += ${WOLFKMOD_SIMD_BASE}
87+ CFLAGS.${f}.c += ${WOLFKMOD_SIMD_AVX}
88+ CFLAGS.${f}.c := ${CFLAGS.${f}.c:N-nostdinc}
89+ CFLAGS.${f}.c += -I${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
90+ .endfor
91+
92+ .PATH : ${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
93+ .endif # ENABLED_ASM == "yes"
94+
95+ # wolfcrypt benchmark always needs simd for the floating point timings.
96+ .if ${ENABLED_KERNEL_BENCHMARKS} == "yes"
97+ CFLAGS.benchmark.c += ${WOLFKMOD_SIMD_BASE}
98+ CFLAGS.benchmark.c := ${CFLAGS.benchmark.c:N-nostdinc}
99+ CFLAGS.benchmark.c += -I${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
100+ .PATH : ${SYSDIR}/../contrib/llvm-project/clang/lib/Headers
101+ .endif
102+
48103# Smooth out a few inconsistencies between FreeBSD default compiler flags
49104# in /usr/src/sys/conf/kern.mk, vs wolfssl harden flags in
50105# m4/ax_harden_compiler_flags.m4. E.g. some FreeBSD header files shorten
51106# 64 to 32 bit, and some wolfcrypt functions cast away const.
52- CFLAGS+ = -Wno-unused-function
53- CFLAGS+ = -Wno-cast-qual
54- CFLAGS+ = -Wno-error=cast-qual
55- CFLAGS+ = -Wno-shorten-64-to-32
56- CFLAGS+ = -DLIBWOLFSSL_GLOBAL_EXTRA_CFLAGS="\" $(KERNEL_EXTRA_CFLAGS ) \""
107+ CFLAGS += -Wno-unused-function
108+ CFLAGS += -Wno-cast-qual
109+ CFLAGS += -Wno-error=cast-qual
110+ CFLAGS += -Wno-shorten-64-to-32
111+ CFLAGS += -DLIBWOLFSSL_GLOBAL_EXTRA_CFLAGS="\" $(KERNEL_EXTRA_CFLAGS ) \""
0 commit comments