From 19fcec84d8d7d21e796c7624e521b60d28ee21ed Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 20:45:59 +0200 Subject: Adding upstream version 16.2.11+ds. Signed-off-by: Daniel Baumann --- src/spdk/intel-ipsec-mb/Makefile | 690 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 690 insertions(+) create mode 100644 src/spdk/intel-ipsec-mb/Makefile (limited to 'src/spdk/intel-ipsec-mb/Makefile') diff --git a/src/spdk/intel-ipsec-mb/Makefile b/src/spdk/intel-ipsec-mb/Makefile new file mode 100644 index 000000000..2d993bdf4 --- /dev/null +++ b/src/spdk/intel-ipsec-mb/Makefile @@ -0,0 +1,690 @@ +# +# Copyright (c) 2012-2019, Intel Corporation +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of Intel Corporation nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +LIB = libIPSec_MB +SHARED ?= y +IMB_HDR = intel-ipsec-mb.h + +# Detect library version +IMB_VERSION = $(shell grep -e "IMB_VERSION_STR" $(IMB_HDR) | cut -d'"' -f2) +ifeq ($(IMB_VERSION),) +$(error "Failed to detect library version!") +endif + +VERSION = $(shell echo $(IMB_VERSION) | cut -d. -f1-3) +SO_VERSION = $(shell echo $(VERSION) | cut -d. -f1) + +PREFIX ?= /usr +LIB_INSTALL_DIR ?= $(PREFIX)/lib +HDR_DIR ?= $(PREFIX)/include +MAN_DIR ?= $(PREFIX)/man/man7 +MAN1 = libipsec-mb.7 +MAN2 = libipsec-mb-dev.7 +NOLDCONFIG ?= n + +USE_YASM ?= n +YASM ?= yasm +NASM ?= nasm + +OBJ_DIR = obj + +INCLUDE_DIRS := include . no-aesni +INCLUDES := $(foreach i,$(INCLUDE_DIRS),-I $i) + +CC ?= gcc + +CFLAGS := -DLINUX $(EXTRA_CFLAGS) $(INCLUDES) \ + -W -Wall -Wextra -Wmissing-declarations -Wpointer-arith \ + -Wcast-qual -Wundef -Wwrite-strings \ + -Wformat -Wformat-security \ + -Wunreachable-code -Wmissing-noreturn -Wsign-compare -Wno-endif-labels \ + -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition \ + -fno-strict-overflow -fno-delete-null-pointer-checks -fwrapv + +ASM_INCLUDE_DIRS := . + +YASM_INCLUDES := $(foreach i,$(ASM_INCLUDE_DIRS),-I $i) +YASM_FLAGS := -f x64 -f elf64 -X gnu -g dwarf2 -DLINUX -D__linux__ $(YASM_INCLUDES) + +NASM_INCLUDES := $(foreach i,$(ASM_INCLUDE_DIRS),-I$i/) +NASM_FLAGS := -felf64 -Xgnu -gdwarf -DLINUX -D__linux__ $(NASM_INCLUDES) + +ifeq ($(DEBUG),y) +CFLAGS += -g -DDEBUG +OPT = -O0 +LDFLAGS += -g +else +OPT = -O3 +CFLAGS += -fstack-protector -D_FORTIFY_SOURCE=2 +endif + +ifeq ($(SAFE_DATA),y) +CFLAGS += -DSAFE_DATA +NASM_FLAGS += -DSAFE_DATA +YASM_FLAGS += -DSAFE_DATA +endif + +ifeq ($(SAFE_PARAM),y) +CFLAGS += -DSAFE_PARAM +NASM_FLAGS += -DSAFE_PARAM +YASM_FLAGS += -DSAFE_PARAM +endif + +ifneq ($(SAFE_LOOKUP),n) +CFLAGS += -DSAFE_LOOKUP +NASM_FLAGS += -DSAFE_LOOKUP +YASM_FLAGS += -DSAFE_LOOKUP +endif + +# prevent SIMD optimizations for non-aesni modules +CFLAGS_NO_SIMD = $(CFLAGS) -O1 +CFLAGS += $(OPT) + +# Set architectural optimizations for GCC/CC +ifeq ($(CC),$(filter $(CC),gcc cc)) +GCC_VERSION = $(shell $(CC) -dumpversion | cut -d. -f1) +GCC_GE_V5 = $(shell [ $(GCC_VERSION) -ge 5 ] && echo true) +ifeq ($(GCC_GE_V5),true) +OPT_SSE = -march=nehalem -maes +OPT_AVX = -march=sandybridge -maes +OPT_AVX2 = -march=haswell -maes +OPT_AVX512 = -march=broadwell +OPT_NOAESNI = -march=nehalem +endif +endif + +# so or static build +ifeq ($(SHARED),y) +CFLAGS += -fPIC +LIBNAME = $(LIB).so.$(VERSION) +LIBPERM = 0755 +LDFLAGS += -z noexecstack -z relro -z now +else +# SPDK crypto needs shared but -fPIC so to make it clear what +# we are doing, we just comment out the CFLAGS below and +# explicitly set them in our relevant makefile. +#CFLAGS += -fPIE +LIBNAME = $(LIB).a +LIBPERM = 0644 +LDFLAGS += -g +endif + +# warning messages +SAFE_PARAM_MSG1="SAFE_PARAM option not set." +SAFE_PARAM_MSG2="Input parameters will not be checked." +SAFE_DATA_MSG1="SAFE_DATA option not set." +SAFE_DATA_MSG2="Stack and registers containing sensitive information, \ + such keys or IV will not be cleared \ + at the end of function calls." +SAFE_LOOKUP_MSG1="SAFE_LOOKUP option not set." +SAFE_LOOKUP_MSG2="Lookups which depend on sensitive information \ + are not guaranteed to be done in constant time." + +ifeq ($(GCM_BIG_DATA),y) +CFLAGS += -DGCM_BIG_DATA +NASM_FLAGS += -DGCM_BIG_DATA +YASM_FLAGS += -DGCM_BIG_DATA +endif + +# +# List of C modules (any origin) +# +c_lib_objs := \ + mb_mgr_avx.o \ + mb_mgr_avx2.o \ + mb_mgr_avx512.o \ + mb_mgr_sse.o \ + mb_mgr_sse_no_aesni.o \ + alloc.o \ + aes_xcbc_expand_key.o \ + md5_one_block.o \ + sha_one_block.o \ + des_key.o \ + des_basic.o \ + version.o \ + cpu_feature.o \ + aesni_emu.o \ + kasumi_avx.o \ + kasumi_iv.o \ + kasumi_sse.o \ + zuc_sse_top.o \ + zuc_avx_top.o \ + zuc_iv.o \ + snow3g_sse.o \ + snow3g_sse_no_aesni.o \ + snow3g_avx.o \ + snow3g_avx2.o \ + snow3g_tables.o \ + snow3g_iv.o + +# +# List of ASM modules (root directory/common) +# +asm_generic_lib_objs := \ + aes_keyexp_128.o \ + aes_keyexp_192.o \ + aes_keyexp_256.o \ + aes_cmac_subkey_gen.o \ + save_xmms.o \ + clear_regs_mem_fns.o \ + const.o \ + aes128_ecbenc_x3.o \ + zuc_common.o \ + wireless_common.o \ + constant_lookup.o + +# +# List of ASM modules (no-aesni directory) +# +asm_noaesni_lib_objs := \ + aes128_cbc_dec_by4_sse_no_aesni.o \ + aes192_cbc_dec_by4_sse_no_aesni.o \ + aes256_cbc_dec_by4_sse_no_aesni.o \ + aes_cbc_enc_128_x4_no_aesni.o \ + aes_cbc_enc_192_x4_no_aesni.o \ + aes_cbc_enc_256_x4_no_aesni.o \ + aes128_cntr_by4_sse_no_aesni.o \ + aes192_cntr_by4_sse_no_aesni.o \ + aes256_cntr_by4_sse_no_aesni.o \ + aes_ecb_by4_sse_no_aesni.o \ + aes128_cntr_ccm_by4_sse_no_aesni.o \ + pon_sse_no_aesni.o \ + aes_cfb_128_sse_no_aesni.o \ + aes128_cbc_mac_x4_no_aesni.o \ + aes_xcbc_mac_128_x4_no_aesni.o \ + mb_mgr_aes_flush_sse_no_aesni.o \ + mb_mgr_aes_submit_sse_no_aesni.o \ + mb_mgr_aes192_flush_sse_no_aesni.o \ + mb_mgr_aes192_submit_sse_no_aesni.o \ + mb_mgr_aes256_flush_sse_no_aesni.o \ + mb_mgr_aes256_submit_sse_no_aesni.o \ + mb_mgr_aes_cmac_submit_flush_sse_no_aesni.o \ + mb_mgr_aes_ccm_auth_submit_flush_sse_no_aesni.o \ + mb_mgr_aes_xcbc_flush_sse_no_aesni.o \ + mb_mgr_aes_xcbc_submit_sse_no_aesni.o + +# +# List of ASM modules (sse directory) +# +asm_sse_lib_objs := \ + aes128_cbc_dec_by4_sse.o \ + aes192_cbc_dec_by4_sse.o \ + aes256_cbc_dec_by4_sse.o \ + aes_cbc_enc_128_x4.o \ + aes_cbc_enc_192_x4.o \ + aes_cbc_enc_256_x4.o \ + pon_sse.o \ + aes128_cntr_by4_sse.o \ + aes192_cntr_by4_sse.o \ + aes256_cntr_by4_sse.o \ + aes_ecb_by4_sse.o \ + aes128_cntr_ccm_by4_sse.o \ + aes_cfb_128_sse.o \ + aes128_cbc_mac_x4.o \ + aes_xcbc_mac_128_x4.o \ + md5_x4x2_sse.o \ + sha1_mult_sse.o \ + sha1_one_block_sse.o \ + sha224_one_block_sse.o \ + sha256_one_block_sse.o \ + sha384_one_block_sse.o \ + sha512_one_block_sse.o \ + sha512_x2_sse.o \ + sha_256_mult_sse.o \ + sha1_ni_x2_sse.o \ + sha256_ni_x2_sse.o \ + zuc_sse.o \ + mb_mgr_aes_flush_sse.o \ + mb_mgr_aes_submit_sse.o \ + mb_mgr_aes192_flush_sse.o \ + mb_mgr_aes192_submit_sse.o \ + mb_mgr_aes256_flush_sse.o \ + mb_mgr_aes256_submit_sse.o \ + mb_mgr_aes_cmac_submit_flush_sse.o \ + mb_mgr_aes_ccm_auth_submit_flush_sse.o \ + mb_mgr_aes_xcbc_flush_sse.o \ + mb_mgr_aes_xcbc_submit_sse.o \ + mb_mgr_hmac_md5_flush_sse.o \ + mb_mgr_hmac_md5_submit_sse.o \ + mb_mgr_hmac_flush_sse.o \ + mb_mgr_hmac_submit_sse.o \ + mb_mgr_hmac_sha_224_flush_sse.o \ + mb_mgr_hmac_sha_224_submit_sse.o \ + mb_mgr_hmac_sha_256_flush_sse.o \ + mb_mgr_hmac_sha_256_submit_sse.o \ + mb_mgr_hmac_sha_384_flush_sse.o \ + mb_mgr_hmac_sha_384_submit_sse.o \ + mb_mgr_hmac_sha_512_flush_sse.o \ + mb_mgr_hmac_sha_512_submit_sse.o \ + mb_mgr_hmac_flush_ni_sse.o \ + mb_mgr_hmac_submit_ni_sse.o \ + mb_mgr_hmac_sha_224_flush_ni_sse.o \ + mb_mgr_hmac_sha_224_submit_ni_sse.o \ + mb_mgr_hmac_sha_256_flush_ni_sse.o \ + mb_mgr_hmac_sha_256_submit_ni_sse.o + +# +# List of ASM modules (avx directory) +# +asm_avx_lib_objs := \ + aes_cbc_enc_128_x8.o \ + aes_cbc_enc_192_x8.o \ + aes_cbc_enc_256_x8.o \ + aes128_cbc_dec_by8_avx.o \ + aes192_cbc_dec_by8_avx.o \ + aes256_cbc_dec_by8_avx.o \ + pon_avx.o \ + aes128_cntr_by8_avx.o \ + aes192_cntr_by8_avx.o \ + aes256_cntr_by8_avx.o \ + aes128_cntr_ccm_by8_avx.o \ + aes_ecb_by4_avx.o \ + aes_cfb_128_avx.o \ + aes128_cbc_mac_x8.o \ + aes_xcbc_mac_128_x8.o \ + md5_x4x2_avx.o \ + sha1_mult_avx.o \ + sha1_one_block_avx.o \ + sha224_one_block_avx.o \ + sha256_one_block_avx.o \ + sha_256_mult_avx.o \ + sha384_one_block_avx.o \ + sha512_one_block_avx.o \ + sha512_x2_avx.o \ + zuc_avx.o \ + mb_mgr_aes_flush_avx.o \ + mb_mgr_aes_submit_avx.o \ + mb_mgr_aes192_flush_avx.o \ + mb_mgr_aes192_submit_avx.o \ + mb_mgr_aes256_flush_avx.o \ + mb_mgr_aes256_submit_avx.o \ + mb_mgr_aes_cmac_submit_flush_avx.o\ + mb_mgr_aes_ccm_auth_submit_flush_avx.o \ + mb_mgr_aes_xcbc_flush_avx.o \ + mb_mgr_aes_xcbc_submit_avx.o \ + mb_mgr_hmac_md5_flush_avx.o \ + mb_mgr_hmac_md5_submit_avx.o \ + mb_mgr_hmac_flush_avx.o \ + mb_mgr_hmac_submit_avx.o \ + mb_mgr_hmac_sha_224_flush_avx.o \ + mb_mgr_hmac_sha_224_submit_avx.o \ + mb_mgr_hmac_sha_256_flush_avx.o \ + mb_mgr_hmac_sha_256_submit_avx.o \ + mb_mgr_hmac_sha_384_flush_avx.o \ + mb_mgr_hmac_sha_384_submit_avx.o \ + mb_mgr_hmac_sha_512_flush_avx.o \ + mb_mgr_hmac_sha_512_submit_avx.o + +# +# List of ASM modules (avx2 directory) +# +asm_avx2_lib_objs := \ + md5_x8x2_avx2.o \ + sha1_x8_avx2.o \ + sha256_oct_avx2.o \ + sha512_x4_avx2.o \ + mb_mgr_hmac_md5_flush_avx2.o \ + mb_mgr_hmac_md5_submit_avx2.o \ + mb_mgr_hmac_flush_avx2.o \ + mb_mgr_hmac_submit_avx2.o \ + mb_mgr_hmac_sha_224_flush_avx2.o \ + mb_mgr_hmac_sha_224_submit_avx2.o \ + mb_mgr_hmac_sha_256_flush_avx2.o \ + mb_mgr_hmac_sha_256_submit_avx2.o \ + mb_mgr_hmac_sha_384_flush_avx2.o \ + mb_mgr_hmac_sha_384_submit_avx2.o \ + mb_mgr_hmac_sha_512_flush_avx2.o \ + mb_mgr_hmac_sha_512_submit_avx2.o + +# +# List of ASM modules (avx512 directory) +# +asm_avx512_lib_objs := \ + sha1_x16_avx512.o \ + sha256_x16_avx512.o \ + sha512_x8_avx512.o \ + des_x16_avx512.o \ + cntr_vaes_avx512.o \ + aes_cbc_dec_vaes_avx512.o \ + aes_cbc_enc_vaes_avx512.o \ + mb_mgr_aes_submit_avx512.o \ + mb_mgr_aes_flush_avx512.o \ + mb_mgr_aes192_submit_avx512.o \ + mb_mgr_aes192_flush_avx512.o \ + mb_mgr_aes256_submit_avx512.o \ + mb_mgr_aes256_flush_avx512.o \ + mb_mgr_hmac_flush_avx512.o \ + mb_mgr_hmac_submit_avx512.o \ + mb_mgr_hmac_sha_224_flush_avx512.o \ + mb_mgr_hmac_sha_224_submit_avx512.o \ + mb_mgr_hmac_sha_256_flush_avx512.o \ + mb_mgr_hmac_sha_256_submit_avx512.o \ + mb_mgr_hmac_sha_384_flush_avx512.o \ + mb_mgr_hmac_sha_384_submit_avx512.o \ + mb_mgr_hmac_sha_512_flush_avx512.o \ + mb_mgr_hmac_sha_512_submit_avx512.o \ + mb_mgr_des_avx512.o + +# +# GCM object file lists +# + +c_gcm_objs := gcm.o + +asm_noaesni_gcm_objs := \ + gcm128_sse_no_aesni.o gcm192_sse_no_aesni.o gcm256_sse_no_aesni.o + +asm_sse_gcm_objs := \ + gcm128_sse.o gcm192_sse.o gcm256_sse.o + +asm_avx_gcm_objs := \ + gcm128_avx_gen2.o gcm192_avx_gen2.o gcm256_avx_gen2.o + +asm_avx2_gcm_objs := \ + gcm128_avx_gen4.o gcm192_avx_gen4.o gcm256_avx_gen4.o + +asm_avx512_gcm_objs := \ + gcm128_vaes_avx512.o gcm192_vaes_avx512.o gcm256_vaes_avx512.o \ + gcm128_avx512.o gcm192_avx512.o gcm256_avx512.o + +# +# build object files lists for GCM and NO-GCM variants +# +ifeq ($(NO_GCM), y) +CFLAGS += -DNO_GCM +asm_obj_files := $(asm_generic_lib_objs) $(asm_noaesni_lib_objs) \ + $(asm_sse_lib_objs) $(asm_avx_lib_objs) \ + $(asm_avx2_lib_objs) $(asm_avx512_lib_objs) +c_obj_files := $(c_lib_objs) +else +asm_obj_files := $(asm_generic_lib_objs) \ + $(asm_noaesni_lib_objs) $(asm_noaesni_gcm_objs) \ + $(asm_sse_lib_objs) $(asm_sse_gcm_objs) \ + $(asm_avx_lib_objs) $(asm_avx_gcm_objs) \ + $(asm_avx2_lib_objs) $(asm_avx2_gcm_objs) \ + $(asm_avx512_lib_objs) $(asm_avx512_gcm_objs) +c_obj_files := $(c_lib_objs) $(c_gcm_objs) +endif + +# +# aggregate all objects files together and prefix with OBJDIR +# +lib_obj_files := $(asm_obj_files) $(c_obj_files) +target_obj_files := $(lib_obj_files:%=$(OBJ_DIR)/%) + +# +# create a list of dependency files for assembly modules +# create a list of dependency files for c modules then +# prefix these with OBJDIR +# +asm_dep_files := $(asm_obj_files:%.o=%.d) + +c_dep_files := $(c_obj_files:%.o=%.d) +c_dep_target_files := $(c_dep_files:%=$(OBJ_DIR)/%) + +# +# aggregate all dependency files together and prefix with OBJDIR +# +dep_files := $(asm_dep_files) $(c_dep_files) +dep_target_files := $(dep_files:%=$(OBJ_DIR)/%) + +all: $(LIBNAME) + +$(LIBNAME): $(target_obj_files) +ifeq ($(SHARED),y) + $(CC) -shared -Wl,-soname,$(LIB).so.$(SO_VERSION) -o $(LIBNAME) $^ -lc + ln -f -s $(LIBNAME) $(LIB).so.$(SO_VERSION) + ln -f -s $(LIB).so.$(SO_VERSION) $(LIB).so +else + $(AR) -qcs $@ $^ +endif +ifneq ($(SAFE_PARAM), y) + @echo "NOTE:" $(SAFE_PARAM_MSG1) $(SAFE_PARAM_MSG2) +endif +ifneq ($(SAFE_DATA), y) + @echo "NOTE:" $(SAFE_DATA_MSG1) $(SAFE_DATA_MSG2) +endif +ifeq ($(SAFE_LOOKUP), n) + @echo "NOTE:" $(SAFE_LOOKUP_MSG1) $(SAFE_LOOKUP_MSG2) +endif + +.PHONY: install +install: $(LIBNAME) + install -d $(HDR_DIR) + install -m 0644 $(IMB_HDR) $(HDR_DIR) + install -d $(LIB_INSTALL_DIR) + install -s -m $(LIBPERM) $(LIBNAME) $(LIB_INSTALL_DIR) + install -d $(MAN_DIR) + install -m 0444 $(MAN1) $(MAN_DIR) + install -m 0444 $(MAN2) $(MAN_DIR) +ifeq ($(SHARED),y) + cd $(LIB_INSTALL_DIR); \ + ln -f -s $(LIB).so.$(VERSION) $(LIB).so.$(SO_VERSION); \ + ln -f -s $(LIB).so.$(SO_VERSION) $(LIB).so +ifneq ($(NOLDCONFIG),y) + ldconfig +endif +endif + +.PHONY: uninstall +uninstall: $(LIBNAME) + -rm -f $(HDR_DIR)/$(IMB_HDR) + -rm -f $(LIB_INSTALL_DIR)/$(LIBNAME) + -rm -f $(MAN_DIR)/$(MAN1) + -rm -f $(MAN_DIR)/$(MAN2) +ifeq ($(SHARED),y) + -rm -f $(LIB_INSTALL_DIR)/$(LIB).so.$(SO_VERSION) + -rm -f $(LIB_INSTALL_DIR)/$(LIB).so +endif + +.PHONY: build_c_dep_target_files +build_c_dep_target_files: $(c_dep_target_files) + +$(target_obj_files): | $(OBJ_DIR) build_c_dep_target_files +$(dep_target_files): | $(OBJ_DIR) + +# +# dependency file build recipies +# + +$(OBJ_DIR)/%.d:%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +$(OBJ_DIR)/%.d:sse/%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +$(OBJ_DIR)/%.d:avx/%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +$(OBJ_DIR)/%.d:avx2/%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +$(OBJ_DIR)/%.d:avx512/%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +$(OBJ_DIR)/%.d:no-aesni/%.c + $(CC) -MM -MP -MF $@ $(CFLAGS) $< + +# +# object file build recipies +# + +$(OBJ_DIR)/%.o:%.c + $(CC) -c $(CFLAGS) $< -o $@ + +$(OBJ_DIR)/%.o:%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:sse/%.c + $(CC) $(OPT_SSE) -c $(CFLAGS) $< -o $@ + +$(OBJ_DIR)/%.o:sse/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:avx/%.c + $(CC) $(OPT_AVX) -c $(CFLAGS) $< -o $@ + +$(OBJ_DIR)/%.o:avx/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:avx2/%.c + $(CC) $(OPT_AVX2) -c $(CFLAGS) $< -o $@ + +$(OBJ_DIR)/%.o:avx2/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:avx512/%.c + $(CC) $(OPT_AVX512) -c $(CFLAGS) $< -o $@ + +$(OBJ_DIR)/%.o:avx512/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:include/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR)/%.o:no-aesni/%.c + $(CC) $(OPT_NOAESNI) -c $(CFLAGS_NO_SIMD) $< -o $@ + +$(OBJ_DIR)/%.o:no-aesni/%.asm +ifeq ($(USE_YASM),y) + $(YASM) $(YASM_FLAGS) $< -o $@ +else + $(NASM) -MD $(@:.o=.d) -MT $@ -o $@ $(NASM_FLAGS) $< +endif + +$(OBJ_DIR): + mkdir $(OBJ_DIR) + +.PHONY: TAGS +TAGS: + find ./ -name '*.[ch]' | etags - + find ./ -name '*.asm' | etags -a - + find ./ -name '*.inc' | etags -a - + +.PHONY: clean +clean: + rm -Rf $(target_obj_files) + rm -Rf $(dep_target_files) + rm -f $(LIB).a $(LIB).so* + +.PHONY: help +help: + @echo "Available build options:" + @echo "DEBUG=n (default)" + @echo " - this option will produce library not fit for debugging" + @echo "SHARED=y (default)" + @echo " - this option will produce shared library" + @echo "DEBUG=y - this option will produce library fit for debugging" + @echo "SHARED=n - this option will produce static library" + @echo "SAFE_DATA=n (default)" + @echo " - Sensitive data not cleared from registers and memory" + @echo " at operation end" + @echo "SAFE_DATA=y" + @echo " - Sensitive data cleared from registers and memory" + @echo " at operation end" + @echo "SAFE_PARAM=n (default)" + @echo " - API input parameters not checked" + @echo "SAFE_PARAM=y" + @echo " - API input parameters checked" + @echo "SAFE_LOOKUP=n" + @echo " - Lookups depending on sensitive data might not be constant time" + @echo "SAFE_LOOKUP=y (default)" + @echo " - Lookups depending on sensitive data are constant time" + @echo "GCM_BIG_DATA=n (default)" + @echo " - Smaller GCM key structure with good performance level (VAES)" + @echo " for packet processing applications (buffers size < 2K)" + @echo " - 8 ghash keys used on SSE, AVX, AVX2 and AVX512" + @echo " - 48 ghash keys used on AVX512 with VAES and VPCLMULQDQ" + @echo "GCM_BIG_DATA=y" + @echo " - Better performing VAES GCM on big buffers using more ghash keys." + @echo " This option results in a much bigger gcm_key structure (>2K)." + @echo " It only takes effect on platforms with VAES and VPCLMULQDQ." + + +CHECKPATCH ?= checkpatch.pl +# checkpatch ignore settings: +# SPACING - produces false positives with tyepdefs and * +# CONSTANT_COMPARISON - forbids defensive programming technique +# USE_FUNC - produces false positives for Windows target +# INITIALISED_STATIC, LEADING_SPACE, SPLIT_STRING, CODE_INDENT, +# PREFER_ALIGNED, UNSPECIFIED_INT, ARRAY_SIZE, GLOBAL_INITIALISERS, +# NEW_TYPEDEFS, AVOID_EXTERNS, COMPLEX_MACRO, BLOCK_COMMENT_STYLE +# - found obsolete in this project +# +# NOTE: these flags cannot be broken into multiple lines due to +# spaces injected by make +CHECKPATCH_FLAGS = --no-tree --no-signoff --emacs --no-color --ignore CODE_INDENT,INITIALISED_STATIC,LEADING_SPACE,SPLIT_STRING,UNSPECIFIED_INT,ARRAY_SIZE,BLOCK_COMMENT_STYLE,GLOBAL_INITIALISERS,NEW_TYPEDEFS,AVOID_EXTERNS,COMPLEX_MACRO,PREFER_ALIGNED,USE_FUNC,CONSTANT_COMPARISON,SPACING + +%.c_style_check : %.c + $(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $< + +%.h_style_check : %.h + $(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $< + +%.asm_style_check : %.asm + $(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $< + +%.inc_style_check : %.inc + $(CHECKPATCH) $(CHECKPATCH_FLAGS) -f $< + +SOURCES_DIRS := . sse avx avx2 avx512 include no-aesni +SOURCES := $(foreach dir,$(SOURCES_DIRS),$(wildcard $(dir)/*.[ch]) $(wildcard $(dir)/*.asm) $(wildcard $(dir)/*.inc)) +SOURCES_STYLE := $(foreach infile,$(SOURCES),$(infile)_style_check) + +.PHONY: style +style: $(SOURCES_STYLE) + +# if target not clean or rinse then make dependencies +ifneq ($(MAKECMDGOALS),clean) +ifneq ($(MAKECMDGOALS),style) +-include $(dep_target_files) +endif +endif -- cgit v1.2.3