summaryrefslogtreecommitdiffstats
path: root/lib/raid6/test/Makefile
blob: 2abe0076a636c3816678d13df2b0c7d036da154a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# SPDX-License-Identifier: GPL-2.0
#
# This is a simple Makefile to test some of the RAID-6 code
# from userspace.
#

pound := \#

# Adjust as desired
CC       = gcc
OPTFLAGS = -O2
CFLAGS   = -I.. -I ../../../include -g $(OPTFLAGS)
LD       = ld
AWK      = awk -f
AR       = ar
RANLIB   = ranlib
OBJS     = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o

ARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/)
ifeq ($(ARCH),i386)
        CFLAGS += -DCONFIG_X86_32
        IS_X86 = yes
endif
ifeq ($(ARCH),x86_64)
        CFLAGS += -DCONFIG_X86_64
        IS_X86 = yes
endif

ifeq ($(ARCH),arm)
        CFLAGS += -I../../../arch/arm/include -mfpu=neon
        HAS_NEON = yes
endif
ifeq ($(ARCH),aarch64)
        CFLAGS += -I../../../arch/arm64/include
        HAS_NEON = yes
endif

ifeq ($(findstring ppc,$(ARCH)),ppc)
        CFLAGS += -I../../../arch/powerpc/include
        HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
                         gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
endif

ifeq ($(ARCH),loongarch64)
        CFLAGS += -I../../../arch/loongarch/include -DCONFIG_LOONGARCH=1
        CFLAGS += $(shell echo 'vld $$vr0, $$zero, 0' |         \
                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
                    rm ./-.o && echo -DCONFIG_CPU_HAS_LSX=1)
        CFLAGS += $(shell echo 'xvld $$xr0, $$zero, 0' |        \
                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
                    rm ./-.o && echo -DCONFIG_CPU_HAS_LASX=1)
endif

ifeq ($(IS_X86),yes)
        OBJS   += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
        CFLAGS += -DCONFIG_X86
        CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" |          \
                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
                    rm ./-.o && echo -DCONFIG_AS_AVX512=1)
else ifeq ($(HAS_NEON),yes)
        OBJS   += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
        CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
else ifeq ($(HAS_ALTIVEC),yes)
        CFLAGS += -DCONFIG_ALTIVEC
        OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
                vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
else ifeq ($(ARCH),loongarch64)
        OBJS += loongarch_simd.o recov_loongarch_simd.o
endif

.c.o:
	$(CC) $(CFLAGS) -c -o $@ $<

%.c: ../%.c
	cp -f $< $@

%.uc: ../%.uc
	cp -f $< $@

all: raid6.a raid6test

raid6.a: $(OBJS)
	rm -f $@
	$(AR) cq $@ $^
	$(RANLIB) $@

raid6test: test.c raid6.a
	$(CC) $(CFLAGS) -o raid6test $^

neon1.c: neon.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=1 < neon.uc > $@

neon2.c: neon.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=2 < neon.uc > $@

neon4.c: neon.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=4 < neon.uc > $@

neon8.c: neon.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=8 < neon.uc > $@

altivec1.c: altivec.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=1 < altivec.uc > $@

altivec2.c: altivec.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=2 < altivec.uc > $@

altivec4.c: altivec.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=4 < altivec.uc > $@

altivec8.c: altivec.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=8 < altivec.uc > $@

vpermxor1.c: vpermxor.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=1 < vpermxor.uc > $@

vpermxor2.c: vpermxor.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=2 < vpermxor.uc > $@

vpermxor4.c: vpermxor.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=4 < vpermxor.uc > $@

vpermxor8.c: vpermxor.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=8 < vpermxor.uc > $@

int1.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=1 < int.uc > $@

int2.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=2 < int.uc > $@

int4.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=4 < int.uc > $@

int8.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=8 < int.uc > $@

int16.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=16 < int.uc > $@

int32.c: int.uc ../unroll.awk
	$(AWK) ../unroll.awk -vN=32 < int.uc > $@

tables.c: mktables
	./mktables > tables.c

clean:
	rm -f *.o *.a mktables mktables.c *.uc int*.c altivec*.c vpermxor*.c neon*.c tables.c raid6test

spotless: clean
	rm -f *~