^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) # This is a simple Makefile to test some of the RAID-6 code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) # from userspace.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) pound := \#
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) CC = gcc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) OPTFLAGS = -O2 # Adjust as desired
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) CFLAGS = -I.. -I ../../../include -g $(OPTFLAGS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) LD = ld
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) AWK = awk -f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) AR = ar
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) RANLIB = ranlib
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) OBJS = int1.o int2.o int4.o int8.o int16.o int32.o recov.o algos.o tables.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) ARCH := $(shell uname -m 2>/dev/null | sed -e /s/i.86/i386/)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ifeq ($(ARCH),i386)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) CFLAGS += -DCONFIG_X86_32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) IS_X86 = yes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) ifeq ($(ARCH),x86_64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) CFLAGS += -DCONFIG_X86_64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) IS_X86 = yes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ifeq ($(ARCH),arm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) CFLAGS += -I../../../arch/arm/include -mfpu=neon
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) HAS_NEON = yes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) ifeq ($(ARCH),aarch64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) CFLAGS += -I../../../arch/arm64/include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) HAS_NEON = yes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) ifeq ($(IS_X86),yes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) OBJS += mmx.o sse1.o sse2.o avx2.o recov_ssse3.o recov_avx2.o avx512.o recov_avx512.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) CFLAGS += -DCONFIG_X86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) CFLAGS += $(shell echo "vpmovm2b %k1, %zmm5" | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) gcc -c -x assembler - >/dev/null 2>&1 && \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) rm ./-.o && echo -DCONFIG_AS_AVX512=1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) else ifeq ($(HAS_NEON),yes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) OBJS += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) CFLAGS += -DCONFIG_KERNEL_MODE_NEON=1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) HAS_ALTIVEC := $(shell printf '$(pound)include <altivec.h>\nvector int a;\n' |\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) gcc -c -x c - >/dev/null && rm ./-.o && echo yes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) ifeq ($(HAS_ALTIVEC),yes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) CFLAGS += -I../../../arch/powerpc/include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) CFLAGS += -DCONFIG_ALTIVEC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) OBJS += altivec1.o altivec2.o altivec4.o altivec8.o \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) .c.o:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) $(CC) $(CFLAGS) -c -o $@ $<
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) %.c: ../%.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) cp -f $< $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) %.uc: ../%.uc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) cp -f $< $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) all: raid6.a raid6test
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) raid6.a: $(OBJS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) rm -f $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) $(AR) cq $@ $^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) $(RANLIB) $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) raid6test: test.c raid6.a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) $(CC) $(CFLAGS) -o raid6test $^
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) neon1.c: neon.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) $(AWK) ../unroll.awk -vN=1 < neon.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) neon2.c: neon.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) $(AWK) ../unroll.awk -vN=2 < neon.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) neon4.c: neon.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) $(AWK) ../unroll.awk -vN=4 < neon.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) neon8.c: neon.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) $(AWK) ../unroll.awk -vN=8 < neon.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) altivec1.c: altivec.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) $(AWK) ../unroll.awk -vN=1 < altivec.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) altivec2.c: altivec.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) $(AWK) ../unroll.awk -vN=2 < altivec.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) altivec4.c: altivec.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) $(AWK) ../unroll.awk -vN=4 < altivec.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) altivec8.c: altivec.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) $(AWK) ../unroll.awk -vN=8 < altivec.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) vpermxor1.c: vpermxor.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) $(AWK) ../unroll.awk -vN=1 < vpermxor.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) vpermxor2.c: vpermxor.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) $(AWK) ../unroll.awk -vN=2 < vpermxor.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) vpermxor4.c: vpermxor.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) $(AWK) ../unroll.awk -vN=4 < vpermxor.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) vpermxor8.c: vpermxor.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) $(AWK) ../unroll.awk -vN=8 < vpermxor.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) int1.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) $(AWK) ../unroll.awk -vN=1 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) int2.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) $(AWK) ../unroll.awk -vN=2 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) int4.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) $(AWK) ../unroll.awk -vN=4 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) int8.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) $(AWK) ../unroll.awk -vN=8 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) int16.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) $(AWK) ../unroll.awk -vN=16 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) int32.c: int.uc ../unroll.awk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) $(AWK) ../unroll.awk -vN=32 < int.uc > $@
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) tables.c: mktables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) ./mktables > tables.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) clean:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) rm -f *.o *.a mktables mktables.c *.uc int*.c altivec*.c vpermxor*.c neon*.c tables.c raid6test
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) spotless: clean
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) rm -f *~