]> git.proxmox.com Git - ceph.git/blame - ceph/src/crypto/isa-l/isa-l_crypto/make.inc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / crypto / isa-l / isa-l_crypto / make.inc
CommitLineData
7c673cae
FG
1########################################################################
2# Copyright(c) 2011-2016 Intel Corporation All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
1e59de90 5# modification, are permitted provided that the following conditions
7c673cae
FG
6# are met:
7# * Redistributions of source code must retain the above copyright
8# notice, this list of conditions and the following disclaimer.
9# * Redistributions in binary form must reproduce the above copyright
10# notice, this list of conditions and the following disclaimer in
11# the documentation and/or other materials provided with the
12# distribution.
13# * Neither the name of Intel Corporation nor the names of its
14# contributors may be used to endorse or promote products derived
15# from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28########################################################################
29
30
31# Makefile include for optimized libraries
32# make targets:
33# lib - build library of optimized functions
34# slib - build shared library
35# test - run unit tests of functions
36# perf - run performance tests
37# install - install headers and libs to system location
38# sim - run on simulator
39# trace - get simulator trace
40# clean - remove object files
41
1e59de90
TL
42version ?= 2.24.0
43
44
7c673cae
FG
45
46CC = gcc
1e59de90
TL
47AS = nasm
48AWK = awk
7c673cae
FG
49
50DEBUG = -g
51DEBUG_yasm = -g dwarf2
52DEBUG_nasm = -g
53
54# Default arch= build options
1e59de90 55CFLAGS_ = -Wall
7c673cae
FG
56ASFLAGS_ = -f elf64
57ARFLAGS_ = cr $@
58STRIP_gcc = strip -d -R .comment $@
59
60# arch=32 build options
61ASFLAGS_32 = -f elf32
62CFLAGS_32 = -m32
63ARFLAGS_32 = cr $@
64
65# arch=win64 build options
66ASFLAGS_win64 = -f win64
67CFLAGS_icl = -Qstd=c99
68ARFLAGS_win64 = -out:$@
69
70# arch=mingw build options
71ASFLAGS_mingw = -f win64
72ARFLAGS_mingw = cr $@
1e59de90
TL
73
74LDFLAGS_so = -Wl,-soname,$(soname)
7c673cae
FG
75
76ifeq ($(arch),mingw)
77 CC=x86_64-w64-mingw32-gcc
78 AR=x86_64-w64-mingw32-ar
1e59de90
TL
79 LDFLAGS += -Wl,--force-exe-suffix
80 SIM=wine
81 EXT=.exe
82 CLEANFILES+=*.exe
83endif
84
85ASFLAGS_Darwin = -f macho64 --prefix=_
86ARFLAGS_Darwin = -r $@
87ifeq ($(shell uname),Darwin)
88 LDFLAGS_so =
89 STRIP_gcc =
7c673cae
FG
90endif
91
1e59de90
TL
92# arch=aarch64 build options
93ifeq ($(lib_debug),1)
94 ASFLAGS_aarch64 = -g -c
95else
96 ASFLAGS_aarch64 = -c
97endif
7c673cae 98
1e59de90
TL
99ARFLAGS_aarch64 = cr $@
100ifeq ($(arch),aarch64)
101 AS=$(CC) -D__ASSEMBLY__
102 SIM=
103endif
104# arch=noarch build options
105ARFLAGS_noarch = cr $@
106CFLAGS_noarch= -DNOARCH
107ifeq ($(arch),noarch)
108 host_cpu=base_aliases
109endif
7c673cae
FG
110INCLUDE = $(patsubst %,-I%/,$(subst :, ,$(VPATH)))
111CFLAGS = $(CFLAGS_$(arch)) $(CFLAGS_$(CC)) $(DEBUG) -O2 $(DEFINES) $(INCLUDE)
112ASFLAGS = $(ASFLAGS_$(arch)) $(ASFLAGS_$(CC)) $(DEBUG_$(AS)) $(DEFINES) $(INCLUDE)
113ARFLAGS = $(ARFLAGS_$(arch))
114DEFINES += $(addprefix -D , $D)
1e59de90 115CLEANFILES += $(O) *.o *.a $(all_tests) $(lib_name) $(so_lib_name)
7c673cae 116
1e59de90
TL
117ifeq ($(filter aarch64 x86_%,$(host_cpu)),)
118 host_cpu=base_aliases
119endif
120lsrc += $(lsrc_$(host_cpu))
7c673cae 121O = bin
1e59de90 122lobj += $(patsubst %.c,%.o,$(patsubst %.S,%.o,$(patsubst %.asm,%.o,$(lsrc) $(lsrc_intrinsic))))
7c673cae
FG
123objs = $(addprefix $(O)/,$(notdir $(lobj)))
124
125
126lib_name ?= isa-l_crypto.a
127default: lib slib
128
129# Defaults for windows build
130ifeq ($(arch),win64)
131 AR=lib
132 CC=cl
133 OUTPUT_OPTION = -Fo$@
134 DEBUG=
135 lib_name := $(basename $(lib_name)).lib
136endif
137lsrcwin64 = $(lsrc)
138unit_testswin64 = $(unit_tests)
139exampleswin64 = $(examples)
140perf_testswin64 = $(perf_tests)
141
1e59de90 142
7c673cae 143# Build and run unit tests, performance tests, etc.
1e59de90
TL
144all_tests = $(notdir $(sort $(perf_tests) $(check_tests) $(unit_tests) $(examples) $(other_tests)))
145all_unit_tests = $(notdir $(sort $(check_tests) $(unit_tests)))
146all_perf_tests = $(notdir $(sort $(perf_tests)))
147all_check_tests = $(notdir $(sort $(check_tests)))
7c673cae
FG
148
149$(all_unit_tests): % : %.c $(lib_name)
150$(all_perf_tests): % : %.c $(lib_name)
1e59de90 151$(sort $(notdir $(examples))): % : %.c $(lib_name)
7c673cae
FG
152$(sort $(notdir $(other_tests))): % : %.c $(lib_name)
153
1e59de90
TL
154# Check for modern as
155test-as = $(shell hash printf && printf $(3) > $(2) && $(AS) $(ASFLAGS) ${tmpf} -o /dev/null 2> /dev/null && echo $(1) || echo $(4))
156as_4 := "pblendvb xmm2, xmm1;"
157as_6 := "vinserti32x8 zmm0, ymm1, 1;"
158as_10 := "vpcompressb zmm0 {k1}, zmm1;"
159
160tmpf := $(shell mktemp)
161as_feature_level := $(call test-as, 4, $(tmpf), $(as_4), $(as_feature_level))
162as_feature_level := $(call test-as, 6, $(tmpf), $(as_6), $(as_feature_level))
163as_feature_level := $(call test-as, 10, $(tmpf), $(as_10), $(as_feature_level))
164tmpf := $(shell rm ${tmpf})
165
166ifneq ($(findstring $(as_feature_level),6 10),)
167 D_HAVE_AS_KNOWS_AVX512_y := -DHAVE_AS_KNOWS_AVX512
168endif
169
170CFLAGS += -DAS_FEATURE_LEVEL=$(as_feature_level) $(D_HAVE_AS_KNOWS_AVX512_y)
171ASFLAGS += -DAS_FEATURE_LEVEL=$(as_feature_level) $(D_HAVE_AS_KNOWS_AVX512_y)
172
7c673cae
FG
173sim test trace: $(addsuffix .run,$(all_unit_tests))
174perf: $(addsuffix .run,$(all_perf_tests))
1e59de90
TL
175check: $(addsuffix .run,$(all_check_tests))
176ex: $(notdir $(examples))
7c673cae
FG
177all: lib $(all_tests)
178other: $(notdir $(other_tests))
179tests: $(all_unit_tests)
180perfs: $(all_perf_tests)
1e59de90
TL
181checks: $(all_check_tests)
182trace: SIM=sde -debugtrace --
183sim: SIM=sde --
7c673cae
FG
184check test sim:
185 @echo Finished running $@
186
187$(objs): | $(O)
188$(O): ; mkdir -p $(O)
189
190# Build rule to run tests
191$(addsuffix .run,$(all_tests)): %.run : %
1e59de90 192 $(SIM) ./$<$(EXT)
7c673cae
FG
193 @echo Completed run: $<
194
195# Other build rules
1e59de90
TL
196msg = $(if $(DEBUG),DEBUG) $(patsubst 32,32-bit,$(host_cpu)) $D
197
198# gcc assembly files
199$(O)/%.o: $(host_cpu)/%.S
200 @echo " ---> Building $< $(msg)"
201 @$(AS) $(ASFLAGS) -o $@ $<
7c673cae 202
1e59de90
TL
203$(O)/%.o : $(host_cpu)/%.c
204 @echo " ---> Building $< $(msg)"
205 @$(COMPILE.c) $(OUTPUT_OPTION) $<
206# yasm/nasm assembly files
7c673cae
FG
207$(O)/%.o: %.asm
208 @echo " ---> Building $< $(msg)"
209 @$(AS) $(ASFLAGS) -o $@ $<
210
1e59de90 211
7c673cae
FG
212$(O)/%.o %.o: %.c
213 @echo " ---> Building $< $(msg)"
214 @$(COMPILE.c) $(OUTPUT_OPTION) $<
215
216$(all_tests):
217 @echo " ---> Building Test $@ $(msg)"
218 @$(LINK.o) $(CFLAGS) $^ $(LDLIBS) -o $@
219
220
221# Target to build lib files
222lib: $(lib_name)
223ifneq ($(lib_debug),1)
224 $(lib_name): DEBUG_$(AS)= # Don't put debug symbols in the lib
225 $(lib_name): DEBUG=
226 $(lib_name): DEFINES+=-D NDEBUG
227endif
228ifeq ($(lib_debug),1)
229 DEBUG+=-D DEBUG # Define DEBUG for macros
230endif
231
232#lib $(lib_name): $(lib_name)(${objs})
233$(lib_name): $(objs)
234 @echo " ---> Creating Lib $@"
235 @$(AR) $(ARFLAGS) $^
1e59de90 236ifneq ($(lib_debug),1)
7c673cae 237 @$(STRIP_$(CC))
1e59de90 238endif
7c673cae
FG
239
240
241# Target for shared lib
242so_lib_name = bin/libisal_crypto.so
243so_lib_inst = $(notdir $(so_lib_name))
244so_lib_ver = $(so_lib_inst).$(version)
245soname = $(so_lib_inst).$(word 1, $(subst ., ,$(version)))
246
247slib: $(so_lib_name)
1e59de90
TL
248aobjs += $(addprefix $(O)/,$(patsubst %.asm,%.o,$(filter %.asm,$(notdir $(lsrc) $(lsrc_intrinsic)))))
249aobjs += $(addprefix $(O)/,$(patsubst %.S,%.o,$(filter %.S,$(notdir $(lsrc) $(lsrc_intrinsic)))))
250shared_objs += $(addprefix $(O)/shared_ver_,$(patsubst %.c,%.o,$(filter %.c,$(notdir $(lsrc) $(lsrc_intrinsic)))))
7c673cae
FG
251
252$(O)/shared_ver_%.o: %.c
253 @echo " ---> Building shared $< $(msg)"
254 @$(COMPILE.c) $(OUTPUT_OPTION) $<
255
1e59de90
TL
256$(O)/shared_ver_%.o: $(host_cpu)/%.c
257 @echo " ---> Building shared $< $(msg)"
258 @$(COMPILE.c) $(OUTPUT_OPTION) $<
7c673cae
FG
259ifneq ($(lib_debug),1)
260 $(so_lib_name): DEBUG_$(AS)=
261 $(so_lib_name): DEBUG=
262 $(so_lib_name): DEFINES+=-D NDEBUG
263endif
264
265$(shared_objs): CFLAGS += -fPIC
266$(shared_objs) $(aobjs): | $(O)
1e59de90 267$(so_lib_name): LDFLAGS+=$(LDFLAGS_so)
7c673cae
FG
268$(so_lib_name): $(shared_objs) $(aobjs)
269 @echo " ---> Creating Shared Lib $@"
270 @$(CC) $(CFLAGS) --shared $(LDFLAGS) -o $@ $^
271 @(cd $(@D); ln -f -s $(so_lib_inst) $(soname))
272
1e59de90
TL
273isa-l_crypto.h:
274 @echo 'Building $@'
275 @echo '' >> $@
276 @echo '/**' >> $@
277 @echo ' * @file isa-l_crypto.h'>> $@
278 @echo ' * @brief Include for ISA-L_crypto library' >> $@
279 @echo ' */' >> $@
280 @echo '' >> $@
281 @echo '#ifndef _ISAL_CRYPTO_H_' >> $@
282 @echo '#define _ISAL_CRYPTO_H_' >> $@
283 @echo '' >> $@
284 @echo '#define.ISAL_CRYPTO_MAJOR_VERSION.${version}' | ${AWK} -F . '{print $$1, $$2, $$3}' >> $@
285 @echo '#define.ISAL_CRYPTO_MINOR_VERSION.${version}' | ${AWK} -F . '{print $$1, $$2, $$4}' >> $@
286 @echo '#define.ISAL_CRYPTO_PATCH_VERSION.${version}' | ${AWK} -F . '{print $$1, $$2, $$5}' >> $@
287 @echo '#define ISAL_CRYPTO_MAKE_VERSION(maj, min, patch) ((maj) * 0x10000 + (min) * 0x100 + (patch))' >> $@
288 @echo '#define ISAL_CRYPTO_VERSION ISAL_CRYPTO_MAKE_VERSION(ISAL_CRYPTO_MAJOR_VERSION, ISAL_CRYPTO_MINOR_VERSION, ISAL_CRYPTO_PATCH_VERSION)' >> $@
289 @echo '' >> $@
290 @for unit in $(sort $(extern_hdrs)); do echo "#include <isa-l_crypto/$$unit>" | sed -e 's;include/;;' >> $@; done
291 @echo '#endif //_ISAL_CRYPTO_H_' >> $@
292
293
7c673cae
FG
294# Target for install
295prefix = /usr/local
296install_dirs = $(prefix)/lib $(prefix)/include/isa-l_crypto
297$(install_dirs): ; mkdir -p $@
298install: $(sort $(extern_hdrs)) | $(install_dirs) $(lib_name) $(so_lib_name) isa-l_crypto.h
299 install -m 644 $(lib_name) $(prefix)/lib/libisal_crypto.a
300 install -m 644 $^ $(prefix)/include/isa-l_crypto/.
1e59de90
TL
301 install -m 664 isa-l_crypto.h $(prefix)/include/.
302 install -m 664 include/types.h $(prefix)/include/isa-l_crypto/.
303 install -m 664 include/endian_helper.h $(prefix)/include/isa-l_crypto/.
7c673cae
FG
304 install -m 664 $(so_lib_name) $(prefix)/lib/$(so_lib_ver)
305 (cd $(prefix)/lib && ln -f -s $(so_lib_ver) $(soname) && ln -f -s $(so_lib_ver) $(so_lib_inst))
306ifeq ($(shell uname),Darwin)
307 (cd $(prefix)/lib && ln -f -s $(so_lib_ver) $(basename $(so_lib_inst)).dylib)
1e59de90
TL
308 which glibtool && glibtool --mode=finish $(prefix)/lib
309else
7c673cae
FG
310 which libtool && libtool --mode=finish $(prefix)/lib || \
311 echo 'Lib installed at $(prefix)/lib. Run system-dependent programs to add shared lib path.'
1e59de90 312endif
7c673cae
FG
313
314uninstall:
315 $(RM) $(prefix)/lib/libisal_crypto.a
316 $(RM) $(prefix)/lib/$(soname)
317 $(RM) $(prefix)/lib/$(so_lib_ver)
318 $(RM) $(prefix)/lib/$(so_lib_inst)
319 $(RM) -r $(prefix)/include/isa-l_crypto
320 $(RM) $(prefix)/include/isa-l_crypto.h
321 $(RM) $(prefix)/lib/$(basename $(so_lib_inst)).dylib
322
323# Collect performance data
324rpt_name = perf_report_$(shell uname -n)_$(shell date +%y%m%d).perf
325
326perf_report:
327 echo Results for $(rpt_name) >> $(rpt_name)
328 $(MAKE) -f Makefile.unx -k perf | tee -a $(rpt_name)
329 @echo Summary:
330 -grep runtime $(rpt_name)
331
332
333clean:
334 @echo Cleaning up
1e59de90
TL
335 @$(RM) -r $(CLEANFILES)
336
337doc: isa-l_crypto.h
338 (cat Doxyfile; echo 'PROJECT_NUMBER=$(version)') | doxygen -
339 $(MAKE) -C generated_doc/latex &> generated_doc/latex_build_api.log
340 cp generated_doc/latex/refman.pdf isa-l_crypto_api_$(version).pdf