162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#
362306a36Sopenharmony_ci# This is a simple Makefile to test some of the RAID-6 code
462306a36Sopenharmony_ci# from userspace.
562306a36Sopenharmony_ci#
662306a36Sopenharmony_ci
762306a36Sopenharmony_cipound := \#
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci# Adjust as desired
1062306a36Sopenharmony_ciCC       = gcc
1162306a36Sopenharmony_ciOPTFLAGS = -O2
1262306a36Sopenharmony_ciCFLAGS   = -I.. -I ../../../include -g $(OPTFLAGS)
1362306a36Sopenharmony_ciLD       = ld
1462306a36Sopenharmony_ciAWK      = awk -f
1562306a36Sopenharmony_ciAR       = ar
1662306a36Sopenharmony_ciRANLIB   = ranlib
1762306a36Sopenharmony_ciOBJS     = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/)
2062306a36Sopenharmony_ciifeq ($(ARCH),i386)
2162306a36Sopenharmony_ci        CFLAGS += -DCONFIG_X86_32
2262306a36Sopenharmony_ci        IS_X86 = yes
2362306a36Sopenharmony_ciendif
2462306a36Sopenharmony_ciifeq ($(ARCH),x86_64)
2562306a36Sopenharmony_ci        CFLAGS += -DCONFIG_X86_64
2662306a36Sopenharmony_ci        IS_X86 = yes
2762306a36Sopenharmony_ciendif
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciifeq ($(ARCH),arm)
3062306a36Sopenharmony_ci        CFLAGS += -I../../../arch/arm/include -mfpu=neon
3162306a36Sopenharmony_ci        HAS_NEON = yes
3262306a36Sopenharmony_ciendif
3362306a36Sopenharmony_ciifeq ($(ARCH),aarch64)
3462306a36Sopenharmony_ci        CFLAGS += -I../../../arch/arm64/include
3562306a36Sopenharmony_ci        HAS_NEON = yes
3662306a36Sopenharmony_ciendif
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciifeq ($(findstring ppc,$(ARCH)),ppc)
3962306a36Sopenharmony_ci        CFLAGS += -I../../../arch/powerpc/include
4062306a36Sopenharmony_ci        HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
4162306a36Sopenharmony_ci                         gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
4262306a36Sopenharmony_ciendif
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciifeq ($(ARCH),loongarch64)
4562306a36Sopenharmony_ci        CFLAGS += -I../../../arch/loongarch/include -DCONFIG_LOONGARCH=1
4662306a36Sopenharmony_ci        CFLAGS += $(shell echo 'vld $$vr0, $$zero, 0' |         \
4762306a36Sopenharmony_ci                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
4862306a36Sopenharmony_ci                    rm ./-.o && echo -DCONFIG_CPU_HAS_LSX=1)
4962306a36Sopenharmony_ci        CFLAGS += $(shell echo 'xvld $$xr0, $$zero, 0' |        \
5062306a36Sopenharmony_ci                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
5162306a36Sopenharmony_ci                    rm ./-.o && echo -DCONFIG_CPU_HAS_LASX=1)
5262306a36Sopenharmony_ciendif
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciifeq ($(IS_X86),yes)
5562306a36Sopenharmony_ci        OBJS   += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
5662306a36Sopenharmony_ci        CFLAGS += -DCONFIG_X86
5762306a36Sopenharmony_ci        CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" |          \
5862306a36Sopenharmony_ci                    gcc -c -x assembler - >/dev/null 2>&1 &&    \
5962306a36Sopenharmony_ci                    rm ./-.o && echo -DCONFIG_AS_AVX512=1)
6062306a36Sopenharmony_cielse ifeq ($(HAS_NEON),yes)
6162306a36Sopenharmony_ci        OBJS   += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
6262306a36Sopenharmony_ci        CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
6362306a36Sopenharmony_cielse ifeq ($(HAS_ALTIVEC),yes)
6462306a36Sopenharmony_ci        CFLAGS += -DCONFIG_ALTIVEC
6562306a36Sopenharmony_ci        OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
6662306a36Sopenharmony_ci                vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
6762306a36Sopenharmony_cielse ifeq ($(ARCH),loongarch64)
6862306a36Sopenharmony_ci        OBJS += loongarch_simd.o recov_loongarch_simd.o
6962306a36Sopenharmony_ciendif
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci.c.o:
7262306a36Sopenharmony_ci	$(CC) $(CFLAGS) -c -o $@ $<
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci%.c: ../%.c
7562306a36Sopenharmony_ci	cp -f $< $@
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci%.uc: ../%.uc
7862306a36Sopenharmony_ci	cp -f $< $@
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ciall: raid6.a raid6test
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciraid6.a: $(OBJS)
8362306a36Sopenharmony_ci	rm -f $@
8462306a36Sopenharmony_ci	$(AR) cq $@ $^
8562306a36Sopenharmony_ci	$(RANLIB) $@
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciraid6test: test.c raid6.a
8862306a36Sopenharmony_ci	$(CC) $(CFLAGS) -o raid6test $^
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cineon1.c: neon.uc ../unroll.awk
9162306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=1 < neon.uc > $@
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cineon2.c: neon.uc ../unroll.awk
9462306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=2 < neon.uc > $@
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_cineon4.c: neon.uc ../unroll.awk
9762306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=4 < neon.uc > $@
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_cineon8.c: neon.uc ../unroll.awk
10062306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=8 < neon.uc > $@
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_cialtivec1.c: altivec.uc ../unroll.awk
10362306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=1 < altivec.uc > $@
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_cialtivec2.c: altivec.uc ../unroll.awk
10662306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=2 < altivec.uc > $@
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_cialtivec4.c: altivec.uc ../unroll.awk
10962306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=4 < altivec.uc > $@
11062306a36Sopenharmony_ci
11162306a36Sopenharmony_cialtivec8.c: altivec.uc ../unroll.awk
11262306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=8 < altivec.uc > $@
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_civpermxor1.c: vpermxor.uc ../unroll.awk
11562306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=1 < vpermxor.uc > $@
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_civpermxor2.c: vpermxor.uc ../unroll.awk
11862306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=2 < vpermxor.uc > $@
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_civpermxor4.c: vpermxor.uc ../unroll.awk
12162306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=4 < vpermxor.uc > $@
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_civpermxor8.c: vpermxor.uc ../unroll.awk
12462306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=8 < vpermxor.uc > $@
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciint1.c: int.uc ../unroll.awk
12762306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=1 < int.uc > $@
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciint2.c: int.uc ../unroll.awk
13062306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=2 < int.uc > $@
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ciint4.c: int.uc ../unroll.awk
13362306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=4 < int.uc > $@
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_ciint8.c: int.uc ../unroll.awk
13662306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=8 < int.uc > $@
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_ciint16.c: int.uc ../unroll.awk
13962306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=16 < int.uc > $@
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ciint32.c: int.uc ../unroll.awk
14262306a36Sopenharmony_ci	$(AWK) ../unroll.awk -vN=32 < int.uc > $@
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_citables.c: mktables
14562306a36Sopenharmony_ci	./mktables > tables.c
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ciclean:
14862306a36Sopenharmony_ci	rm -f *.o *.a mktables mktables.c *.uc int*.c altivec*.c vpermxor*.c neon*.c tables.c raid6test
14962306a36Sopenharmony_ci
15062306a36Sopenharmony_cispotless: clean
15162306a36Sopenharmony_ci	rm -f *~
152