1 # SPDX-License-Identifier: GPL-2.0
2 obj-
$(CONFIG_RAID6_PQ
) += raid6_pq.o
4 raid6_pq-y
+= algos.o recov.o tables.o int1.o int2.o int4.o \
7 raid6_pq-
$(CONFIG_X86
) += recov_ssse3.o recov_avx2.o mmx.o sse1.o sse2.o avx2.o avx512.o recov_avx512.o
8 raid6_pq-
$(CONFIG_ALTIVEC
) += altivec1.o altivec2.o altivec4.o altivec8.o \
9 vpermxor1.o vpermxor2.o vpermxor4.o vpermxor8.o
10 raid6_pq-
$(CONFIG_KERNEL_MODE_NEON
) += neon.o neon1.o neon2.o neon4.o neon8.o recov_neon.o recov_neon_inner.o
11 raid6_pq-
$(CONFIG_S390
) += s390vx8.o recov_s390xc.o
13 hostprogs-y
+= mktables
15 quiet_cmd_unroll
= UNROLL
$@
16 cmd_unroll
= $(AWK
) -f
$(srctree
)/$(src
)/unroll.awk
-vN
=$(UNROLL
) \
17 < $< > $@ ||
( rm -f
$@
&& exit
1 )
19 ifeq ($(CONFIG_ALTIVEC
),y
)
20 altivec_flags
:= -maltivec
$(call cc-option
,-mabi
=altivec
)
22 ifdef CONFIG_CC_IS_CLANG
23 # clang ppc port does not yet support -maltivec when -msoft-float is
24 # enabled. A future release of clang will resolve this
25 # https://bugs.llvm.org/show_bug.cgi?id=31177
26 CFLAGS_REMOVE_altivec1.o
+= -msoft-float
27 CFLAGS_REMOVE_altivec2.o
+= -msoft-float
28 CFLAGS_REMOVE_altivec4.o
+= -msoft-float
29 CFLAGS_REMOVE_altivec8.o
+= -msoft-float
30 CFLAGS_REMOVE_altivec8.o
+= -msoft-float
31 CFLAGS_REMOVE_vpermxor1.o
+= -msoft-float
32 CFLAGS_REMOVE_vpermxor2.o
+= -msoft-float
33 CFLAGS_REMOVE_vpermxor4.o
+= -msoft-float
34 CFLAGS_REMOVE_vpermxor8.o
+= -msoft-float
38 # The GCC option -ffreestanding is required in order to compile code containing
39 # ARM/NEON intrinsics in a non C99-compliant environment (such as the kernel)
40 ifeq ($(CONFIG_KERNEL_MODE_NEON
),y
)
41 NEON_FLAGS
:= -ffreestanding
43 NEON_FLAGS
+= -march
=armv7-a
-mfloat-abi
=softfp
-mfpu
=neon
45 CFLAGS_recov_neon_inner.o
+= $(NEON_FLAGS
)
47 CFLAGS_REMOVE_recov_neon_inner.o
+= -mgeneral-regs-only
48 CFLAGS_REMOVE_neon1.o
+= -mgeneral-regs-only
49 CFLAGS_REMOVE_neon2.o
+= -mgeneral-regs-only
50 CFLAGS_REMOVE_neon4.o
+= -mgeneral-regs-only
51 CFLAGS_REMOVE_neon8.o
+= -mgeneral-regs-only
56 $(obj
)/int1.c
: UNROLL
:= 1
57 $(obj
)/int1.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
58 $(call if_changed
,unroll
)
61 $(obj
)/int2.c
: UNROLL
:= 2
62 $(obj
)/int2.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
63 $(call if_changed
,unroll
)
66 $(obj
)/int4.c
: UNROLL
:= 4
67 $(obj
)/int4.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
68 $(call if_changed
,unroll
)
71 $(obj
)/int8.c
: UNROLL
:= 8
72 $(obj
)/int8.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
73 $(call if_changed
,unroll
)
76 $(obj
)/int16.c
: UNROLL
:= 16
77 $(obj
)/int16.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
78 $(call if_changed
,unroll
)
81 $(obj
)/int32.c
: UNROLL
:= 32
82 $(obj
)/int32.c
: $(src
)/int.uc
$(src
)/unroll.awk FORCE
83 $(call if_changed
,unroll
)
85 CFLAGS_altivec1.o
+= $(altivec_flags
)
87 $(obj
)/altivec1.c
: UNROLL
:= 1
88 $(obj
)/altivec1.c
: $(src
)/altivec.uc
$(src
)/unroll.awk FORCE
89 $(call if_changed
,unroll
)
91 CFLAGS_altivec2.o
+= $(altivec_flags
)
93 $(obj
)/altivec2.c
: UNROLL
:= 2
94 $(obj
)/altivec2.c
: $(src
)/altivec.uc
$(src
)/unroll.awk FORCE
95 $(call if_changed
,unroll
)
97 CFLAGS_altivec4.o
+= $(altivec_flags
)
99 $(obj
)/altivec4.c
: UNROLL
:= 4
100 $(obj
)/altivec4.c
: $(src
)/altivec.uc
$(src
)/unroll.awk FORCE
101 $(call if_changed
,unroll
)
103 CFLAGS_altivec8.o
+= $(altivec_flags
)
104 targets
+= altivec8.c
105 $(obj
)/altivec8.c
: UNROLL
:= 8
106 $(obj
)/altivec8.c
: $(src
)/altivec.uc
$(src
)/unroll.awk FORCE
107 $(call if_changed
,unroll
)
109 CFLAGS_vpermxor1.o
+= $(altivec_flags
)
110 targets
+= vpermxor1.c
111 $(obj
)/vpermxor1.c
: UNROLL
:= 1
112 $(obj
)/vpermxor1.c
: $(src
)/vpermxor.uc
$(src
)/unroll.awk FORCE
113 $(call if_changed
,unroll
)
115 CFLAGS_vpermxor2.o
+= $(altivec_flags
)
116 targets
+= vpermxor2.c
117 $(obj
)/vpermxor2.c
: UNROLL
:= 2
118 $(obj
)/vpermxor2.c
: $(src
)/vpermxor.uc
$(src
)/unroll.awk FORCE
119 $(call if_changed
,unroll
)
121 CFLAGS_vpermxor4.o
+= $(altivec_flags
)
122 targets
+= vpermxor4.c
123 $(obj
)/vpermxor4.c
: UNROLL
:= 4
124 $(obj
)/vpermxor4.c
: $(src
)/vpermxor.uc
$(src
)/unroll.awk FORCE
125 $(call if_changed
,unroll
)
127 CFLAGS_vpermxor8.o
+= $(altivec_flags
)
128 targets
+= vpermxor8.c
129 $(obj
)/vpermxor8.c
: UNROLL
:= 8
130 $(obj
)/vpermxor8.c
: $(src
)/vpermxor.uc
$(src
)/unroll.awk FORCE
131 $(call if_changed
,unroll
)
133 CFLAGS_neon1.o
+= $(NEON_FLAGS
)
135 $(obj
)/neon1.c
: UNROLL
:= 1
136 $(obj
)/neon1.c
: $(src
)/neon.uc
$(src
)/unroll.awk FORCE
137 $(call if_changed
,unroll
)
139 CFLAGS_neon2.o
+= $(NEON_FLAGS
)
141 $(obj
)/neon2.c
: UNROLL
:= 2
142 $(obj
)/neon2.c
: $(src
)/neon.uc
$(src
)/unroll.awk FORCE
143 $(call if_changed
,unroll
)
145 CFLAGS_neon4.o
+= $(NEON_FLAGS
)
147 $(obj
)/neon4.c
: UNROLL
:= 4
148 $(obj
)/neon4.c
: $(src
)/neon.uc
$(src
)/unroll.awk FORCE
149 $(call if_changed
,unroll
)
151 CFLAGS_neon8.o
+= $(NEON_FLAGS
)
153 $(obj
)/neon8.c
: UNROLL
:= 8
154 $(obj
)/neon8.c
: $(src
)/neon.uc
$(src
)/unroll.awk FORCE
155 $(call if_changed
,unroll
)
158 $(obj
)/s390vx8.c
: UNROLL
:= 8
159 $(obj
)/s390vx8.c
: $(src
)/s390vx.uc
$(src
)/unroll.awk FORCE
160 $(call if_changed
,unroll
)
162 quiet_cmd_mktable
= TABLE
$@
163 cmd_mktable
= $(obj
)/mktables
> $@ ||
( rm -f
$@
&& exit
1 )
166 $(obj
)/tables.c
: $(obj
)/mktables FORCE
167 $(call if_changed
,mktable
)